Fusion de fichiers csv dans un seul fichier à plus de 1 000 000 lignes

excelator2015

XLDnaute Nouveau
Bonjour,

Je souhaiterais fusionner plusieurs centaines de fichiers csv dans un seul fichier excel. Au total j'aurai plus d'1 million de lignes.

J'ai trouvé ce programme sur internet, je l'ai essayé sur excel 2000 et 2013 et dans les deux cas il s'arrête à 65635 lignes !

Const sSeparateur As String = ";"

Application.ScreenUpdating = False

sChemin = sDossier & "\"
sFichier = Dir$(sChemin & "*.csv")

Feuil1.Cells.Clear
Do While Len(sFichier) > 0

Set Wkb = Workbooks.Open(sChemin & sFichier)
LastRow = Wkb.Sheets(1).Cells(Wkb.Sheets(1).Rows.Count, 1).End(xlUp).Row

With Feuil1
For Each c In Wkb.Sheets(1).Range("A1:A" & LastRow)
iRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
Ar = Split(c, sSeparateur)
.Range(.Cells(iRow, 1), .Cells(iRow, UBound(Ar) + 1)).Value = Ar
Next c
End With

Wkb.Close
Set Wkb = Nothing

sFichier = Dir$()
Loop
Application.ScreenUpdating = True
End Sub

Sub SelDossierCSV()
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = ThisWorkbook.Path & "\"
.Title = "Dossier CSV à traiter"
.AllowMultiSelect = False
.ButtonName = "Sélection Dossier"
.Show
If .SelectedItems.Count > 0 Then
DoEvents
ConcatenationCSV .SelectedItems(1)
End If
End With
End Sub


Je sais qu'excel 2000 est limité à 65000 lignes mais ce que je ne comprends c'est que s'arrête également à 65000 sur excel 2013.

Merci par avance de vos lumières et de votre aide !
 
Dernière modification par un modérateur:

Staple1600

XLDnaute Barbatruc
Re : Fusion de fichiers csv dans un seul fichier à plus de 1 000 000 lignes

Re

Pas le temps pour plus ce soir, je pars au concert
Mais le précédent conseil reste valide
Donc une exemple parmi pleins après un petit G..gling
Il te reste tous les autres exemples à glaner ici ou ailleurs sur le net

Je repasserai demain voir comme ton fil avance ;)
 

Staple1600

XLDnaute Barbatruc
Re : Fusion de fichiers csv dans un seul fichier à plus de 1 000 000 lignes

Bonjour à tous, bonjour MJ13

Un autre bout de code glané sur le net ce matin aprés les croissants
VB:
Sub ImportCSV21WBK()
'source:[15/7/13] - jindon
'++++++++++++++++++++++++++++
'ici on recopie chaque CSV dans une feuille distincte dans un même classeur
Dim rep$, fCSV$, wb As Workbook: Set wb = ActiveWorkbook
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show Then rep = .SelectedItems(1) & "\"
End With
Application.ScreenUpdating = False
If rep = "" Then Exit Sub
fCSV = Dir(rep & "*.csv")
Do While fCSV <> ""
    With Workbooks.Open(rep & fCSV)
        .Sheets(1).Copy after:=wb.Sheets(wb.Sheets.Count): .Close False
    End With
    fCSV = Dir
Loop
End Sub
PS: j'ai testé, cela fonctionne sur mon PC.

Question:
Tu veux fusionner tes fichiers dans la même feuille (les uns en dessus des autres*)
ou comme le fait ce code VBA copier chaque CSV dans une feuille distincte mais dans le même classeur ?

*: dans ce cas , tu ne disposes que de 1 048 576 lignes sur une feuille.

EDITION: Toujours à la même fontaine
(celui-ci me plait bien car on y trouve un tit bout de MS-DOS... Ah nostalgie de la ligne de commande, quand tu nous tiens !
Cela fonctionne très bien, si les fichiers CSV sont de structure identique et avec les mêmes noms d'entêtes
(J'ai testé avec Excel 2013 - OK)
NB:Avec cette macro en l'état, on ne gère pas le dépassement du nombre de lignes maximal possible dans une feuille.
VB:
Sub ImportMultipleCSVin1Sheet()
'source: [201213] - jindon
Dim strPath$, strFile$, temp
Dim rep$, fCSV$, wb As Workbook: Set wb = ActiveWorkbook
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show Then rep = .SelectedItems(1) & "\"
End With
    strPath = rep: strFile = "AllInOne.csv"
    temp = Shell("cmd.exe /c copy " & strPath & "*.csv " & strPath & strFile)
    With ActiveSheet
        With .QueryTables.Add(Connection:="TEXT;" & strPath & strFile, _
            Destination:=.Range("A1"))
            .Name = Replace(strFile, ".csv", "")
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = False
            .TextFileSemicolonDelimiter = True
            .TextFileCommaDelimiter = False 'True
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
        End With
    End With
    Kill strPath & strFile
End Sub
 
Dernière édition:

excelator2015

XLDnaute Nouveau
Re : Fusion de fichiers csv dans un seul fichier à plus de 1 000 000 lignes

Merci, le premier code modifié marche, il copie les fichiers csv les uns sous les autres dans une même feuille (limité à 1 048 000 lignes).

Le problème que je rencontre c'est le problème des "gribouillis" à cause des jeux de caractères différents sur chaque fichier.

Et quand j'essaye de modifier le fichier final avec la méthode "notepad" ça ne marche pas.
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 326
Membres
103 180
dernier inscrit
Vcr