IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Transformation date --> Problème de format [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2013
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 10
    Par défaut Transformation date --> Problème de format
    Bonjour,

    j'aurai besoin d'aide pour formater des dates pour obtenir des dates du type "dd/mm/yyyy" sachant que les données de base (colonnes J & K) peuvent se présenter sous différentes formes:

    - "dd-mm-yy A" (Ex: 26-Jan-16 A) avec le mois en caractères alpha anglo saxons (Jan, Feb...). Les caractères " A" sont à supprimer avant la conversion de la date
    - "dd-mm-yy*" (Ex: 30-Aug-16*) avec le mois en caractères alpha anglo saxons (Jan, Feb...). Le caractère "*" est à supprimer avant la conversion de la date
    - "dd-mm-yy" (Ex: 22-Feb-16) avec le mois en caractères alpha anglo saxons (Jan, Feb...).
    - "xxxxx" (Ex: 42458).

    le code ecrit permet le formatage partiel des données mais certains résultats obtenus (en jaune) sont curieux et je n'arrive pas à remédier à ces problèmes.
    Merci de votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Si tu commences par faire un =Left( ,9), tous les cas devraient être identiques, non ?

  3. #3
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour pierrot14,

    Pour ma part, j'ai fait un petit truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Option Explicit
     
    Sub ModifDate()
    Dim oRng As Range
    Dim i As Long
     
    With Worksheets("Extract PMV_Transf")
        Set oRng = .Range("J2")
     
        For i = 0 To Application.WorksheetFunction.Max(.Cells(.Rows.Count, "J").End(xlUp).Row, .Cells(.Rows.Count, "K").End(xlUp).Row) - oRng.Row
            If oRng.Offset(i, 0) <> "" Then
                oRng.Offset(i, 3) = oTransform(oRng.Offset(i, 0))
            End If
     
            If oRng.Offset(i, 1) <> "" Then
                oRng.Offset(i, 4) = oTransform(oRng.Offset(i, 1))
            End If
        Next i
     
    End With
     
    End Sub
     
    Function oTransform(oDate As String)
    Dim oMonth As Integer
    Dim oTest As String
    Dim EngMonth As Variant
     
    EngMonth = Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
     
    If InStr(oDate, "-") Then
        oTest = Mid(oDate, InStr(oDate, "-") + 1, 3)
        oMonth = Application.Match(oTest, EngMonth, False)
     
        If IsDate(CDate(Left(oDate, 2) & "/" & oMonth & "/" & Mid(oDate, 8, 2))) Then
            oTransform = Format(CDate(Left(oDate, 2) & "/" & oMonth & "/" & Mid(oDate, 8, 2)), "dd/mm/yyyy")
        Else
            oTransform = "ERREUR"
        End If
    ElseIf IsNumeric(oDate) Then
        oTransform = CDate(oDate)
    End If
     
    End Function
    Je crois que ça fonctionne comme tu veux !

    N'hésite pas à revenir vers moi !

    Cordialement,
    Kimy

  4. #4
    Membre averti
    Inscrit en
    Décembre 2013
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 10
    Par défaut
    bonjour Kimy, merci totu d'abord de ton aide.

    bon j'ai essayé ton code, ca améliore énormément les choses mais il y a toujours un loup...
    par exemple, une date iniale "07-Mar-14 A" se transforme en 03/07/2014 (ligne 6). j'ai déjà rencontré ce problème entre le format francais et us.

    Merci encore.

  5. #5
    Membre averti
    Inscrit en
    Décembre 2013
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 10
    Par défaut
    je pense avoir trouvé la solution à mon problème en modifiant faisant le résultat d'un cas de test dans la fonction [oTransform = DateSerial(Mid(oDate, 8, 2), oMonth, Left(oDate, 2)]
    Merci encore de votre coup de pouce!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    Option Explicit
     
    Sub ModifDate()
    Dim oRng As Range
    Dim i As Long
     
    With Worksheets("Extract PMV_Transf")
        Set oRng = .Range("J2")
     
        For i = 0 To Application.WorksheetFunction.Max(.Cells(.Rows.Count, "J").End(xlUp).Row, .Cells(.Rows.Count, "K").End(xlUp).Row) - oRng.Row
            If oRng.Offset(i, 0) <> "" Then
                oRng.Offset(i, 3) = oTransform(oRng.Offset(i, 0))
            End If
     
            If oRng.Offset(i, 1) <> "" Then
                oRng.Offset(i, 4) = oTransform(oRng.Offset(i, 1))
            End If
        Next i
     
    End With
     
    End Sub
     
    Function oTransform(oDate As String)
    Dim oMonth As Integer
    Dim oTest As String
    Dim EngMonth As Variant
     
    EngMonth = Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
     
    If InStr(oDate, "-") Then
        oTest = Mid(oDate, InStr(oDate, "-") + 1, 3)
        oMonth = Application.Match(oTest, EngMonth, False)
     
        If IsDate(CDate(Left(oDate, 2) & "/" & oMonth & "/" & Mid(oDate, 8, 2))) Then
            oTransform = DateSerial(Mid(oDate, 8, 2), oMonth, Left(oDate, 2))
        Else
            oTransform = "ERREUR"
        End If
    ElseIf IsNumeric(oDate) Then
        oTransform = Format(CDate(oDate), "dd/mm/yyyy")
    End If
     
    End Function

  6. #6
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut


    Plus qu'à lire ma signature afin de passer en ton post !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [débutant]Probléme de format de date
    Par Greg84 dans le forum Access
    Réponses: 2
    Dernier message: 10/08/2006, 14h31
  2. Problème de format de date par défaut
    Par anitshka dans le forum Langage
    Réponses: 4
    Dernier message: 31/07/2006, 12h22
  3. Problème de format de date
    Par pilou0013 dans le forum Access
    Réponses: 2
    Dernier message: 11/06/2006, 22h56
  4. [VB.net] problème de format de date
    Par cladsam dans le forum Windows Forms
    Réponses: 4
    Dernier message: 11/10/2005, 18h27
  5. Problème de Format de date
    Par titititi007 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/06/2003, 08h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo