grouper enregistrements pour effectuer une somme

grouper enregistrements pour effectuer une somme - VB/VBA/VBS - Programmation

Marsh Posté le 25-05-2004 à 18:06:52    

Bonjour à tous,
 
Je cherche le code pour grouper des lignes en fonction de leur nom et faire la somme des cellules de chaque ligne.
 
expliquation: exemple de tableau excel (le nombe de ligne n est jamais le meme)
 
 
Champs1           |     Champ2       |
--------------------------------------
Nom1              |     15           |
Nom1              |     10           |
Nom5              |     12           |
Nom1              |     55           |
Nom5              |     20           |
Nom5              |     22           |
Nom2              |      0           |
Nom5              |      8           |
 
 
je voudrais (en VBA) qu il regarde les cellules du champ1, qui regroupe celles qui sont = et qu il me fasse la somme pour chaque regroupement (en VBA excel) resultat si dessous
 
Champs1           |     Champ2       |
--------------------------------------
Nom1              |     80           |
Nom2              |      0           |
Nom5              |     62           |
 
 
J'ai deja reussi à un resultat mais je suis aubligé d'avoir un tableau trié sur le Champ1,  quelqu'un peux t il me donner un coup de main pour le Code vba sans faire l'opération de trie.
 
Merci d'avance

Reply

Marsh Posté le 25-05-2004 à 18:06:52   

Reply

Marsh Posté le 26-05-2004 à 20:45:33    

dans ton tableau excel tu peut via ta macro définir une cellule avec la formule "SOMME.SI(plage;critère;somme_plage)et tu recupere le résultat dans la macro sous la forme x = ActiveCell
A+
yannick
 

Reply

Marsh Posté le 27-07-2005 à 14:32:43    

je vais essayer merci bc

Reply

Marsh Posté le 11-10-2005 à 10:06:42    

salut
 
Je cherche moi aussi le code pour grouper des lignes en fonction de leur nom et faire la somme des cellules de chaque ligne.
 
expliquation: exemple de tableau excel (le nombe de ligne n est jamais le meme)
 
 
Champs1           |     Champ2       |
--------------------------------------
Nom1              |     15           |
Nom1              |     10           |
Nom5              |     12           |
Nom1              |     55           |
Nom5              |     20           |
Nom5              |     22           |
Nom2              |      0           |
Nom5              |      8           |
 
 
je voudrais (en VBA) qu il regarde les cellules du champ1, qui regroupe celles qui sont = et qu il me fasse la somme pour chaque regroupement (en VBA excel) resultat si dessous
 
Champs1           |     Champ2       |
--------------------------------------
Nom1              |     80           |
Nom2              |      0           |
Nom5              |     62           |
 
 
si vous pouviez me donner un coup de main ce serai vraiment sympa. j'aimerais avoir le code en vba.
 
Merci d'avance

Reply

Marsh Posté le 11-10-2005 à 12:23:59    

:hello:  
Voici une solution possible :

Code :
  1. ' Supprimer les doublons et regrouper les valeurs
  2. ' Au début : col A = identifiants, col B = nombres, col C = vide
  3. ' A la fin : col D = identifiants uniques, col E = sommes
  4. Public Sub grouper_col()
  5.   Application.ScreenUpdating = False   ' pour aller plus vite
  6.   Set ma_feuille = ThisWorkbook.Sheets("Feuil1" )
  7.  
  8.   c_in1 = 1 ' Lecture à partir de la colonne A (A = 1)
  9.   l_in1 = 1 ' à partir de la première ligne
  10.   c_out1 = 4 ' Ecriture à partir de la colonne D (D = 4)
  11.   l_out1 = 1 ' à partir de la première ligne
  12.  
  13.   ' Première boucle sur tous les identifiants distincts
  14.   Do While Not IsEmpty(ma_feuille.Cells(l_in1, c_in1))
  15.     ' Test si ligne déjà prise en compte
  16.     If (ma_feuille.Cells(l_in1, c_in1 + 2).Value <> "x" ) Then
  17.       ' Ligne non traitée
  18.       ' Récupère l'idenfitiant
  19.       val1 = ma_feuille.Cells(l_in1, c_in1)
  20.       ' Le copie dans le tableau des résultats
  21.       ma_feuille.Cells(l_out1, c_out1).Value = val1
  22.      
  23.       ' Deuxième boucle pour faire la somme
  24.       sum1 = ma_feuille.Cells(l_in1, c_in1 + 1)
  25.       l_in2 = l_in1 + 1
  26.       Do While Not IsEmpty(ma_feuille.Cells(l_in2, c_in1))
  27.         If (ma_feuille.Cells(l_in2, c_in1).Value = val1 _
  28.             And ma_feuille.Cells(l_in2, c_in1 + 2).Value <> "x" ) Then
  29.            sum1 = sum1 + ma_feuille.Cells(l_in2, c_in1 + 1).Value
  30.            ' Met une croix dans la colonne C pour indiquer déjà vu
  31.            ma_feuille.Cells(l_in2, c_in1 + 2).Value = "x"
  32.         End If
  33.         l_in2 = l_in2 + 1
  34.       Loop
  35.       ' Ecrit la somme
  36.       ma_feuille.Cells(l_out1, c_out1 + 1).Value = sum1
  37.       l_out1 = l_out1 + 1
  38.    
  39.     End If
  40.     l_in1 = l_in1 + 1
  41.   Loop
  42.   Application.ScreenUpdating = True
  43. End Sub

:)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed