Bonjour,
Je souhaite importer plusieurs fichiers csv dans un seul et unique classeur excel via une macro.
Via l'enregistreur de macro j'obtiens ceci :
=> Seulement les fichiers excel s'ouvrent dans des classeurs différents.
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 Sub Macro1() ' ' Macro1 Macro ' ' ChDir "Chemin du répertoire" Workbooks.OpenText Filename:= _ "Nom du fichier.csv" _ , 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), 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)), TrailingMinusNumbers:=True Columns("A:V").Select Selection.AutoFilter Range("A2:V2").Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0 End With Columns("A:V").Select Columns("A:V").EntireColumn.AutoFit Sheets.Add After:=Sheets(Sheets.Count) Sheets.OpenText Filename:= _ "Nom du fichier.csv" _ , 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), 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)), TrailingMinusNumbers:=True Columns("A:V").Select Selection.AutoFilter Range("A2:V2").Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0 End With Columns("A:V").Select Columns("A:V").EntireColumn.AutoFit ActiveWindow.ScrollWorkbookTabs Position:=xlFirst End Sub
En parcourant le forum j'ai trouvé ce code qui semble répondre à mes attentes.
Seulement, j'ai deux problématiques :
- Comment l’intégrer dans le code précédant ?
- L'import s'effectue dans le même onglet. Comment générer un onglet par fichier ?
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 Sub csvImport() Dim Wbcsv As Workbook Dim Chemin As String, Fichier As String Dim LastLig As Long, NewLig As Long Dim c As Range Dim Tablo Const Sep As String = ";" Application.ScreenUpdating = False 'Inhibe la mise à jour affichage Chemin = ThisWorkbook.Path & "\" 'Chemin du dossier où chercher les fichiers csv (Ici ce classeur se trouve dans ce même dossier, sinon on peut êcrire ici le chemin du dossier Fichier = Dir(Chemin & "*.csv") 'Le premier fichier csv trouvé Do While Fichier <> "" 'on fait une boucle jusqu'à ce qu'on ne trouve plus de fichier csv Set Wbcsv = Workbooks.Open(Chemin & Fichier) 'On ouvre le fichier csv qu'on affecte à la variable Wbcsv With Wbcsv.Sheets(1) LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row 'LastLig est la dernière ligne remplie du fichier csv ouvert End With With ThisWorkbook.Worksheets("Feuil1") For Each c In Wbcsv.Sheets(1).Range("A2:A" & LastLig) 'Pour chaque cellule de A2:Axxx NewLig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 'la première cellule vide de la colonne 1 de Feuil1 de ce classeur Tablo = Split(c.Value, Sep) 'On sépare les données par rapport au séparateur (ici le point virgule) .Range(.Cells(NewLig, 1), .Cells(NewLig, UBound(Tablo) + 1)).Value = Tablo 'on copie Next c End With Wbcsv.Close 'On ferme le fichier csv Fichier = Dir() 'on cherche le fichir csv suivant Loop 'on reboucle End Sub
Partager