Inversion jour/mois uniquement en VBA

Bonjour,

J'ai actuellement un fichier csv d'une centaine de ligne composé de date et d'autres informations. La date et en format "12/04/2017 09:28" (jj/mm/aaaa hh:mm).

Lorsque je l'ouvre avec excel et que je fait une conversion de donnée à la main avec séparateur délimité virgule et séparateur de texte " je me retrouve bien avec ma première colonne avec mes dates : "12/04/2017 09:28". Je voudrais l'automatiser.

J'ai donc créé mon vba pour le faire j'ai aussi essayer de faire un enregistrement de macro, mais rien y fait, à chaque fois que je le fais par VBA (même enregistré), je me retrouve avec des dates 04/12/2017 09:28 et Excel me dit que le format est jj/mm/aaaa hh:mm alors qu'en réalité c'est mm/jj/aaaa hh:mm.

Pourquoi le VBA m'inverse jour et mois alors que lors de mon enregistrement de macro j'ai le bon résultat.

(Ci-joint le fichier exemple)

Merci de votre aide.

Cordialement

Bonjour, erreur de ma part

Bonjour,

A essayer :

Sub CBT()
    With ActiveSheet
        n = .Range("A" & .Rows.Count).End(xlUp).Row
        With .Range("A1:A" & n)
            .Replace "/04/", " avril "
            .TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
             TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
             Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
             :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
             Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1 _
             ), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array _
             (20, 1), Array(21, 1), Array(22, 1)), TrailingMinusNumbers:=True
        End With
        For Each c In .Range("B1:C" & n)
            c.NumberFormat = "dd/mm/yyyy hh:mm:ss"
            c.Value = CDate(c.Value)
        Next c
    End With
End Sub

J'ai un soucis avec le code donnée.

Le remplacement du /04/ va peut-être fonctionné pour ce jour mais il ne fonctionnera surement pas pour le lendemain ou un autre jour sans compter le jour où j'ai un 04/04 à mon avis.

De plus j'ai une execption : Incompatibilité de type sur la ligne :

c.Value = CDate(c.Value)

Le problème est que la méthode TextToColumns ne permet pas d'intervenir pour forcer une conversion avant que VBA ait pris la main et converti à sa façon... Les paramètres dates lors du transfer en colonnes sont inopérants.

Dans ces conditions, le remplacement de "/04/" [il s'agit de "/04/" et non "04" ! ] par " avril " empêche la conversion automatique par VBA.

La chose doit pouvoir être généralisée en détectant cette partie de date, en extrayant le numéro pour renvoyer le mois avec MonthName...

En dehors de cela, il te reste à paramétrer la ventilation des colonnes dates en texte, cela fonctionne, pas de conversion par VBA, mais tu te retrouves de la même façon avec une conversion à faire... (+ des cellules au format Texte...)

Je suis un peu surpris de l'erreur 13 car je proposais justement une opération en boucle sur chaque cellule parce que l'essai de le faire en masse provoquait cette erreur...

Si tu ne parviens pas à convertir de cette façon, il te restera encore à essayer avec d'autres fonctions en dissociant date et heure pour les re-réunir ensuite...

Il reste pas mal d'essais à faire, y compris extraction des dates avant ventilation en colonnes... Je ne dirais pas que ma proposition me satisfaisait pleinement, mais je l'ai proposée parce qu'elle fonctionnait !

Bon courage.

Cordialement.

Rechercher des sujets similaires à "inversion jour mois uniquement vba"