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
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
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