Bonjour,
J'aimerai importer à la suite une soixantaine de fichier (avec un format inconnu pour excel) en lui précisant que toutes les colonnes sont séparées par des point-virgules. Excel ne doit pas importer par rapport aux noms des fichiers, mais par rapport au dossier. (Importer tous les fichiers d'un dossier).
Parce que tous les mois des fichiers différents vont remplacer les anciens dans ce même dossier.
Les fichiers ont tous la même structure en colonnes, mais pas en nombre de lignes.
J'aimerais que toutes les colonnes de mes dits fichiers soient copiées collées les unes à la suite des autres.
En essayant d'ouvrir l'un de mes fichiers avec l'enregistreur de macro, cela m'a donné ce code :
Je me suis permis de reprendre un code que j'ai trouvé dans un autre topic, et que j'ai transformé un peu en enlevant de la mise en page (merci Nakolito) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _ xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, _ Comma:=False, 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)), _ TrailingMinusNumbers:=True
Ce code me permet d'avoir une bonne base pour ma macro.
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 Sub general() Application.ScreenUpdating = False 'declaration de variable Dim objFSO As Object Dim objDossier As Object Dim objFichier As Object 'initialisation des variables Set objFSO = CreateObject("Scripting.FileSystemObject") 'definit le repertoire ou se trouvent les feuilles a traiter Set objDossier = objFSO.GetFolder("D:\blabla\RecupCDR") 'pour chaque classeur dans le répertoire For Each objFichier In objDossier.Files 'ouvre le classeur Workbooks.Open objFichier 'lance la méthode copierColler pour toute les cellules a copier 'nom copierColler "C4", 1 'prenom copierColler "F4", 2 'adresse copierColler "C5", 3 'numero de rue copierColler "G5", 4 'code postal copierColler "C6", 5 'ville copierColler "E6", 6 'date de naissance copierColler "C7", 7 'tel fixe copierColler "F7", 8 'telephone portable copierColler "C8", 9 'adresse mail copierColler "E8", 10 'Carte LAC copierColler "C9", 11 'Date effet copierColler "E9", 12 'ferme le classeur client sans sauvegarder Workbooks(Workbooks.Count).Close saveChanges:=False Next With ThisWorkbook.Sheets(1) 'copie la feuille vers un nouveau classeur .Copy End With 'efface les cellules dans thisworkbook ThisWorkbook.Sheets(1).Cells.Clear 'renome la feuille qui vient d'etre copiée Workbooks(Workbooks.Count).Sheets(1).Name = "RecupCDR" 'enregistre le nouveau classeur dans le repertoire de destination Workbooks(Workbooks.Count).SaveAs "D:\FICHIER_RecupCDR.xls" 'ferme le nouveau classeur Workbooks(Workbooks.Count).Close Application.ScreenUpdating = True End Sub 'méthode qui copie une donnée depuis le classeur client vers thisworkbook Public Sub copierColler(rangeSource As String, colonneDestination As Integer) With ThisWorkbook 'si la cellule est vide If Workbooks(Workbooks.Count).Sheets(2).Range(rangeSource) = "" Then 'on la remplit avec qqc Workbooks(Workbooks.Count).Sheets(2).Range(rangeSource) = "_" End If 'copie la cellule depuis le classeur client Workbooks(Workbooks.Count).Sheets(2).Range(rangeSource).Copy 'colle dans la colonne qui va bien dans thisworkbook .Sheets(1).Cells(lastRow(.Name, .Sheets(1).Name, colonneDestination) + 1, colonneDestination).PasteSpecial End With End Sub 'methode qui permet de connaitre la derniere ligne d'une colonne Public Function lastRow(leClasseur As String, laFeuille As String, laColonne As Integer) lastRow = Workbooks(leClasseur).Sheets(laFeuille).Cells(65536, laColonne).End(xlUp).Row End Function
J'aimerai maintenant modifier la partie que l'on applique à tous les fichiers du dossier.
Au lieu d'ouvrir simplement un fichier .xls, ici c'est un fichier .ok (non reconnu par excel) qu'il faut ouvrir. Donc je dois implémenter à ce code (quelque part je ne sais où) quelque chose comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _ xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, _ Comma:=False, 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)), _ TrailingMinusNumbers:=True
pour qu'Excel ouvre le fichier en délimitant les colonnes grâce aux point-virgules présents.
Ensuite il faut non pas que je copie une seule cellule (coordonnées XY) mais toute la colonne X, et que je la colle sur la colonne X' du nouveau fichier.
Mon problème c'est que je n'y connais rien en VBA et que j'ai beau me documenter mais j'ai vraiment du mal à comprendre !
Merci d'avance pour votre aide![]()
Partager