Somme par variable

johnvegas Messages postés 4 Statut Membre -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Bonjour,

J'aimerai faire une macro qui permet de calculer la somme par élément, je m'explique: j'ai par exemple un tableau comme ça

Nom Nb de points
aline 300
aline 250
aline 400
aline 200
rémi 400
rémi 330
rémi 100
albert 350
albert 220
albert 220

J'aimerai que la macro me sorte le résultat suivant:

aline 1150
rémi 830
albert 790

C'est à dire la somme pour chaque nom.

Comment procéder s'il vous plait ?

Merci :)

3 réponses

  1. Lentzouille Messages postés 728 Statut Membre 64
     
    Bonjour,

    Pas besoin de macro,

    Un simple Tableau croisé dynamique répondra à votre demande,

    Cordialement,
    0
  2. johnvegas Messages postés 4 Statut Membre
     
    Merci Lentzouille, mais on me demande faire une macro.
    0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour Vegas, Lentzouille

    as tu demandé à la personne si elle connaissait les Tableaux croisés Dynamiques car souvent, on ne connait pas cette b^te là pourtant très efficace et rapide à exécuter

    on peut aussi le faire par formules sans grande difficulté et aussi par filtres ou bdsomme...

    bref, "penser Excel avant de penser VBA" :o)

    mais comme on veut du VBA, allons y avec la grosse artillerie (on considère qu'il y a des milliers de lignes, il n'est pas nécessaire que le noms sont groupés)!!!

    Option Explicit
    Sub Additionne_par_critere()
    Dim Derlig As Integer, Dico As Object
    Dim Lig As Integer, Nom As String, Points As Double

    Application.ScreenUpdating = False
    Derlig = Columns("A").Find("*", , , , , xlPrevious).Row
    Set Dico = CreateObject("scripting.dictionary")
    For Lig = 2 To Derlig
    Nom = Cells(Lig, "A")
    If Not Dico.exists(Nom) Then
    Points = Cells(Lig, "B")
    Dico.Add Nom, Points
    Else
    Points = Points + Cells(Lig, "B")
    Dico.Item(Nom) = Points
    End If
    Next
    Range("E2").Resize(Dico.Count, 1) = Application.Transpose(Dico.Keys)
    Range("F2").Resize(Dico.Count, 1) = Application.Transpose(Dico.items)
    End Sub


    la maquette:
    https://www.cjoint.com/?3IApArBGXf4
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Lire: il est nécessaire que les noms soient groupés
      au lieu de
      il n'est pas nécessaire que le noms sont groupés
      0