
Formule générique
=SUMPRODUCT(--(range1=criteria),range2)
Sommaire
Pour additionner ou totaliser des colonnes en fonction de critères dans des colonnes adjacentes, vous pouvez utiliser une formule basée sur la fonction SOMMEPROD. Dans l'exemple illustré, la formule en J5 est:
=SUMPRODUCT(--($B5:$H5=J$4),$C5:$I5)
Explication
À la base, cette formule utilise SUMPRODUCT pour multiplier puis additionner les produits de deux tableaux: array1 et array2 . Le premier tableau, array1, est configuré pour agir comme un "filtre" pour n'autoriser que les valeurs qui répondent aux critères.
Array1 utilise une plage qui commence sur la première colonne qui contient des valeurs qui doivent passer des critères. Ces «valeurs de critères» se trouvent dans une colonne à gauche et immédiatement adjacente aux «valeurs de données».
Les critères sont appliqués comme un simple test qui crée un tableau de valeurs TRUE et FALSE:
--($B5:$H5=J$4)
Ce bit de la formule "teste" chaque valeur du premier tableau en utilisant les critères fournis, puis utilise un double négatif (-) pour contraindre les valeurs TRUE et FALSE résultantes à 1 et 0. Le résultat ressemble à ceci:
(1,0,0,0,1,0,1)
Notez que les 1 correspondent aux colonnes 1, 5 et 7, qui répondent aux critères de «A».
Pour array2 à l' intérieur de SUMPRODUCT, nous utilisons une plage qui est "décalée" d'une colonne vers la droite. Cette plage commence par la première colonne contenant les valeurs à additionner et se termine par la dernière colonne contenant les valeurs à additionner.
Ainsi, dans l'exemple de formule en J5, une fois que les tableaux ont été remplis, nous avons:
=SUMPRODUCT((1,0,0,0,1,0,1),(1,"B",1,"A",1,"A",1))
Puisque SUMPRODUCT est programmé spécifiquement pour ignorer les erreurs qui résultent de la multiplication des valeurs de texte, le tableau final ressemble à ceci:
(1,0,0,0,1,0,1)
Les seules valeurs qui "survivent" à la multiplication sont celles qui correspondent à 1 à l'intérieur de array1 . Vous pouvez penser à la logique dans array1 "filtrant" les valeurs dans array2 .