Somme avec criteres

Fermé
abourayane2009 Messages postés 1 Date d'inscription samedi 6 décembre 2014 Statut Membre Dernière intervention 6 décembre 2014 - 6 déc. 2014 à 23:09
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 7 déc. 2014 à 00:47
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.



3 réponses

DjiDji59430 Messages postés 4180 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 25 janvier 2025 683
7 déc. 2014 à 00:24
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
7 déc. 2014 à 00:08
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 mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
Modifié par ThauTheme le 7/12/2014 à 00:55
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