[calc]Somme de terme avec variation d'un indice

Bonjour (second essai : le mpremier message m'est revenu en failure notice)

J'aimerai faire une somme dont l'élément de base est de la forme suivante :
RECHERCHE(B26-$B21;$B7:$L7;$B8:$L8)*$B22

Avec le B du $B21 et du $B22 qui varient de B à CD

Du genre :
Somme (indice = B à CD de RECHERCHE(B26-$indice21;$B7:$L7;$B8:$L8)*$indice22 )

Est-ce faisable ? Si oui, comment ?

Bonjour,

Bernard Siaud alias Troumad wrote:

Bonjour (second essai : le mpremier message m'est revenu en failure
notice)

J'aimerai faire une somme dont l'élément de base est de la forme suivante
:
RECHERCHE(B26-$B21;$B7:$L7;$B8:$L8)*$B22

Avec le B du $B21 et du $B22 qui varient de B à CD

Du genre :
Somme (indice = B à CD de
RECHERCHE(B26-$indice21;$B7:$L7;$B8:$L8)*$indice22 )

Est-ce faisable ? Si oui, comment ?
--
Amicalement vOOotre Troumad Alias Bernard SIAUD

Si j'ai bien compris, tu recherche successivement B26- le contenu de B21
jusqu'à CD21, puis tu multiplies par le contenu respectif sur la ligne 22.

Donc RECHERCHE(B26-$B21;$B7:$L7;$B8:$L8)*$B22 +
RECHERCHE(B26-$C21;$B7:$L7;$B8:$L8)*$C22 + etc jusqu'à CD.

Si c'est bien le cas, avec SOMMEPROD et une recherche matricielle devrait te
donner le résultat :

=SOMMEPROD(RECHERCHE(B26-B21:CD21;B7:L7;B8:L8);B22:CD21)

formule qui peut être simplifiée comme ceci :

=SOMMEPROD(RECHERCHE(B26-B21:CD21;B7:L8);B22:CD21)

Il est en effet possible d'utiliser RECHERCHE avec 2 arguments au lieu de 3.
Dans ce cas le deuxième argument est à la fois matrice de recherche et
matrice de résultat. La recherche se fait dans la 1ère colonne de la matrice
et renvoie le résultat correspondant dans la dernière.
Si la matrice contient plus de colonnes que de lignes, il faut lire ligne à
la place de colonne dans la phrase précédente.

SOMMEPROD transmet le caractère matriciel à RECHERCHE sans qu'il soit
nécessaire de valider par Ctrl+Maj+Entrée.

Gérard

[...]
Je regarde ta formule, j'aimerai quelque chose du genre :
=SOMMEPROD(RECHERCHE(B26-($B21:$CD21);B7:L8);B22:CD22)

Où :
B26-($B21:$CD22) serait le résultat de la soustraction de deux matrice ligne, la première pleine de la valeur de B26

Donc, je chercherai la case dans la ligne x1 (entre B et L) de la ligne 7 dont la valeur est le résultat de la soustraction de B26 avec la case de la ligne 21 colonne x2 ( entre B et CD ) pour prendre la valeur dans la ligne 8, colonne x1, ce nombre je le multiplie par le nombre de la ligne 22 colonne x2. Tous les résultats des produits ainsi calculés seront sommés entre eux ( sommer, à sommer... la construction de cette phrase m'a assommée !).
Le problème, c'est que je récupère #N/D comme résultat !

Avec votre proposition, je récupérais #VALEUR :frowning:

Donc tous les cas, j'ai des problèmes...
1) B26-B21:CD21 ou B26-($B21:$CD21) ? Me donne bien la différence que je cherche ? Soustraire une matrice et un nombre est mathématiquement incorrect
2) Je ne vois pas pourquoi vous aviez mis B22:CD21 pour la seconde matrice. Je multiplie deux matrices, normalement, une ligne par une colonne, pour récupérer un scalaire (nombre ou matrice 1x1).

Bernard Siaud alias Troumad wrote:

2) Je ne vois pas pourquoi vous aviez mis B22:CD21 pour la seconde
matrice. Je multiplie deux matrices, normalement, une ligne par une
colonne, pour récupérer un scalaire (nombre ou matrice 1x1).
--
Amicalement vOOotre Troumad Alias Bernard SIAUD

