Import multiple csv
#1
Débutant XLPages

Inscription: 25/10/2011

Messages: 12

Système d'exploitation:
PC
Version Excel utilisée:
2003, 2007, 2010
Posté le : 20-02-2016 11h23

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

Hors Ligne
Rapport   Haut 

Re: Import multiple csv
#2
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 20-02-2016 21h52

Bonsoir FabriceR,

 

Je pense que tu ne nous as pas tout dit sur les noms exactes de ces fichiers CSV.

Ils sont numérotés OK, mais, à la vue de ton code j'ai bien l'impression qu'il n'y a pas qu'un numéro et ça me semble important là.

 

Peux tu nous citer les noms exactes, disons pour les 12 premiers...

Ensuite, si ce n'est pas confidentiel, tu peux aussi joindre un exemplaire d'un  CSV en question (zippé pour le poster ici).

 

Bien cordialement,


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Import multiple csv
#3
Débutant XLPages

Inscription: 25/10/2011

Messages: 12

Système d'exploitation:
PC
Version Excel utilisée:
2003, 2007, 2010
Posté le : 21-02-2016 09h17

Bonjour myDearFriend,

 

Merci pour la réponse.

 

Et pourtant si, les noms de csv ne sont que des numéros croissant, incrémenté en 1. Ce qui nous donne pour les 12 premiers: 1, 2, 3, 4, 5, 6, 7, 8, 8, 10, 11, 12

 

Et ainsi de suite.

 

Pour ce qui concerne le csv en exemple, je vais en altérer un manuellement et je le posterai plus tard dans la journée.

 

Cordialement,

Hors Ligne
Rapport   Haut 

Re: Import multiple csv
#4
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 21-02-2016 11h50

Bonjour FabriceR, le Forum,

 

OK, mauvaise interprétation de ma part concernant le nom des CSV. indecision

 

Par ailleurs, tu n'as finalement pas besoin de joindre un exemplaire de fichier CSV et je te propose la procédure suivante pour Test :

 

Sub Import_Data_Click()
Dim wbCSV   As Workbook
Dim wsMstr  As Worksheet
Dim vTabCSV() As String
Dim fPath As String, fCSV As String, FilesInPath As String
Dim NextCol As Long, nCSVmax As Long, nCSV As Long

    Set wsMstr = ThisWorkbook.Sheets("Data")
    fPath = Worksheets("Menu").Cells(4, 1).Value   'path to CSV files
    
    'Add a backslash at the end if the user forget it
    If Right(fPath, 1) <> "" Then
        fPath = fPath & ""
    End If
    
    'If there are no CSV 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
    
    'start the CSV file listing (sort by number)
    fCSV = Dir(fPath & "*.csv")
    Do
        nCSV = Val(fCSV)
        If nCSV > 0 Then
            nCSVmax = Application.Max(nCSVmax, nCSV)
            ReDim Preserve vTabCSV(1 To nCSVmax)
            vTabCSV(nCSV) = fCSV
        End If
        fCSV = Dir
    Loop Until fCSV = ""
    
    'Store CSV datas
    For nCSV = 1 To UBound(vTabCSV, 1)
        If vTabCSV(nCSV) <> "" Then
            'open a CSV file
              Set wbCSV = Workbooks.Open(fPath & vTabCSV(nCSV))
            'copy data into master sheet and close source file
              wbCSV.Sheets(1).UsedRange.Copy wsMstr.Cells(3, NextCol)
              wbCSV.Close False
              NextCol = wsMstr.Cells(6, Columns.Count).End(xlToLeft).Column + 1
        End If
    Next nCSV
    
    Sheets("Menu").Select
    Application.ScreenUpdating = True
    MsgBox "Data Import completed"
End Sub

En espérant que ça puisse répondre à ton problème...

 

Bien cordialement,


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Import multiple csv
#5
Débutant XLPages

Inscription: 25/10/2011

Messages: 12

Système d'exploitation:
PC
Version Excel utilisée:
2003, 2007, 2010
Posté le : 22-02-2016 09h25

Bonjour Didier, le forum,

 

Ta solution fonctionne très très bien.

 

Si j'ai bien compris, car je ne suis pas un familier de leur utilisation. Tu gères un tableau de dimensions variables dans VBA dans lequel tu listes les fichiers dans l'ordre croissant et ensuite tu forces l'import des fichiers selon ce tableau.

 

En tout cas merci bcp.

Fabrice

Hors Ligne
Rapport   Haut 

Re: Import multiple csv
#6
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 22-02-2016 10h19

Bonjour FabriceR,

Tu as tout compris ! C'est bien ça.

 

Bien cordialement,


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes