Rapport de message :*
 

Import multiple csv

Titre du sujet : Import multiple csv
par FabriceR le 20/02/2016 11:23:07

Bonjour à tous,

 

Je bloque sur une macro dont le but est l'import de multiple csv dans l'onglet d'un classeur. 

 

Principe:

J’ai plusieurs fichiers csv dans un répertoire, ils sont nommés en nombres d'ordre croissant (à partir de 1). Je souhaite que les fichiers soit tous importes dans un onglet de mon classeur les uns à la suite des autres

 

Ma Macro:

Private Sub Import_Data_Click()

Dim wbCSV   As Workbook
Dim wsMstr  As Worksheet:   Set wsMstr = ThisWorkbook.Sheets("Data")
Dim fPath   As String:      fPath = Worksheets("Menu").Cells(4, 1)   'path to CSV files
Dim fCSV    As String
Dim NextCol As Long
Dim FilesInPath As String

'Add a slash at the end if the user forget it
If Right(fPath, 1) <> "" Then
fPath = fPath & ""
End If

'If there are no Excel files in the folder exit the sub
FilesInPath = Dir(fPath & "*.csv")
If FilesInPath = "" Then
MsgBox "No files found"
Exit Sub
End If

If MsgBox("Clear the existing Data sheet before importing?", _
    vbYesNo, "Clear Database?") = vbYes Then
        wsMstr.UsedRange.ClearContents
        NextCol = 1
Else
        NextCol = wsMstr.Cells(6, Columns.Count).End(xlToLeft).Column + 2
End If

Application.ScreenUpdating = False  'speed up macro

fCSV = Dir(fPath & "*.csv")         'start the CSV file listing

    Do While Len(fCSV) > 0
      'open a CSV file
        Set wbCSV = Workbooks.Open(fPath & fCSV)
      'copy data into master sheet and close source file
        ActiveSheet.UsedRange.Copy wsMstr.Cells(3, NextCol)
        wbCSV.Close False
      'read next CSV
        fCSV = Dir
        NextCol = wsMstr.Cells(6, Columns.Count).End(xlToLeft).Column + 1
    Loop

Sheets("Menu").Select

Application.ScreenUpdating = True

MsgBox "Data Import completed"

End Sub

Mon Problème: 

La macro fonctionne parfaitement et fait le travail demandé. Par contre l'ordre d'import des fichiers me pause problème. En effet au-delà de 10 fichiers importés, Excel les traitent dans l'ordre suivant: 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, 21 ... alors qu'évidement je cherche à avoir 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ...

 

Voilà si jamais un des talentueux membres du forum a une piste, je suis preneur ;).

 

Merci d'avance,

Fabrice