Sub cumul_factures()
' Récupérer le contenu de classeurs fermés sans les ouvrir
' --------------------------------------------------------
Dim Cn As ADODB.Connection ' Définir une variable ADODB Connection
Dim Rst As ADODB.Recordset ' Pour accueillir un RecordSet
Dim req_SQL As String ' Contiendra la Requête SQL
Dim Fichier As String ' Nom du fichier (classeur)
Dim chem_fichier As String ' Chemin + nom du fichier
Dim Onglet As String ' Nom de la feuille à traiter
Dim chemin As String ' Chemin d'accès aux fichiers à traiter
'chemin d'accès aux fichiers à traiter
chemin = "G:\factures\"
'Définir le premier classeur à traiter
Fichier = Dir(chemin & "M*.xls") ' Pointer les fichiers f*.xls et f*.xlsx
chem_fichier = chemin & Fichier
'Nom de la feuille à traiter dans le classeur fermé
Onglet = "Facture"
'Boucler tant qu'il y a des fichiers f*.xls ou f*.xlsx
While Fichier <> ""
Set Cn = New ADODB.Connection ' Créer une nouvelle instance
' --- Connexion à la source (pour nous, un classeur)
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& chem_fichier & ";Extended Properties=""Excel 12.0;HDR=no;"""
.Open
End With
' --- Fin Connexion
' >>>>> Attention, ne pas oublier le symbole $ après le nom de la feuille.
plage = "B23:C47"
req_SQL = "SELECT * FROM [" & Onglet & "$" & plage & "]"
Set Rst = New ADODB.Recordset ' Récupérer un ensemble d'enreg.
Set Rst = Cn.Execute(req_SQL) ' Exécuter la requête SQL
'Cumuler le montant de chaque facture
ThisWorkbook.Sheets("Recup").Cells(Rows.Count, 1).End(xlUp)(2).CopyFromRecordset Rst
Rst.Close
Set Rst = Nothing
Set Rst = New ADODB.Recordset
'Récupération de la plage des totaux
plage = "J48:K53"
req_SQL = "SELECT * FROM [" & Onglet & "$" & plage & "]"
Set Rst = Cn.Execute(req_SQL)
ThisWorkbook.Sheets("Recup").Cells(Rows.Count, 1).End(xlUp)(2).CopyFromRecordset Rst
Rst.Close
Set Rst = Nothing
'--- Fermeture de la connexion ---
Cn.Close
Set Cn = Nothing ' Libérer la ressource
plage = ""
Fichier = Dir ' Nom du Classeur suivant
chem_fichier = chemin & Fichier
Wend
End Sub