Problème conversion date ddj/mm/yyyy macro VBA

Bonjour,

J'ai un soucis sur les conversions des dates je m'explique:

J'extrais d'un fichier excel, des dates sous ce format:

12-FEV-20
05-FEV-20
05-FEV-20
10-DEC-19
12-FEV-20

Lorsque je lance l'enregistrement je converti en format date la colonne

je fais recherche F remplace FEV par 02 puis DEC par 12...

Lorsque je fais tourner la macro, il inverse le format en mm/dd/yyyy.

au lieu d'obtenir 12/02/2020 il me donne 02/12/2020.

j'ai essayé de modifier selection.NumberFormat à l'origine en "m/d/yyyy" en mettant à la place "dd/mm/yyyy"

mais cela ne fonctionne pas. Au pire quand j'essaie d'enregistrer il me dit cette commande va arrêter le débogueur.

Dans ce cas la je fais outils > continuer puis je réaffecte la macro je refais tourner mais rien ne change

voir le codage:

image

Je commence tout juste à mettre le nez dans les macros c'est encore très obscur pour moi qquun aurait il la gentillesse de m'aider sur ce sujet?

Merci beaucoup

Bonjour,

Un essai :

Option Explicit
Option Base 0
Sub ConvertirDates()

Dim Lig As Long, Mois As Variant, Mo As Variant

Mois = Array("JAN", "FEV", "MAR", "AVR", "MAI", "JUN", "JUL", "AOU", "SEP", "OCT", "NOV", "DEC")
With Sheets("mise en page")
    For Lig = 1 To .Range("A" & Rows.Count).End(xlUp).Row
        For Mo = 0 To 11
            If .Range("A" & Lig) Like "*" & Mois(Mo) & "*" Then Exit For
        Next Mo
        If .Range("A" & Lig) Like "##-???-##" Then
            .Range("A" & Lig) = DateSerial(Split(.Range("A" & Lig), "-")(2) + 2000, Mo + 1, Split(.Range("A" & Lig), "-")(0))
        End If
    Next Lig
End With

End Sub

Merci de vérifier que l'orthographe des mois dans le code correspond bien à vos données (pas de caractères spéciaux notamment).

Bonjour,

un fichier excel joint aurait été parfait !

en VBA, la règle c'est le format US quand excel peut ... c'est-à-dire que si le premier nombre est inférieur à 12 excel le considérera comme le mois, sinon il considérera la date comme du texte !

il y a plusieurs solutions

  • traiter en amont dans la feuille avant de passer en VBA ... par exemple remplacer FEV par fév ou 02, DEC par déc ou 12 au sein même de la feuille par une formule utilisant CNUM et STXT
  • traiter dans le code VBA en inversant systématiquement les 2 premiers nombres (pas très propre mais c'est efficace)
  • utiliser CDate ou DateSerial
  • etc.

Si tu as un fichier, on peut voir cela plus concrètement.

edit : Voir l'une des solutions mise en pratique par Pedro que je salue

Bonjour!!

Merci beaucoup Pedro, ton code à fonctionné à merveille au top!!

Pour une profane comme moi ce langage s'apparente à du chinois mais c'est c'est magique sa fonctionne :))).

et Merci à Steelson également pour tes conseils

Pour une profane comme moi ce langage s'apparente à du chinois mais c'est c'est magique sa fonctionne :))).

Bonjour,

Une version commentée :

Option Explicit 'Oblige à déclarer les variables utilisées
Option Base 0 'Le premier élément d'un tableau est l'élément 0
Sub ConvertirDates()

Dim Lig As Long, Mois As Variant, Mo As Variant 'Déclaration des variables

Mois = Array("JAN", "FEV", "MAR", "AVR", "MAI", "JUN", "JUL", "AOU", "SEP", "OCT", "NOV", "DEC") 'Création d'un tableau contenant les abréviations des mois
With Sheets("mise en page") 'Tout élément commençant par "." se rattache à cette feuille
    For Lig = 1 To .Range("A" & Rows.Count).End(xlUp).Row 'Boucle sur les lignes de la feuille (de 1 à la dernière)
        For Mo = 0 To 11 'Boucle de 0 à 12 (pour parcourir le tableau des mois)
            If .Range("A" & Lig) Like "*" & Mois(Mo) & "*" Then Exit For 'Si correspondance, on sort de la boucle
        Next Mo
        If .Range("A" & Lig) Like "##-???-##" Then 'Si la cellule A contient une date à convertir
            .Range("A" & Lig) = DateSerial(Split(.Range("A" & Lig), "-")(2) + 2000, Mo + 1, Split(.Range("A" & Lig), "-")(0)) 'On remplace le contenu par une date valide (AA = partie du texte après 2ème "-" ; MM = dernière valeur de la variable Mo + 1 : JJ = partie du texte avant le 1er "-")
        End If
    Next Lig
End With

End Sub
Rechercher des sujets similaires à "probleme conversion date ddj yyyy macro vba"