Bonjour à tous,
Voila maintenant des mois que je parcours ce forum afin de trouver les solutions à mes divers problèmes en matière de programmation, mais j'avoue que cette fois ci je bloque un peu pour optimiser mon code.
En fait, je dois importer un certain nombre de fichiers txt et csv (présent dans un même dossier qui contient des dizaines de milliers de fichiers) pour les inclure les uns à la suite des autres dans une ou plusieurs feuilles Excel.
J'ai à faire à 3 type de fichiers de structure différente :
Le premier type, .txt, 29 colonnes, séparateur ";"
Le second, .txt, 9 colonnes, séparateur ";"
Le troisième, .csv, 24 colonnes, séparateur "," et "/"
Les fichiers des deux premiers types sont respectivement copiés et collés l'un en dessous de l'autre (ils sont consolidés en fait car meme structure de colonne), dans une feuille excel (2 feuilles excel différentes donc)
Pour le troisième type je n'ai qu'un seul fichier à importer à chaque fois donc pas de consolidation dans ce cas la, mais seulement la création d'une troisième feuille (contenant les données) dans excel.
J'arrive parfaitement à importer les fichiers des 2 premiers types directement en utilisant le code suivant :
Cependant la procédure prend malgré tout pas mal de temps (environ 20 secondes suivant le nombre de fichier qu'il importe) dnoc je me demandais si l'on ne pouvait pas optimiser cela. (éviter d'utiliser OpenText par exemple qui consomme pas mal à mon avis)
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 w = Dir(Path) Do While w <> "" If InStr(w, best_quote(k) & EDate(i)) > 1 Then Workbooks.OpenText Filename:=Path & w, DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:=";" If Not [a1].Offset(1, 0) = "" Then Range([a1], [a1].End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Copy Workbooks(XLBook).Activate ActiveSheet.Range("A1048576").Select If Not Selection.End(xlUp).Value = "" Then Selection.End(xlUp).Offset(1, 0).Select ActiveSheet.Paste Workbooks(w).Close Application.CutCopyMode = False Else ActiveCell.End(xlUp).Select ActiveSheet.Paste Workbooks(w).Close Application.CutCopyMode = False End If Else Workbooks(w).Close End If End If w = Dir Loop
C'est véritablement concernant le troisième type de fichier que cela coince car quand j'utilise le code suivant il ne sépare pas les datas en "/" :
Je me retrouve donc avec 15 colonnes au lieu de 24, dont une qui regroupe des données séparées par des "/".
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 w = Dir(Path) Do While w <> "" If InStr(w, "trades" & EDate(i)) > 1 Then Workbooks.OpenText Filename:=Path & w, DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ Semicolon:=False, Comma:=True, Space:=False, Other:=True, OtherChar:="/" If Not [a1].Offset(1, 0) = "" Then Range([a1], [a1].End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Copy Workbooks(XLBook).Activate ActiveSheet.Paste Workbooks(w).Close Application.CutCopyMode = False Else Workbooks(w).Close End If End If w = Dir Loop
En bidouillant j'ai réussi à trouver une solution alternative mais ce n'est vraiment pas propre et cela alourdit fortement ma macro.
Auriez vous quelques pistes pour m'aider ?
Je peux bien évidemment revenir sur certains points si ce n'est pas clair, merci infiniment pour votre aide !
F.
Partager