Somme avec criteres
abourayane2009
Messages postés
1
Statut
Membre
-
ThauTheme Messages postés 1564 Statut Membre -
ThauTheme Messages postés 1564 Statut Membre -
Bonjour,
j'ai un tableau qui contient:
ColonneA: Numero de comptes de 6 chiffres
Colonne B: intitulé du compte
Colonne C: un montant
je veut fire la somme de la colonne c par criteres.
le critere est : la somme selon la categorie du numero de compte (les 3 premiers chiffres du num cmpt).
j'ai essayé avec somme.si mais je n'arrive pas resoudre le probleme.
j'ai un tableau qui contient:
ColonneA: Numero de comptes de 6 chiffres
Colonne B: intitulé du compte
Colonne C: un montant
je veut fire la somme de la colonne c par criteres.
le critere est : la somme selon la categorie du numero de compte (les 3 premiers chiffres du num cmpt).
j'ai essayé avec somme.si mais je n'arrive pas resoudre le probleme.
3 réponses
-
Bonjour,
Si tes comptes vont de A1 a C5, par exemple
=SOMMEPROD((GAUCHE(A1:A5;3)="123")*(C1:C5))
http://www.cjoint.com/14dc/DLhaEUtfDP1_sommeprod.jpg -
Bonjour
Rajoute une colonne pour extraire les 3 premiers chiffres du numéro de compte avec la formule =GAUCHE(A2 ;3) à tirer sur toute la colonne
Ensuite tu pourras utiliser la fonction SOUS-TOTAL pour avoir un total par catégorie.
Ou encore un tableau croisé dynamique encore plus rapide
-
Bonsoir Abourayane, bonsoir le forum,
Par formules je ne sais pas faire. Si une solution VBA te convient, essaie comme ça :
Private Sub Macro1() Dim O As Object 'déclare la variable O (Onglet) Dim TC As Variant 'déclare la variable TC (Tableau de Cellules) Dim D As Object 'déclare la variable D (Dictionnaire) Dim I As Integer 'déclare la variable I (Incrément) Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire) Dim J As Integer 'déclare la variable J (incrément) Dim SC() As Variant 'déclare la variable SC (Somme par Critère) Dim S As Single 'déclare la variable S (Somme) Set O = Sheets("Feuil1") 'définit l'onglet O (à adapter) TC = O.Range("A1").CurrentRegion 'définit le tableau TC (à adapter) Set D = CreateObject("Scripting.Dictionary") 'définit le dictionaire D For I = 2 To UBound(TC, 1) 'boucle sur toutes les lignes du tableau TC (en partant de la seconde) D(Left(TC(I, 1), 3)) = "" 'alimente le dictionnaire D Next I 'prochaine ligne de la boucle TMP = D.keys 'récupère dans le tableau temporaire TTMP, la liste du dictionnaire D sans doublons For J = 0 To UBound(TMP) 'boucle 1: sur tous les éléments du tableau TMP ReDim Preserve SC(1, J) 'redimensionne le tableau SC (2 lignes : ligne 0 et ligne 1; J colonnes) SC(0, J) = TMP(J) 'définit l'élément de la première ligne du tableau SC (le critère TMP(J)) For I = 2 To UBound(TC, 1) 'boucle sur toutes les lignes du tableau TC (en partant de la seconde) 'si les trois premiers caractères de la valeur en TC, ligne I, colonne 1 (=> colonne A) sont identiques au ctitère TMP(J) 'alors la somme S est égale à elle-même plus la valeur en TC, ligne I colonne 3 (=> colonne C) If Left(TC(I, 1), 3) = TMP(J) Then S = S + TC(I, 3) Next I 'prochaine ligne de la boucle 2 SC(1, J) = S 'définit l'élément de la seconde ligne du tableau SC (la somme S) S = 0 'réinitialise la somme S Next J 'prochain élément du tableau TMP Range("E1").CurrentRegion.Clear 'vide les anciennes données Range("E1") = "Critère": Range("F1") = "Somme" 'étiquettes en E1 et F1 'en E2, récupère le tableau SC transposé (inversikon lignes et colonnes Range("E2").Resize(UBound(SC, 2) + 1, UBound(SC, 1) + 1) = Application.Transpose(SC) End Sub
Attention ! Ce code renvoie le résultat dans les colonnes E et F qui sont effacé au préalable...
À plus,
ThauTheme