Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 Regrouper des sommes par noms

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

alain.raphael

XLDnaute Occasionnel
Bonjour à Tous,

Dans un fichier de 24000 lignes je dois contrôler regrouper des sommes par noms. Chaque prénoms est présents sur plusieurs lignes...il y a environ 1500 noms.

Je cherche donc à générer ces sommes mais la formule SOMMEPROD de convient pas....

Ci-joint un fichier exemple...

MERCI
 

Pièces jointes

Bonjour le fil, bonjour le forum,

Ne manquait plus que la proposition VBA !... La voici :

VB:
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set O = Worksheets("Feuil1") 'définit l'onglet O
TV = O.Range("H8").CurrentRegion 'définit le tableau des valeurs TV
O.Range("M8").CurrentRegion.ClearContents 'effance d'éventuelles anciennes données à partir de M8
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données en colonne 1 de TV
Next I 'prochaine ligne de la boucle
TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
K = 1 'initialise la variable K
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments J du tableau temporaire TMP
    For I = 1 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV
        If TV(I, 1) = TMP(J) Then 'si la donnée ligne I colonne 1 de TV est égale à l'élément J de TMP
            ReDim Preserve TL(1 To 2, 1 To K) 'redimensionne le tableau des lignes TL (2 lignes, K colonnes)
            TL(1, K) = TV(I, 1) 'récupère le nom dans la ligne 1
            TL(2, K) = TL(2, K) + TV(I, 2) 'fait la somme dans la ligne 2
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle 2
    K = K + 1 'incrémente K
Next J 'prochain élément de la boucle 1
'si K est supérieure à 1 renvoie dans M8 redimensionnée le tableau TL transposé
If K > 1 Then O.Range("M8").Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
244
Réponses
4
Affichages
194
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…