[VBA] Problème code pour fusionner .csv

Hello.

J'ai un problème, j'ai essayé de fusionner des .csv avec ce code (trouvé sur internet) :

Sub CsvConsolider()
' Insère dans ce fichier tous les CSV du répertoires + format xls directement
    ChDir ActiveWorkbook.Path
    Set classeurMaitre = ActiveWorkbook
    compteur = 1
    nf = Dir("*.cs*")
    Do While nf <> ""
        If nf <> classeurMaitre.Name Then
            Workbooks.Open Filename:=nf
            For k = 1 To Sheets.Count
                Sheets(k).Copy After:=classeurMaitre.Sheets(classeurMaitre.Sheets.Count)
        'classeurMaitre.Sheets(classeurMaitre.Sheets.Count).Name = "" & compteur
                compteur = compteur + 1
            Next k
        Workbooks(nf).Close False
        End If
    nf = Dir
    Loop
End Sub

Il marche correctement sauf que pour chaque .csv importé, toutes les données sont stockées dans la colonne A.
Par exemple, si mon csv est :

PierreAmandineJack

17

1713

alors mon fichier final sera :

Pierre;Amandine;Jack
17;17;13

et je ne sais pas pourquoi.

Comment faire ?

Merci !

Up !

Bonjour,

change la méthode d'ouverture ...

Workbooks.OpenText Filename:=nf, Origin:=xlWindows, _
        StartRow:=1, DataType:=xlDelimited, Local:=True, Semicolon:=True

tout dépend aussi de tes paramètres excel par défaut

Mon héros! Merci, ça marche nickel.

Alors clique sur le V de la victoire pour solder le sujet !

En fait, après réflexion, l'idéal serait que, plutôt que les fichiers .csv se mettent sur le même fichier que celui qui contient la macro, ça serait mieux qu'un nouveau fichier soit crée. Comment faire stp ?

Merci.

Essaie ceci (pas testé sur la copie car pas de fichier de base)

Sub CsvConsolider()
    ' définitions pour fichier cible
    Dim xl As Excel.Application
    Dim classeurMaitre As Workbook

    ChDir ActiveWorkbook.Path
    Set xl = CreateObject("Excel.Application")
    xl.SheetsInNewWorkbook = 1 ' On défini le nombre d'onglets (ici 1 seul)
    Set classeurMaitre = xl.Workbooks.Add  ' On ajoute un classeur
    xl.Visible = True

    compteur = 1
    nf = Dir("*.cs*")
    Do While nf <> ""
' .................................................
    nf = Dir
    Loop

    classeurMaitre.SaveAs ThisWorkbook.Path & "\" & "gloub.xlsx"
    xl.SheetsInNewWorkbook = 3 ' On remet la propriété de l'application à 3 (par défaut)
    xl.Quit

End Sub

Hello,

J'imagine que le

'............

était à compléter.

Le code final est :

Sub CsvConsolider_test()
    ' définitions pour fichier cible
    Dim xl As Excel.Application
    Dim classeurMaitre As Workbook

    ChDir ActiveWorkbook.Path
    Set xl = CreateObject("Excel.Application")
    xl.SheetsInNewWorkbook = 1 ' On défini le nombre d'onglets (ici 1 seul)
    Set classeurMaitre = xl.Workbooks.Add  ' On ajoute un classeur
    xl.Visible = True

    compteur = 1
    nf = Dir("*.cs*")
    Do While nf <> ""
    If nf <> classeurMaitre.Name Then
            Workbooks.OpenText Filename:=nf, Origin:=xlWindows, _
            StartRow:=1, DataType:=xlDelimited, Local:=True, Semicolon:=True
            For k = 1 To Sheets.Count
                Sheets(k).Copy After:=classeurMaitre.Sheets(classeurMaitre.Sheets.Count)
        'classeurMaitre.Sheets(classeurMaitre.Sheets.Count).Name = "" & compteur
                compteur = compteur + 1
            Next k
        Workbooks(nf).Close False
        End If
    nf = Dir
    Loop

    classeurMaitre.SaveAs ThisWorkbook.Path & "\" & "gloub.xlsx"
    xl.SheetsInNewWorkbook = 3 ' On remet la propriété de l'application à 3 (par défaut)
    xl.Quit

End Sub

Cependant, ça bug. Et même en C/C juste ton code sans rien modifier, ça crée le fichier gloub.xlsx mais avec rien dedans.

Je te mets 2 fichiers csv si tu veux essayer de ton côté.

Merci encore !

