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 :

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
=> Seulement les fichiers excel s'ouvrent dans des classeurs différents.

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