Sommeprod, définition des matrices

Bonjour à tous,

Je suivais un tutoriel sur la fonction SOMMEPROD et j'avais compris que l'on pouvait séparer les matrices soit par ";" soit pas "*"

Hors sur le fichier en PJ j'ai un calcul qui fonctionne bien lorsque je sépare les matrices via l'astérisque
mais plus lorsque je sépare avec le point-virgule

En revanche si les matrices ne se limitent qu'à une seule colon

ne, comme j'ai pu le constater en cellule I14 cela fonctionne....

Quelqu'un saurait-il m'expliquer cette subtilité?

Merci beaucoup!

Bonsoir,

comme son nom l'indique SommeProd fait la Somme des Produits des matrices que l'on lui donne en paramètres.
Donc il est préférable d'utiliser le "*" qui est en fait le produit "informatique".

A priori, lorsque les matrices ne font appels qu'à une seule colonne ce n'est pas nécessaire, mais pour éviter toute erreur le mieux est de le mettre comme même.
Si vous remplacer le ";" par un "*" alors cela fonctionne aussi, donc par rapport à son nom utilisez le bon caractère à savoir la multiplication "*"

@ bientôt

LouReeD

Bonjour,

Comme son nom l'indique, la fonction SOMMEPROD() effectue la somme des produits de plusieurs matrices de cellules. En utilisation normale, les matrices doivent être séparées par des points virgules et elles doivent obligatoirement avoir la même taille (sinon erreur #VALEUR!).

On utilise très souvent cette fonction pour effectuer la somme d'une matrice de résultats de calculs effectués sur différentes matrices de cellules à l'aide de comparaisons et de multiplications. Cette matrice de résultats est mono-colonne (il n'y a qu'un résultat par ligne), donc si on ajoute d'autres matrices de cellules séparées par des points virgules, elles doivent aussi être mono-colonne (sinon erreur #VALEUR!).

Note : dans le calcul des résultats on peut utiliser tous les opérateurs. on utilise souvent *1 ou +0 ou -- ou /1 pour transformer un booléen en nombre 1 ou 0

Bon ben tant pis pour moi...
Ca m'apprendra de penser savoir...

Bonjour Patrice33740 ! On pourrait presque vous appeler "F1" ! (en rapport avec votre avatar !)

@ bientôt

LouReeD

Bonjour à tous, Shtours, LouReeD et Patrice

Les matrices doivent être de la même taille ... OUI et NON, on peut avoir

=SOMMEPROD((B1:E1)*(B2:E5)*(A2:A5))

notez la matrice multicolonnes multilignes B2:E5

et dans ce cas le ; n'est pas possible !

28sommeprod.xlsx (8.16 Ko)

Donc j'utilise toujours * cela me parait plus logique.

Bonsoir LouReed, Steelson, Patrice,

Mercipour vos réponses! :)

@Steelson : C'est justement ce que je souhaiterais saisir : Pourquoi lorsque l'on a une matrice multi-colonnes il est impossible de mettre le ";" ?

Car de surcroît cette impossibilité amène à constater, lorsque l'on regarde la console de la fonction, que Excel considère l'existance d'une seule matrice

, dans laquelle on trouve nos trois matrices reliées par des "*".

Je pourrais très bien prendre acte de cette nuance sas chercher à comprendre, mais je me dis qu"il y a surement une logique de fer cachée derrière ce subtil détail. :D

Alors là, ?? je ne connais pas la logique ! et comme je dis, je trouve du reste plus logique de mettre *

Si quelqu'un avait la réponse ...

Bonsoir LouReed, Steelson, Patrice,

.... Pourquoi lorsque l'on a une matrice multi-colonnes il est impossible de mettre le ";"

Je t'ai donné l'explication : chaque argument de la fonction doit représenter une matrice de taille identique, c'est à dire qu'on peut pas avoir de matrices de taille différentes séparées par des ;

Il faut différencier une série de valeurs obtenues par calcul, c'est à dire une matrice de valeurs calculées qui ne comporte qu'une seule dimension (une colonne) , d'une matrice de cellules comportant plusieurs dimensions (plusieurs colonnes).

L'exemple de Steelson =SOMMEPROD((B1:E1)*(B2:E5)*(A2:A5)) , renvoi #VALEUR!

Si le premier argument est une matrice de résultats sur 2 colonnes, le second argument doit aussi avoir 2 colonnes,

par exemple : =SOMMEPROD(A1:B15*C1:C15;D1:E15)

Dans ton cas, avec une matrice à 7 colonnes en premier argument et une autre en second argument, ça fonctionne parfaitement, par exemple :

=SOMMEPROD((MOD(LIGNE(B2:B7);2)=0)*B2:G7;B2:G7/B2:G7)

Tu notera que ligne(B2:G7) et ligne(B2:B7) donnent le même résultat et que MOD() n'est pas une fonction matricielle.

L'exemple de Steelson =SOMMEPROD((B1:E1)*(B2:E5)*(A2:A5)) , renvoi #VALEUR!

Je ne comprends pas ta remarque Patrice ...

capture d ecran 126

Bonjour Patrice,

Oui ça y est je comprends, dans son sens strict la fonction SOMMEPROD ne fait des sommes de matrices qu'à la condition que celles-ci soient identiques en dimension.