6heycestmoi.csv (175.00 Octets)
5monfichier.csv (175.00 Octets)

Cependant, ça bug. Et même en C/C juste ton code sans rien modifier, ça crée le fichier gloub.xlsx mais avec rien dedans.

C'est normal, et donc ce code fonctionne correctement pour ce qui est de la création d'un nouveau fichier !

en effet, c'est la phase copie qui ne fonctionne pas ou plus !

au passage, je ne comprends pas le k, car un fichier csv n'a qu'une seule feuille !

capture d ecran 753
Sub CsvConsolider_test()
    ' définitions pour fichier cible
    Dim xl As Excel.Application, classeurMaitre As Workbook, f As Worksheet

    ChDir ActiveWorkbook.Path
    Set xl = CreateObject("Excel.Application")
    xl.SheetsInNewWorkbook = 1 ' On défini le nombre d'onglets (ici 1 seul)
    Set classeurMaitre = xl.Workbooks.Add  ' On ajoute un classeur
    xl.Visible = True

    compteur = 1
    nf = Dir("*.cs*")
    Do While nf <> ""
        If nf <> classeurMaitre.Name Then
            Workbooks.OpenText Filename:=nf, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, Local:=True, Semicolon:=True
            Sheets(1).UsedRange.Copy
            classeurMaitre.Activate
            If compteur > 1 Then
                Set f = classeurMaitre.Sheets.Add(After:=classeurMaitre.Sheets(classeurMaitre.Sheets.Count))
            Else
                Set f = classeurMaitre.Sheets(1)
            End If
            compteur = compteur + 1
            f.Paste
            Application.CutCopyMode = False
            Workbooks(nf).Close False
        End If
    nf = Dir
    Loop

    classeurMaitre.SaveAs ThisWorkbook.Path & "\" & "collection_csv.xlsx"
    'xl.SheetsInNewWorkbook = 3 ' On remet la propriété de l'application à 3 (par défaut)
    xl.Quit

End Sub

Comment ça se fait que la phase copie ne fonctionne plus ?

Sub CsvConsolider_test()
    ' définitions pour fichier cible
    Dim xl As Excel.Application
    Dim classeurMaitre As Workbook

    ChDir ActiveWorkbook.Path
    Set xl = CreateObject("Excel.Application")
    xl.SheetsInNewWorkbook = 1 ' On défini le nombre d'onglets (ici 1 seul)
    Set classeurMaitre = xl.Workbooks.Add  ' On ajoute un classeur
    xl.Visible = True

    nf = Dir("*.cs*")
    Do While nf <> ""
    If nf <> classeurMaitre.Name Then
            Workbooks.OpenText Filename:=nf, Origin:=xlWindows, _
            StartRow:=1, DataType:=xlDelimited, Local:=True, Semicolon:=True
            Sheets(1).Copy After:=classeurMaitre.Sheets(classeurMaitre.Sheets.Count)
        Workbooks(nf).Close False
        End If
    nf = Dir
    Loop

    classeurMaitre.SaveAs ThisWorkbook.Path & "\" & "gloub.xlsx"
    xl.SheetsInNewWorkbook = 3 ' On remet la propriété de l'application à 3 (par défaut)
    xl.Quit

End Sub

Au final, le code que j'ai c'est ça. Mais ça ne fonctionne pas, et comme je ne suis pas bon en VBA (surtout pour ce genre de requête) je n'ai aucune idée de pourquoi ça ne fonctionne pas. Tu saurais quoi modifier ? Ou alors, tu aurais une alternative pour que ça fonctionne ?

Merci d'avance.

Tu as la réponse juste avant ton dernier message.

Oui pardon, j'avais pas vu !

Top merci !

Juste un dernier point, de ce que je vois, ça crée bien collection_csv, mais les sheets de ce fichier sont Sheet1, Sheet2, ... Il y aurait moyen de faire en sorte que les sheets gardent le même nom que les fichiers csv dont ils proviennent ? Genre heycestmoi, monfichier, pour le nom des sheets.

Merci encore.

Après

f.Paste

écris

f.Name = nf

Top, merci !

J'ai rajouté ça :

    FichierASupprimer = Dir("collection_csv.xlsx")
    If FichierASupprimer <> "" Then
        Kill FichierASupprimer
    End If

Si jamais le fichier collection_csv était déjà présent.

Merci encore !

Oui, ou mettre

Application.ScreenUpdating = False

avant enregistrement

Rechercher des sujets similaires à "vba probleme code fusionner csv"