Bonjour,
Pour répondre à la question posée, c'est perdu dès le :
Workbooks.Open "C:\Users\mmetivier\Desktop\Projet\Sources\E0.csv"
En ouverture de CSV, Excel passe en full automatique et pour des raisons qui personnellement m'ont toujours échappées et que je considère comme un bug il essaye en priorité d'interpréter les dates au format US donc mm/jj/aaaa et se rabat seulement sur JJ/MM/AAAA si le premier nombre est supérieur à 12 et donc non interprétable comme un mois, comme tu l'as remonté.
Il faut utiliser :
Workbooks.OpenText MonChemin & Monfic, Encodage, , xlDelimited, xlTextQualifierNone, , False, True, , , , , MesColonnes
où MesColonnes est un tableau à deux dimensions, qui en théorie contient des couples n° colonne / format mais si j'en crois ce que j'écrivais dans une vie antérieure il faut surtout mettre le code format de la colonne k en position k, colonne 2
Voici un code qui fonctionnait pour charger le tableau (Dim MesColonnes(1 To MaxColCSV) As Variant ):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 'préparation formats de colonnes (sinon XL retourne le date en mmjjaaaa si jj<=12)
For k = 1 To MaxColCSV
'normalement inutile car array(k, toto) suffirait pour mettre la colonne k dans le type toto
'en fait c'est la position donc mescolonnes(k) qui donne le n° de colonne...
'comme ça, ça marche et ça marchera encore si le bug XL est corrigé...
MesColonnes(k) = Array(k, xlGeneralFormat)
Next k
MesColsX = .Cells(MaLigne, ColImpDates)
While MesColsX <> "" ' partie utile : type jjmmaaaa sur colonnes date
k = UnElement(MesColsX)
MesColonnes(k) = Array(k, xlDMYFormat)
Wend
MesColsX = .Cells(MaLigne, ColImpTextes)
While MesColsX <> "" ' partie utile : type texte forcé
k = UnElement(MesColsX)
MesColonnes(k) = Array(k, xlTextFormat)
Wend |
Les .cells(MaLigne, UneColonne) renvoient du paramétrage qui contient la liste des colonnes respectivement contenant des dates (colImpDate) et du texte (colImpTextes pour éviter par exemple qu'un numéro de sécu soit considéré comme un numérique) sous la forme par exem queple "1;2;3" puis la fonction "UnElement" renvoie le premier élément et raccourcit la chaine.
J'ai retrouvé que je renommais aussi les fichiers en .txt, mais je ne sais plus si c'est parce qu'Excel ignore le paramètre MesColonnes dans le cas d'un .csv, ou si c'était seulement par parano.
Je recommande donc également PowerQuery...
Partager