1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
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
Dim Ini As Boolean
'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
'boucle sur les classeurs
For I = 1 To UBound(Tbl)
Set Cls = Workbooks.Open(Tbl(I))
'boucle sur les feuilles du classeurs en cours
For Each Fe In Cls.Worksheets
'défini la plage sur la zone utilisée de la feuille en cours
Set Plage = Fe.UsedRange
'initialise le tableau seulement à l'ouverture du premier classeur et sur la première feuille
If I = 1 And Ini = False Then
ReDim TblTotal(1 To Plage.Rows.Count, 1 To Plage.Columns.Count)
Ini = True
End If
'boucle sur les lignes
For J = 1 To UBound(TblTotal, 1)
'boucle sur les colonnes
For K = 1 To UBound(TblTotal, 2)
'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(.Cells(1, 1), .Cells(UBound(TblTotal, 1), UBound(TblTotal, 2))) = TblTotal
End With
End Sub |
Partager