XL 2016 Importer les données de plusieurs fichiers Excel portant le même nom dans un nouveau fichier

Dadi147

XLDnaute Occasionnel
Bonjour. Renseignements pour ceux qui ont de l'expérience. J'ai 7 fichiers Excel avec le même nom, (summary).ils ont été placés dans 7 dossiers dans un dossier, et je veux un moyen de les copier dans un nouveau fichier en dessous l'un de l'autre. Pouvons-nous faire cela
 
Dernière édition:
Solution
Bonjour Dadi147, le forum,

L'importation se fait très simplement avec cette macro :
VB:
Sub Importer()
Dim chemin$, dossier, fichier, F As Worksheet, lig&, i%, h&
chemin = ThisWorkbook.Path & "\"
dossier = Array("Dossier1", "Dossier2", "Dossier3", "Dossier4", "Dossier5", "Dossier6", "Dossier7") 'liste à adapter
fichier = "Summary.xls" 'à adapter
Set F = ActiveSheet
lig = 2 '1ère ligne de destination
Application.ScreenUpdating = False
F.Rows(lig & ":" & F.Rows.Count).Delete 'RAZ
For i = 0 To UBound(dossier)
    With Workbooks.Open(chemin & dossier(i) & "\" & fichier).Sheets(1) 'ouverture du fichier
        If .FilterMode Then .ShowAllData 'si la feuille est filtrée
        h = .Range("B" & .Rows.Count).End(xlUp).Row 'dernière ligne en...

job75

XLDnaute Barbatruc
Bonjour Dai147,

Oui un Array plus une boucle supplémentaire.

Prévoir aussi un test pour vérifier que le fichier existe :
VB:
Sub Importer()
Dim chemin$, dossier, fichier, F As Worksheet, lig&, i%, j%, x$, h&
chemin = ThisWorkbook.Path & "\"
dossier = Array("Dossier1", "Dossier2", "Dossier3", "Dossier4", "Dossier5", "Dossier6", "Dossier7") 'liste à adapter
fichier = Array("test.xls", "data.xls") 'à adapter
Set F = ActiveSheet
lig = 2 '1ère ligne de destination
Application.ScreenUpdating = False
F.Rows(lig & ":" & F.Rows.Count).Delete 'RAZ
For i = 0 To UBound(dossier)
    For j = 0 To UBound(fichier)
        x = chemin & dossier(i) & "\" & fichier(j)
        If Dir(x) <> "" Then 'si le fichier existe
            With Workbooks.Open(x).Sheets(1) 'ouverture du fichier
                If .FilterMode Then .ShowAllData 'si la feuille est filtrée
                h = .Range("B" & .Rows.Count).End(xlUp).Row 'dernière ligne en colonne B
                .Rows("1:" & h).Copy F.Cells(lig, 1)    'copier-coller
                lig = lig + h + 3 '3 lignes vides
                .Parent.Close False 'fermeture du fichier
            End With
        End If
Next j, i
End Sub
A+
 

Pièces jointes

  • Dossier.zip
    44.1 KB · Affichages: 5

Discussions similaires

Statistiques des forums

Discussions
312 194
Messages
2 086 068
Membres
103 110
dernier inscrit
Privé