Convertir date MM/JJ/AAAA vers JJ/MM/AAAA en VBA

Bonjour à tous,

Je voudrais convertir tout une colonne d'un fichier csv contenant des dates sous la forme américaine "MM/JJ/AAAA" vers le format français "JJ/MM/AAAA" , grâce à une ligne de code en VBA.

J'ai déjà essayé le

.NumberFormat = "dd/mm/yyyy;" mais rien y fait j'ai toujours le même problème.

Merci d'avance pour vos réponses

Léo

Bonjour,

Voici une solution

CDbl(DateSerial(Mid(CStr(Tableau(i)), 7, 4), Mid(CStr(Tableau(i)), 1, 2), Mid(CStr(Tableau(i)), 4, 2)))

à faire lors du chargement, après chargement ce n'est pas possible sauf si ton fichier csv comporte un caractère empêchant excel d’interpréter la date ... donc ce serait bien de mettre quelques lignes de ton fichier csv

Bonjour,

Et en regardant du côté de la fonction "Données/Convertir"?

Soit au moment de l'import (préférable), ou même après...

A la troisième étape, choisir le type de date.

Un vrai ERP, un vrai système qui fournit des fichiers csv, les fournit avec des dates en format textuel, comprenant par exemple un espace avant et/ou après la date. Dans ce cas il n'y pas d’ambiguïté t excel ne prendra pas le premier nombre pour un mois quand il est plus petit ou égal à 12.

Dans le cas contraire, ma façon de faire est d'importer dans un tableau et de traiter les dates avec DateSerial avant des les enregistrer dans la feuille excel.

Ou bien en ajoutant une apostrophe pour forcer l'import de la date en texte.

Exemple ...

Sub test()
Dim donnees As Variant
    donnees = Application.GetOpenFilename("Text Files (*.csv), *.csv")
    If donnees = False Then Exit Sub
    Cells.Clear
    Range("A1").Select
    Extraction donnees, ","
End Sub

Sub Extraction(Fichier As Variant, Separateur As Variant)
    Dim Tableau() As String
    Dim Resultat
    Open Fichier For Input As #1
        ligne = 1
        Do While Not EOF(1)
            Line Input #1, ContenuLigne
            Tableau = Split(ContenuLigne, Separateur)
            nItems = UBound(Tableau) + 1
            If ligne = 1 Then ReDim Resultat(1 To nItems, 1 To 1)
            If ligne > 1 Then ReDim Preserve Resultat(1 To nItems, 1 To ligne) ' Preserve ne permet de redimensionner que la dernière dimension d'un tableau avec conservation des données
            For i = 0 To UBound(Tableau)
                If i = 0 And j > 1 Then 'date
                    Resultat(i + 1, ligne) = CDbl(DateSerial("20" & Mid(CStr(Tableau(i)), 7, 2), Mid(CStr(Tableau(i)), 4, 2), Mid(CStr(Tableau(i)), 1, 2)))
                Else
                    Resultat(i + 1, ligne) = Tableau(i)
                End If
            Next i
            ligne = ligne + 1
        Loop
    Close #1
    Resultat = Application.Transpose(Resultat)
    Selection.Resize(UBound(Resultat), UBound(Resultat, 2)) = Resultat
End Sub

Je pense qu'intervenir après chargement par excel tout seul n'est pas possible, car on ne pourra plus savoir si la date a les jour/mois inversés ou non ! Il faut doc le faire au cours du chargement.

21test-source.zip (111.82 Ko)

Une autre astuce consiste à tout simplement inverser jour et mois lors du chargement et mettre ainsi la date à la "norme" US.

Rechercher des sujets similaires à "convertir date aaaa vba"