Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2807 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  grouper enregistrements pour effectuer une somme

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

grouper enregistrements pour effectuer une somme

n°738208
homogene
Posté le 25-05-2004 à 18:06:52  profilanswer
 

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

mood
Publicité
Posté le 25-05-2004 à 18:06:52  profilanswer
 

n°740713
yan1954
Posté le 26-05-2004 à 20:45:33  profilanswer
 

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
 

n°1161541
homogene
Posté le 27-07-2005 à 14:32:43  profilanswer
 

je vais essayer merci bc

n°1220168
akdoubi
Posté le 11-10-2005 à 10:06:42  profilanswer
 

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

n°1220304
olivthill
Posté le 11-10-2005 à 12:23:59  profilanswer
 

: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

:)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  grouper enregistrements pour effectuer une somme

 

Sujets relatifs
Afficher les 10 derniers enregistrements d'une table MySQL[ORACLE] Concaténation d'enregistrements
Excel/VBA Somme d'une colonne dont on ne connait pas la longueurSomme de feuilles de calcul
somme conditionnelle avec Excel[vba] faire la somme dans un rapport help
Comment effectuer rapatriement de donne sur un serveureffectuer une boucle avec IF
nombre d'enregistrements dans un sous formulaireNombre maxi d'enregistrements dans un table
Plus de sujets relatifs à : grouper enregistrements pour effectuer une somme


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR