Feuille recapitulative

Bonjour à tous

Je posède un classeur qui comporte 18 feuilles

1/ Une sans importance pour le problème à traiter et 15 autres !

2/ 16 feuilles qui contiennent un tableau (champs de coordonnées fixes et identiques) sauf le contenu

3/ 1 feuille sur laquelle je souhaiterais cumulé les 16 précédentes avec un classement par ordre décroissant de la colonne N:N

Attention, certaines villes se retrouvent sur plusieurs feuilles et doivent être cumulées

Pourriez vous m'aider dans ce sens avec une petite macro

Ci-joint fichier pour une meilleure compréhension

Merci d'avance

24cumulgeneral.xlsx (44.99 Ko)

Bonsoir,

Ci-joint une proposition à tester.

Se base sur un onglet intermédiaire ("Données", masqué), qui synthétise toutes les données et agrège avec TCD.

Bonne soirée

Bouben

Bonjour MJC, bonjour le forum,

Essaie comme ça :

Sub Macro1()
Dim I As Byte 'déclare la variable I (Incrément)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim J As Byte 'déclare la variable J (incrément)
Dim K As Byte 'déclare la variable K (incrément)
Dim L As Byte 'déclare la variable L (incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim TD() As Variant 'déclare la variable TD() (Tableau des Données)
Dim TV As Variant 'déclare la variable TV (Tableau des Villes)

'efface d'éventuelles anciennes donnéees dans l'onglet "RECAPEPETE"
Sheets("RECAPEPETE").Range("J8").CurrentRegion.Offset(1, 0).ClearContents
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To Sheets.Count - 1 'boucle 1 : sur tous les onglets contenant le tableau des villes
    TV = Sheets(I).Range("J8").CurrentRegion 'définit le tableau ds villes TV
    For J = 2 To UBound(TV, 1) 'boucle 2 : sur toutes le lignes J du tableau des villes (en partant de la seconde)
        If TV(J, 1) <> "" Then D(TV(J, 1)) = "" 'alimente le dictionnaire D avec la donnés ligne J colonne 1 de TV
    Next J 'prochaine ligne de la boucle 2
Next I 'prochain onglet de la boucle 1
TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
ReDim TD(0 To UBound(TMP), 0 To 4) 'redimentionne le tableau des données TD (autant de lignes que de villes, 5 colonnes)
For I = 0 To UBound(TMP) 'boucle sur tous les élément du tableau TMP
    TD(I, 0) = TMP(I) 'récupère le ville TMP(I) dans la colonne 0 de TD
Next I 'prochaine élément de la boucle
For I = 2 To Sheets.Count - 1 'boucle 1 : sur tous les onglets contenant le tableau des villes
    For J = 0 To UBound(TD, 1) 'boucle 2 : sur tous les villes du tableau des données TD
        TV = Sheets(I).Range("J8").CurrentRegion 'définit le tableau des valeurs TV
        For K = 2 To UBound(TV, 1) 'boucle 3 : sur toutes les lignes K du tableau des villes TV (en partant de la seconde)
            If TV(K, 1) = TD(J, 0) Then 'condition : si la donnée ligne K colonne 1 de TV est égale à la ville ligne J colonne 0 de TD
                For L = 1 To 4 'boucle 4 : sur les 4 dernières colonne de TD
                    'redéfinit la valeur de la donnée ligne J colonne L de TD comme étant la somme de cette données
                    'et de la valeur ligne K colonne L  + 1 de TV (converties en entier)
                    TD(J, L) = CInt(TD(J, L)) + CInt(TV(K, L + 1))
                Next L 'prochaine colonne de la boucle 4
            End If 'fin de la condition
        Next K 'prochaine ligne de la boucle 3
    Next J 'prochaine ville de la boucle 2
Next I 'prochain onglet de la boucle 1
'revoie dans la cellule J9 redimensionnée de l'onglet "RECAPAPATE" le tableau TD
Sheets("RECAPEPETE").Range("J9").Resize(UBound(TMP) + 1, 5) = TD
End Sub

[Édition]

Bonjour Bouben, nos posts se sont croisés...

Merci à tous les deux pour cette solution 100% efficace

Bien cordialement

Rechercher des sujets similaires à "feuille recapitulative"