Bonjour Franck00225 et bienvenue,
voici un exemple, en supposant que le fichier récapitulatif se nomme "Recap"
et que tous les fichiers (fichier "Recap" inclus) soient dans le même répertoire.
copie la macro suivante sur le module1 du fichier Recap.xlsm
'il faut activer la référence: Microsoft ActiveX Data Objects xx Library --> au menu vba, Outils, Référence
Sub Read_File()
Dim Repertoire As String, Fichier As String, Fich As String, NomFeuille As String
Dim Ligne As Long, f
Dim fso As Object, sfofolder As Object, oFile As Object
Dim Cnn As Object, Rst As ADODB.Recordset
'--- derniere ligne de la feuille active, les données seront transférées à cette endroit ---
Ligne = ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Row + 1
'--- répertoire des fichiers "audit" est le même que le répertoire du fichier Récap---
Repertoire = ThisWorkbook.Path
'--- nom de la feuille des fichiers "audit"---
NomFeuille = Sheets(1).Name
Set fso = CreateObject("Scripting.FileSystemObject")
Set sfofolder = fso.GetFolder(Repertoire)
For Each oFile In sfofolder.Files
f = Split(oFile, "\")
Fich = f(UBound(f))
'--- lire uniquement les fichiers dont le nom est différent de Recap
If Fich <> "Recap" Then 'à adapter
Set Cnn = New ADODB.Connection
'--- Connexion ---
With Cnn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& oFile & ";Extended Properties=""Excel 12.0;HDR=NO;"""
.Open
End With
'--- récupérer les données --
Set Rst = Cnn.Execute("SELECT * FROM [" & NomFeuille & "$A:N" & "]") 'adapter la plage de colonne
Cells(Ligne, "A") = Fich
Cells(Ligne, "B").CopyFromRecordset Rst
Rst.Close
Ligne = ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Row + 1
End If
Next oFile
Cnn.Close
Set Rst = Nothing
Set Cnn = Nothing
End Sub