Microsoft 365 Mauvais format date dans l'export de données csv avec code VBA

luke3300

XLDnaute Impliqué
Bonjour le forum,
Je bloque sur l'utilisation d'un code pour extraire et convertir des données de plusieurs fichiers csv et les grouper dans un xlsm.
J'utilise ce code pour extraire et grouper les données:

VB:
Sub ImportDonnees()
Dim Chemin As String, Fichier As String
Dim Ws As Worksheet
Dim Ligne As Long

  Application.ScreenUpdating = False
  Set Ws = Sheets("Feuil1")
  Ws.Columns("A:AK").ClearContents
  Chemin = ThisWorkbook.Path & Application.PathSeparator
  Ligne = 1
  Fichier = Dir(Chemin & "*.csv")
  Do While Fichier <> ""
    With Workbooks.Open(Chemin & Fichier)
      With .Sheets(1)
        .Range("A2:AK" & .Range("A" & Rows.Count).End(xlUp).Row).Copy Ws.Range("A" & Ligne)
      End With
      .Close savechanges:=False
    End With
    Ligne = Ws.Range("A" & Rows.Count).End(xlUp).Row + 1
    Fichier = Dir
  Loop
  Ws.Columns("A").TextToColumns DataType:=xlDelimited, Tab:=False, Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, xlMDYFormat), Array(5, xlMDYFormat))
End Sub

Et voici une ligne d'exemple de données qui se trouvent dans les fichiers csv (toutes les lignes des fichiers sont semblables au niveau de la structure):

10063- DS / 13965- DM BRX / 10288- BA / 10359- NIV,,1XGD183,1XGD183,4615,10063- 10063- DS / 13965- DM BRX / 10288- BA / 10359- NIV,,BGOOD Jhonny,,16592,, 2915233208541566497,Road Speed Overspeeding,Détail,05-07-21,01:13:44,05-07-21,01:13:47,CEST,1,"50,59",km/h,50,,00:00:03,"50.157,39","50.157,43",Contournement Sud,[INCONNU],Contournement Sud,[INCONNU],,,"50.59223 , 4.30752","50.59186 , 4.30766","0,000","0,0"

Le tout fonctionne correctement sauf qu'au bout du compte, je me retrouve avec un mauvais format de date dans les colonnes 15 et 17 du fichier xlsm. Celles-ci qui au départ dans les csv sont bien sous DMY se retrouvent sous MDY et donc ça m'impose à chaque fois de remplacer toutes ces données.

1626758257601.png


Je ne comprends absolument pas pourquoi le fait d'extraire et de grouper ces données impacte le format des dates dans le résultat.
Quelqu'un pourrait-il m'éclairer sur ce que je dois faire pour résoudre ce problème?
Que dois-je changer ou ajouter au code actuel pour que les dates, une fois extraite, soient sous format DMY (jour, mois, année)?

Merci d'avance et belle journée à tous.
 
Dernière édition:

chris

XLDnaute Barbatruc
Bonjour

Parce qu'il ne faut pas ouvrir un fichier csv mais l'importer en précisant le format des données numériques et dates, sinon Excel le cuisine à la mode US

Avec 365 le plus simple est d'utiliser PowerQuery, totalement intégré à Excel, pour importer et compiler
 

luke3300

XLDnaute Impliqué
Bonjour Chris,
Merci pour ta réponse.
PowerQuery est une solution mais pour cela je dois revoir le process concernant ces données car je ne suis pas seul à les utiliser. Je préfèrerais donc y remédier en corrigeant le code.
Bonne journée à toi.
 

luke3300

XLDnaute Impliqué
Bonjour le forum, Chris,
Voilà je reviens vers vous pour vous donner du feedback sur mon problème résolu :p
J'ai bien évidement essayé avec PowerQuerry comme suggéré par Chris et même si le résultat correspond aux attentes, mes collègues qui doivent me remplacer ne sont pas à mêmes de le faire. C'est dommage, je l'avoue.
Donc j'ai continué à plancher sur le problème et je suis arrivé à obtenir le résultat recherché en créant une macro qui insère des colonnes, convertit les données de la date mal formatée et en les réagençant sous DMY.
Bref, la macro a été faite avec l'enregistreur de macro d'Excel ... pas top mais comme le résultat est là ... c'est OK.
Merci pour votre aide et bon WE.
 

Wayki

XLDnaute Impliqué
Bonjour,
Sans VBA il m'arrive de faire des liaisons avec la formule =texte(cellule,"jj mm aa").
"jj mm aa" pour le format de date que tu veux.
Peut être peut tu adapter à ta macro avec un coup d'enregistreur sur cette formule afin de l'alléger ?
 

chris

XLDnaute Barbatruc
Bonjour à tous

Donc j'ai continué à plancher sur le problème et je suis arrivé à obtenir le résultat recherché en créant une macro qui insère des colonnes, convertit les données de la date mal formatée et en les réagençant sous DMY.
Attention cependant car souvent des dates passent mais ne sont pas conformes à l'original (inversion du mois et du jour)

PowerQuery peut se paramétrer de façon qu'il n'y ai rien à faire à part choisir le fichier...

A défaut utiliser en VBA l'ancienne méthode d'import qui permet de préciser le type et format des colonnes importées :
  • soit QueryTable,
  • soit OpenText en précisant bien Local:=True et en paramétrant le format des colonnes dates et numériques
 
Dernière édition:

Discussions similaires