Bonjour à toutes et à tous,
Je suis en train de construire une macro et malgré mes recherches je suis dans l'impasse. Je vous explique :
Je dois compiler les fichiers de différentes agences dans un seul fichier global. La structure du fichier agence comme celui du global est exactement la même.
L'intérêt est d'avoir dans le fichier global, la somme des données qui sont dans les fichiers agences. J'ai une vingtaine de fichiers agences, à gérer tous les mois d'où l'intérêt d'automatiser.
Il n'y a qu'une seule feuille, et sur cette feuille différents tableaux à remplir.
Je vous joins le fichier. J'ai une macro mais celle ci n'a aucun sens malheureusement. Il y a du bon et du moins bon que j'ai pu trouver.
Sub Test()
Dim Cls As Workbook
Dim Fe As Worksheet
Dim Tbl() As String
Dim TblTotal() As Double
Dim Plage As Range
Dim Retour As Integer
Dim I As Integer
Dim J As Long
Dim K As Long
'affiche la boite de dialogue
With Application.FileDialog(msoFileDialogFilePicker)
'au moins un classeur doit être sélectionné sinon, fin...
Retour = .Show
If Retour = 0 Then Exit Sub
'stocke les chemins et nom de fichier dans un tableau pour le bouclage
For I = 1 To .SelectedItems.Count
ReDim Preserve Tbl(1 To I)
Tbl(I) = .SelectedItems(I)
Next I
End With
'initialise le tableau par rapport à la plus grande plage (feuille "GLOBAL")
ReDim TblTotal(1 To 13, 1 To 4)
'boucle sur les classeurs
For I = 1 To UBound(Tbl)
Set Cls = Workbooks.Open(Tbl(I))
'boucle sur les feuilles définies du classeurs en cours
For Each Fe In Cls.Worksheets(Array("GLOBAL"))
Select Case Fe.Name
'défini la plage sur la zone voulue pour chaque feuille concernée
Case "GLOBAL"
Set Plage = Fe.Range("B34:D49")
End Select
'boucle sur les lignes
For J = 1 To Plage.Rows.Count
'boucle sur les colonnes
For K = 1 To Plage.Columns.Count
'gère l'erreur d'un valeur non numérique ou autre (plus simple pour le test...)
On Error Resume Next
'totalise les cellules dans le tableau
TblTotal(J, K) = TblTotal(J, K) + Plage(J, K)
Next K
Next J
Next Fe
'ferme le classeur en cours
Cls.Close False
Next I
'affiche les résultat dans la feuille active de A1 à Xx...
With ActiveSheet
.Range(("B34:D49"), .Cells(UBound(TblTotal, 1), UBound(TblTotal, 2))) = TblTotal
End With
End Sub
Un grand merci à vous !!!