C'est une typo (double puisque j'ai fait un copier/coller), il fallait bien
lire B22:CD22.
=SOMMEPROD(RECHERCHE(B26-($B21:$CD21);B7:L8);B22:CD22) devrait fonctionner.
SOMMEPROD fait un produit scalaire.

Maintenant un fichier aiderait à mieux visualiser (après une bonne nuit de
sommeil).

Gérard

Gérard Fargeot wrote:

Bernard Siaud alias Troumad wrote:

2) Je ne vois pas pourquoi vous aviez mis B22:CD21 pour la seconde
matrice. Je multiplie deux matrices, normalement, une ligne par une
colonne, pour récupérer un scalaire (nombre ou matrice 1x1).
--
Amicalement vOOotre Troumad Alias Bernard SIAUD

C'est une typo (double puisque j'ai fait un copier/coller), il fallait
bien lire B22:CD22.
=SOMMEPROD(RECHERCHE(B26-($B21:$CD21);B7:L8);B22:CD22) devrait
fonctionner.
SOMMEPROD fait un produit scalaire.

Maintenant un fichier aiderait à mieux visualiser (après une bonne nuit de
sommeil).

Gérard

Pour ajouter que l'erreur #N/D est sans doute due au fait que l'une des
valeurs de la matrice B26-(B21:CD21) est inférieure à la valeur contenue en
B7.

Voilà un exemple avec une correction suite à ta remarque.
http://troumad.org/OOo/probas.ods

J'ai réduit les calculs !

A la vue du fichier, je vois 2 problèmes :

1) La fonction RECHERCHE donne un résultat correct si la matrice de
recherche est triée en ordre croissant.
Dans ton fichier elle est bien triée mais dans un ordre décroissant.

Exit donc la fonction RECHERCHE.

2) Certaines valeurs cherchées ne figurent pas dans la matrice de recherche.
Par exemple pour la formule en C6,
C5-($J2:$O2) renvoie la matrice {6;7;8;9;10;11} , les nombres 8 à 11 ne sont
pas présents dans la matrice I2:AE3.

Je te propose donc de remplacer RECHERCHE par RECHERCHEH et

- soit d'élargir la matrice de recherche en y incluant les colonnes C à H
ce qui nous donne =SOMMEPROD(RECHERCHEH(C5-($J2:$O2);$C2:$AE3;2;0);$J3:$O3)

- soit d'utiliser une "vrai matricielle" qui remplaces les valeurs #N/D par
0 :
=SOMME((SI(ESTNA(RECHERCHEH(C5-($J2:$O2);$J2:$AE3;2;0));0;RECHERCHEH(C5-($J2:$O2);$J2:$AE3;2;0))*$J$3:$O$3))

A toi de voir la solution qui répond le mieux à tes attentes.

Gérard

Tu viens de m'ouvrir des voies inconnues et intéressantes. Je viens de faire ce que je voulais et même plus !
http://troumad.org/OOo/probas.ods a été corrigé et largement complété.

Finalement, j'ai tout simplement utilisé (regarde le tableau) :
=SOMMEPROD(RECHERCHEH(E53-($D50:$DB50);$C$2:$J$3;2;1);($D51:$DB51))

Message du 14/04/11 09:44
De : "Bernard Siaud alias Troumad"
A : users@fr.libreoffice.org
Copie à :
Objet : Re: [fr-users] Re: [calc]Somme de terme avec variation d'un indice

Tu viens de m'ouvrir des voies inconnues et intéressantes. Je viens de
faire ce que je voulais et même plus !
http://troumad.org/OOo/probas.ods a été corrigé et largement complété.

Finalement, j'ai tout simplement utilisé (regarde le tableau) :
=SOMMEPROD(RECHERCHEH(E53-($D50:$DB50);$C$2:$J$3;2;1);($D51:$DB51))

--
Amicalement vOOotre Troumad Alias Bernard SIAUD

Content que tu puisses jouer au dés. :slight_smile:

Tu peux même voir un programme en C/GTK pour aider avec les dès : http://dnd.ezael.net/viewtopic.php?f=112&t=2328 : il génère des feuilles de personnages au format odt :wink: Et le fichier de probas, je l'ai aussi fait passer sur le site.
Tous est bon pour distribuer des fichiers au format LibO/OOo :sunglasses: