XL pour MAC Fusionner plusieurs CSV dont l'onglet porte le nom du fichier dans un seul fichier xlsm (Mac 365)

José Martinez

XLDnaute Nouveau
Bonjour,

Je me permets de vous poser cette question car je n'ai pas trouver de réponse dans le forum. Je suis sur Mac et j'utilise Excel 365 (version 16.50). J'ai une grande quantité de fichiers CSV à une seule feuille et chaque feuille porte le nom du fichier (ex.06088_000AB.csv avec la feuille nommée 06088_000AB). Le titre et le nom de chaque colonne est identique mais le nombre de lignes diffère d'un fichier à l'autre. Quel code VBA puis-je utiliser pour fusionner à la suite toutes les lignes de tous ces fichier dans un seul XLSM ?

Merci encore pour vos réponses
José
 

job75

XLDnaute Barbatruc
Bonjour José Martinez, bienvenue sur XLD,

Téléchargez les fichiers zippés joints dans le même dossier et voyez la macro du bouton :
VB:
Sub Consolider_CSV()
Dim chemin$, fichier$, a$(), n&, x%, texte$, nn&
chemin = ThisWorkbook.Path & Application.PathSeparator
fichier = Dir(chemin)
ReDim a(1 To Rows.Count, 1 To 1)
While fichier <> ""
    If Right(fichier, 4) = ".csv" Then
        n = n + 1
        x = FreeFile
        Open chemin & fichier For Input As #x 'accès en lecture séquentielle
        Line Input #x, texte
        If nn = 0 Then nn = 1: a(1, 1) = texte & ";Fichier CSV"  'récupère la ligne de titre
        While Not EOF(1) 'EndOfFile : fin du fichier
            nn = nn + 1
            Line Input #x, texte 'récupère la ligne
            a(nn, 1) = texte & ";" & fichier
        Wend
        Close #x
    End If
    fichier = Dir
Wend
'---restitution---
Application.ScreenUpdating = False
With Feuil1 'CodeName, à adapter
    .Cells.Clear 'RAZ
    If nn Then
        With .[A1].Resize(nn)
            .Value = a
            .TextToColumns [A1], xlDelimited, Semicolon:=True 'commande Convertir
        End With
        .Rows(1).Font.Bold = True 'gras
        .Columns.AutoFit 'ajustement largeurs
    End If
    With .UsedRange: End With 'actualise les barres de défilement
End With
Application.ScreenUpdating = True
If n Then MsgBox n & " fichier" & IIf(n > 1, "s", "") & " CSV consolidé" & IIf(n > 1, "s...", "...")
End Sub
A+
 

Pièces jointes

  • Dossier.zip
    17.8 KB · Affichages: 22

job75

XLDnaute Barbatruc
Bonjour José Martinez,

Si la lecture séquentielle des CSV ne fonctionne pas sur MAC essayez :
VB:
Sub Consolider_CSV()
Dim chemin$, fichier$, ncol%, F As Worksheet, lig&, n&
chemin = ThisWorkbook.Path & Application.PathSeparator
fichier = Dir(chemin)
ncol = 4 'nombre de colonnes des fichiers CSV, à adapter
Set F = Feuil1 'CodeName, à adapter
lig = 1 '1ère ligne de destination
Application.ScreenUpdating = False
F.Rows(lig & ":" & F.Rows.Count).Clear 'RAZ
While fichier <> ""
    If Right(fichier, 4) = ".csv" Then
        n = n + 1
        Workbooks.OpenText chemin & fichier, Local:=True
        With Sheets(1).[A1].CurrentRegion.resize(, ncol)
            If n = 1 Then .Rows(1).Copy F.Cells(lig, 1): F.Cells(lig, ncol + 1) = "Fichier CSV": lig = lig + 1
            If .Rows.Count > 1 Then
                .Rows(2).Resize(.Rows.Count - 1).Copy F.Cells(lig, 1)
                F.Cells(lig, ncol + 1).Resize(.Rows.Count - 1) = ActiveWorkbook.Name
                lig = lig + .Rows.Count - 1
            End If
        End With
        ActiveWorkbook.Close False
    End If
    fichier = Dir
Wend
F.Rows(1).Font.Bold = True 'gras
F.Columns.AutoFit 'ajustement largeurs
With F.UsedRange: End With 'actualise les barres de défilement
Application.ScreenUpdating = True
If n Then MsgBox n & " fichier" & IIf(n > 1, "s", "") & " CSV consolidé" & IIf(n > 1, "s...", "...")
End Sub
Utilisez les fichiers CSV du post précédent.

Edit : bien sûr s'il y a beaucoup de fichiers à ouvrir ça prendra du temps.

A+
 

Pièces jointes

  • Consolider CSV(2).xlsm
    20.5 KB · Affichages: 7
Dernière édition:

José Martinez

XLDnaute Nouveau
Bonjour, merci pour cette mise à jour.
Cette fois-ci on progresse car le code charge (copier/coller) bien le premier fichier "CVS1.cvs" dans la feuil1 de Consolider CSV(2).xlsm mais les instructions s’arrêtent sur CVS2.cvs à la ligne "Workbooks.OpenText chemin & fichier, Local:=True" (la variable fichier = "CVS2.cvs", n = 2, chemin = "/Users/josemartinez/Dropbox/Mon Mac (MacBook Pro de José)/Desktop/9LhFb2cj/")
 

Discussions similaires