Somme avec criteres

abourayane2009 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   -
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.



A voir également:

3 réponses

DjiDji59430 Messages postés 4253 Date d'inscription   Statut Membre Dernière intervention   700
 
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
1
Utilisateur anonyme
 
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
0
ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   160
 
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
0