Bonsoir,
Je me casse la tête depuis quelques jours sur une chose qui parait pourtant simple...
Je crée une macro Excel qui va suivre les étapes suivantes:
- Copie des données d'un .csv
- Collage des données dans un onglet de mon tableau Excel
- Conversion des données avec séparateur ","
Une des colonnes contient des dates que je souhaite exploiter.
Lorsque je fais la conversion de la colonne D où se trouvent ces dates en format Date courte, le résultat est conforme, j'ai bien uniquement des dates au format JJ/MM/AAAA.
Si par contre j'automatise cette conversion en VBA, le résultat obtenu est inexploitable : La colonne D (Et uniquement...) va passer en format Texte, et après impossible de changer le format, même manuellement.
J'ai trouvé une solution de contournement moche mais efficace: Je crée une nouvelle colonne en E une fois les données collées, où pour chaque cellule j'applique "=D1*1", "=D2*1"... Avant de formater en Date courte, ce qui me donne effectivement des dates courtes exploitables... SAUF pour les jours compris entre le 01 et le 12 du mois, où Excel inverse le mois et le jour
En gros je me retrouve avec :18/11/2017 - 17/11/2017 - 16/11/2017 - 15/11/2017 - 14/11/2017 - 13/11/2017 et... 11/12/2017.
J'imagine qu'il y a une méthode plus simple et propre pour exploiter les données de ce fichier .csv, et que le problème vient soit d'un problème de format horaire entre la source du CSV et mon OS, soit de la conversion.
Je ne peux malheureusement pas poster le .csv en question pour des questions de confidentialité, mais je peux mettre le code que j'utilise:
Il doit y avoir quelque chose à modifier dans les Arrays au moment de la conversion, mais j'ai beau tester, je ne trouve pas quoi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 Windows("query.csv").Activate Cells.Select Selection.Copy Windows("XXXX.xlsm").Activate Sheets("Extract").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Columns("A:A").Select Selection.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), Array(23, 1), Array(24, 1)), TrailingMinusNumbers _ :=True Columns("E:E").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("E1").Select ActiveCell.FormulaR1C1 = "Open Date" Columns("E:E").Select Selection.NumberFormat = "General" Range("E2").Select ActiveCell.FormulaR1C1 = "=RC[-1]*1" Range("E2").Select Selection.AutoFill Destination:=Range("E2:E1342") Range("E2:E1342").Select Columns("E:E").Select Selection.NumberFormat = "m/d/yyyy" End Sub
Avez-vous une idée pour fluidifier ce process svp?
Merci!
Partager