Finalement utiliser les "*" permet d'en avoir une utilisation mais pas dans sa fonction première.

En revanche, je ne comprends pas l'utilité d'aller ajouter "B2:G7/B2:G7" puisque finalement les "1" retournés ne sont pas représentatif des valeurs des cellules se trouvant dans

cette matrice.

Lorsque tu dis :"

=SOMMEPROD((MOD(LIGNE(B2:B7);2)=0)*B2:G7;B2:G7/B2:G7)

Tu notera que ligne(B2:G7) et ligne(B2:B7) donnent le même résultat et que MOD() n'est pas une fonction matricielle.

". Tu veux dire que cela donne le même résultat dans la fonction MOD, n'est-ce pas?!

@Steelson je pense que ce que Patrice veut dire par là c'est que si l'on utilise SOMMEPROD dans sa fonction stricte et donc en séparant bien les matrices avec des ";" et qu'ainsi celles-ci soient considérées en tant que telles par la fonction, des matrices non identiques renvoient valeur

Mais effectivement je pense qu'il parlait de la situation avec des "." et pas des "*" comme dans le cas que tu as présenté, où l'occurrence ça fonctionne bien.

Bonjour à tous,

dans son sens strict la fonction SOMMEPROD ne fait des sommes de matrices

Plus précisément Sommeprod() fait la somme des éléments de la matrice résultant du produit des matrices.

Tu peux très bien lui en mettre une seule, c'est ce que tu fais en faisant toi-même leur produit avec *
C'est sensé être plus optimisé (et donc plus rapide) si tu utilises la syntaxe avec le ; lorsque c'est faisable.

Et pour être complet * correspond au ET logique entre 2 matrices (élément par élément), mais tu peux aussi utiliser + pour un OU logique.
eric

Bonjour,

L'essentiel a été dit sur ce fil. A savoir que les arguments de la fonction SOMMEPROD (en utilisation conventionnelle) doivent être de même taille.

L'utilisation des * est un contournement lié au fait la fonction force le matriciel dans la plupart des cas.

Dans ce cas SOMMEPROD fait une simple SOMME d'une matrice unique.

Point particulier de la formule utilisée ici : =SOMMEPROD(--(MOD(LIGNE(B2:G7);2)=0);B2:G7)

En apparence les arguments sont de même taille (B2:G7 dans les 2 cas) mais la formule renvoie une erreur. Pourquoi ?

Parce que, contrairement aux apparences, elles sont bien de taille différente.

La fonction LIGNE (comme son homologue COLONNE) utilisée en matricielle renvoie toujours une matrice uni-dimensionnelle.

{LIGNE(A1:B2)} renvoie

1
2

et pas

11
22

Enfin pour finir, ça me gonfle de voir proposer quotidiennement des fausses bonnes solutions avec SOMMEPROD à la place de fonctions existantes dix fois plus rapide, moins gourmandes et moins susceptible d'erreur.

Par exemple SOMMEPROD(--(A1:A10="truc")) à la place de NB.SI(A1:A10;"truc").

A+

Re,

En revanche, je ne comprends pas l'utilité d'aller ajouter "B2:G7/B2:G7" puisque finalement les "1" retournés ne sont pas représentatif des valeurs des cellules se trouvant dans

cette matrice.

C'est juste un exemple dans lequel, comme l'a si bien dit Eriiic (que je salue), les éléments de la matrice résultant du produit des matrices forment une nouvelle matrice de la même taille (avec 2 colonnes).

...et que MOD() n'est pas une fonction matricielle.
Tu veux dire que cela donne le même résultat dans la fonction MOD, n'est-ce pas?!

Non, quand tu écris =SOMMEPROD(MOD(LIGNE(B2:G7);2)=0;B2:G7) le premier argument est le résultat booléen de la comparaison MOD()=0 c'est à dire une valeur unique. Ces résultats ne constituent pas une matrice avec 7 colonnes.

Pour obtenir une matrice dans le premier argument on pourrait écrire =SOMMEPROD((MOD(LIGNE(B2:G7);2)=0)*B12:G17;B2:G7) où B12:G17 serait une matrice de 1 ou encore =SOMMEPROD((MOD(LIGNE(B2:G7);2)=0)+B12:G17;B2:G7) où B12:G17 serait une matrice de 0.

Bonjour à tous,

Merci pour votre aide. J'ai pris le temps de lire toutes vos réponses pour m'aider à comprendre mieux cette fonction et c'a m'a beaucoup aidé

Beaucoup plus de clarté dans la compréhension de cette fonction et notamment en ce qui concerne son utilisation "détrounéeé et le pourquoi comment c'est possible et ça fonctionne.

J'aime beaucoup ce forum, j'y ai appris énormément et je ne m'en lasse pas :)

Merci à tous !

Moi y a bien longtemps que j'ai décroché...
Sommeprod me sert souvent, pour ne pas dire essentiellement à faire des comptes sous conditions. Maintenant si NB.SI est moins gourmant je regarderais de ce coté en premier. Mais au niveau des critères il est peut être moins "ouvert" que les conditions que l'on peut mettre sous SOMMEPROD.

@ bientôt

LouReeD

Rechercher des sujets similaires à "sommeprod definition matrices"