Formule matricielle somme index

Le
bcar
Bonjour,

Finalement ce petit truc que j'ai soulevé dans la file "Validation NAS"
me trotte un peu dans la tête

A savoir pourquoi la formule (matricielle)
{=SOMME(INDEX({2;3;4;5};{1;2;3}))} renvoie 2 et pas 2+3+4 = 9
(ou SOMMEPROD)
c'est à dire qu'elle agit comme si j'avais écris =INDEX({2;3;4;5};1)


(Par ailleurs et pour une question bonus subsidiaire on obtient 9 en
utilisant sommeprod et en validant sur 3 cellules, comment se fait-il
que le résultat validé sur 3 cellules donne pour la première cellule un
résultat différent de la même formule validée sur une seule cellule ?)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
bcar
Le #22971401
Merci pour cette réponse détaillée.

Mais alors existe-il un moyen de sommer des tableaux ?
d'emblée, j'imagine
{=SOMME(DECALER(INDEX({2;3;4;5};{1;2;3});0;0;3;1))}
mais bien sûr ça ne fonctionne pas ;) puisque ce sont des matrices
différentes...

mais cela me parait bizarre puisque je peux faire =SOMME({1};{2}) donc
avec 2 matrices différentes (même si elles ne sont pas générées par Excel)

Donc maintenant que j'ai bien pigé la limitation d'index, si quelqu'un a
une astuce pour réaliser ce que je désire faire (sans utilisation de
cellules intermédiaires) je suis preneur.


Le 30/12/2010 15:52, michdenis a écrit :
Bonjour,

Comme Lsteph ne veut pas se mouiller...
;-))

Voici une explication :

| {=SOMME(INDEX({2;3;4;5};{1;2;3}))}

Habituellement, lorsque l'on demande une validation matricielle,
Excel passe par un "Tableau (array)" intermédiaire pour résoudre
la formule.

La formule que tu proposes, cette section génère déjà un tableau
= INDEX({2;3;4;5};{1;2;3}) (nul besoin de faire une validation matricielle
pour générer ce tableau). Pour t'en convaincre, tu entres la formule
dans une cellule et tu appuies sur le bouton fx de la barre des formules.
Observe les accolades qui entourent le chiffre {2} comme réponse.
Par conséquent, Excel ne peut pas utiliser un tableau comme intermédiaire...
la fonction index() génère d'elle-même un tableau pour chacune des valeurs
qu'elle trouve. Normalement, chaque valeur intermédiaire représente un
item d'un tableau et non un tableau en soi. Résultat : pour afficher chaque
résultat du tableau, Excel a besoin d'autant de cellules qu'il y a de tableaux
dans le tableau.

Dans l'exemple, si on sélectionne 3 cellules (A1:A3) et que l'on
entre la formule en A1, avec une validation matricielle
on obtiendra dans chacune des cellules le résultat de chacun
des tableaux générés.

MichD
--------------------------------------------
"bcar" a écrit dans le message de groupe de discussion : iffiaa$n40$

Bonjour,

Finalement ce petit truc que j'ai soulevé dans la file "Validation NAS"
me trotte un peu dans la tête

A savoir pourquoi la formule (matricielle)
{=SOMME(INDEX({2;3;4;5};{1;2;3}))} renvoie 2 et pas 2+3+4 = 9
(ou SOMMEPROD)
c'est à dire qu'elle agit comme si j'avais écris =INDEX({2;3;4;5};1)


(Par ailleurs et pour une question bonus subsidiaire on obtient 9 en
utilisant sommeprod et en validant sur 3 cellules, comment se fait-il
que le résultat validé sur 3 cellules donne pour la première cellule un
résultat différent de la même formule validée sur une seule cellule ?)

michdenis
Le #22971801
| =SOMME({1};{2})

Attention, il faut tenir compte de la fonction utilisée
et de ses paramètres. Sommer les paramètres que tu
as passés est dans les codes de la fonction "somme()"

Elle peut même sommer ces 2 tableaux :
=SOMME({2;3;4;5};{1;2;3})
Le premier élément du tableau 1 + le premier élément du tableau 2 = 3
Le deuxième élément du tableau 1 + le deuxième élément du tableau 2 = 5
Le troisième élément du tableau 1 + le troisième élément du tableau 2 = 7
+ le quatrième élément du tableau 1 = 5
Résultat : 20

La fonction Index() à 3 paramètres :
Paramètre 1 : Un tableau ou une plage de cellules
Paramètre 2 : Un numéro de ligne appartenant au tableau ou plage
Paramètre 3 : Un numéro de colonne appartenant à la plage
En fait, le paramètre 2 et le paramètre 3 sont les coordonnées de la position de
l'élément du tableau. En toute logique, chaque élément n'a qu'une
combinaison du paramètre 2 et 3 pour le désigner. Si tu passes un
tableau pour le paramètre 2, on revient à l'explication que je donnais
dans le fil précédent. Tu obtiendras un tableau de tableau comme
tableau intermédiaire et tu auras besoin d'autant de cellules qu'il y a
de tableau dans ton tableau intermédiaire.

Par exemple pour additionner les chiffres selon leur position, tu
pourrais utiliser ceci :
=SOMME(CHOISIR({2;4;6};1;2;3;4;5;6;7;8;9)) 'Nul besoin d'une validation matricielle

En supposant que dans A1 tu as un nombre représenté par 9 chiffres
pour trouver la somme de ces chiffres, tu pourrais utiliser :
'Validation matricielle
=SOMME(STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1)*1)
OU
Validation non matricielle :
=SOMME((STXT(A1;{1;2;3;4;5;6;7;8;9};1)*1))

Le premier paramètre de la fonction STXT() requiert une chaîne de caractères
et non un tableau... mais si l'envie te prend de passer un tableau :
=SOMME((STXT({1;2;3;4;5;6;7;8;9};{1;2;3;4;5;6;7;8;9};1)*1))
Tu obtiendras : = #VALEUR!

Il faut quand même respecter ce qu'un paramètre peut prendre comme valeur !

Nonobstant le fait que ceci est possible
=SOMME({1;2;3;4;5;6;7;8;9};{1;2;3;4;5;6;7;8;9}) = 90

N.B- Les formules ce n'est pas ce qui m'intéresse le plus dans Excel !!!

MichD
--------------------------------------------
"bcar" a écrit dans le message de groupe de discussion : ifibhr$ipo$

Merci pour cette réponse détaillée.

Mais alors existe-il un moyen de sommer des tableaux ?
d'emblée, j'imagine
{=SOMME(DECALER(INDEX({2;3;4;5};{1;2;3});0;0;3;1))}
mais bien sûr ça ne fonctionne pas ;) puisque ce sont des matrices
différentes...

mais cela me parait bizarre puisque je peux faire =SOMME({1};{2}) donc
avec 2 matrices différentes (même si elles ne sont pas générées par Excel)

Donc maintenant que j'ai bien pigé la limitation d'index, si quelqu'un a
une astuce pour réaliser ce que je désire faire (sans utilisation de
cellules intermédiaires) je suis preneur.


Le 30/12/2010 15:52, michdenis a écrit :
Bonjour,

Comme Lsteph ne veut pas se mouiller...
;-))

Voici une explication :

| {=SOMME(INDEX({2;3;4;5};{1;2;3}))}

Habituellement, lorsque l'on demande une validation matricielle,
Excel passe par un "Tableau (array)" intermédiaire pour résoudre
la formule.

La formule que tu proposes, cette section génère déjà un tableau
= INDEX({2;3;4;5};{1;2;3}) (nul besoin de faire une validation matricielle
pour générer ce tableau). Pour t'en convaincre, tu entres la formule
dans une cellule et tu appuies sur le bouton fx de la barre des formules.
Observe les accolades qui entourent le chiffre {2} comme réponse.
Par conséquent, Excel ne peut pas utiliser un tableau comme intermédiaire...
la fonction index() génère d'elle-même un tableau pour chacune des valeurs
qu'elle trouve. Normalement, chaque valeur intermédiaire représente un
item d'un tableau et non un tableau en soi. Résultat : pour afficher chaque
résultat du tableau, Excel a besoin d'autant de cellules qu'il y a de tableaux
dans le tableau.

Dans l'exemple, si on sélectionne 3 cellules (A1:A3) et que l'on
entre la formule en A1, avec une validation matricielle
on obtiendra dans chacune des cellules le résultat de chacun
des tableaux générés.

MichD
--------------------------------------------
"bcar" a écrit dans le message de groupe de discussion : iffiaa$n40$

Bonjour,

Finalement ce petit truc que j'ai soulevé dans la file "Validation NAS"
me trotte un peu dans la tête

A savoir pourquoi la formule (matricielle)
{=SOMME(INDEX({2;3;4;5};{1;2;3}))} renvoie 2 et pas 2+3+4 = 9
(ou SOMMEPROD)
c'est à dire qu'elle agit comme si j'avais écris =INDEX({2;3;4;5};1)


(Par ailleurs et pour une question bonus subsidiaire on obtient 9 en
utilisant sommeprod et en validant sur 3 cellules, comment se fait-il
que le résultat validé sur 3 cellules donne pour la première cellule un
résultat différent de la même formule validée sur une seule cellule ?)

michel ou sam
Le #22971991
Bonjour,
peut être ceci
=PRODUITMAT(TRANSPOSE({2;3;4;5});{1;1;1;0})
Michel

"bcar" ifibhr$ipo$
Merci pour cette réponse détaillée.

Mais alors existe-il un moyen de sommer des tableaux ?
d'emblée, j'imagine
{=SOMME(DECALER(INDEX({2;3;4;5};{1;2;3});0;0;3;1))}
mais bien sûr ça ne fonctionne pas ;) puisque ce sont des matrices
différentes...

mais cela me parait bizarre puisque je peux faire =SOMME({1};{2}) donc
avec 2 matrices différentes (même si elles ne sont pas générées par Excel)

Donc maintenant que j'ai bien pigé la limitation d'index, si quelqu'un a
une astuce pour réaliser ce que je désire faire (sans utilisation de
cellules intermédiaires) je suis preneur.



michdenis
Le #22972091
Bonjour,

Avenue intéressante...
sauf erreur, cela requiert des matrices de même dimension !
alors, on pourrait écrire la même chose comme ceci :
=SOMME({2;3;4;5}*{1;1;1;0})

MichD
--------------------------------------------
"michel ou sam" a écrit dans le message de groupe de discussion : 4d1ccf1b$0$5425$


Bonjour,
peut être ceci
=PRODUITMAT(TRANSPOSE({2;3;4;5});{1;1;1;0})
Michel

"bcar" ifibhr$ipo$
Merci pour cette réponse détaillée.

Mais alors existe-il un moyen de sommer des tableaux ?
d'emblée, j'imagine
{=SOMME(DECALER(INDEX({2;3;4;5};{1;2;3});0;0;3;1))}
mais bien sûr ça ne fonctionne pas ;) puisque ce sont des matrices
différentes...

mais cela me parait bizarre puisque je peux faire =SOMME({1};{2}) donc
avec 2 matrices différentes (même si elles ne sont pas générées par Excel)

Donc maintenant que j'ai bien pigé la limitation d'index, si quelqu'un a
une astuce pour réaliser ce que je désire faire (sans utilisation de
cellules intermédiaires) je suis preneur.



bcar
Le #22973321
Merci à vous de tous,

Bon j'ai bien fait de creuser un petit peu ce truc, cela m'a donné plein
de bonnes idées pour d'autres choses...
(je vais en profiter pour proposer une nouvelle solution pour le
problème du NAS)

michdenis
N.B- Les formules ce n'est pas ce qui m'intéresse le plus dans Excel



Et pourtant on arrive a en faire des choses bluffantes avec (parce que
avec VBA évidemment on peut tout faire alors ce n'est ni très surprenant
ni très challenge ;) )


Le 30/12/2010 19:45, michdenis a écrit :
Bonjour,

Avenue intéressante...
sauf erreur, cela requiert des matrices de même dimension !
alors, on pourrait écrire la même chose comme ceci :
=SOMME({2;3;4;5}*{1;1;1;0})

MichD
--------------------------------------------
"michel ou sam" a écrit dans le message de groupe de discussion : 4d1ccf1b$0$5425$


Bonjour,
peut être ceci
=PRODUITMAT(TRANSPOSE({2;3;4;5});{1;1;1;0})
Michel

"bcar" ifibhr$ipo$
Merci pour cette réponse détaillée.

Mais alors existe-il un moyen de sommer des tableaux ?
d'emblée, j'imagine
{=SOMME(DECALER(INDEX({2;3;4;5};{1;2;3});0;0;3;1))}
mais bien sûr ça ne fonctionne pas ;) puisque ce sont des matrices
différentes...

mais cela me parait bizarre puisque je peux faire =SOMME({1};{2}) donc
avec 2 matrices différentes (même si elles ne sont pas générées par Excel)

Donc maintenant que j'ai bien pigé la limitation d'index, si quelqu'un a
une astuce pour réaliser ce que je désire faire (sans utilisation de
cellules intermédiaires) je suis preneur.






Tatanka
Le #22973681
Ou quelque chose du genre :
=SOMME(CHOISIR({2;4;5};4;8;12;1;12;6))

Serge


"michel ou sam"

Bonjour,
peut être ceci
=PRODUITMAT(TRANSPOSE({2;3;4;5});{1;1;1;0})
Michel

"bcar"
Merci pour cette réponse détaillée.

Mais alors existe-il un moyen de sommer des tableaux ?
d'emblée, j'imagine
{=SOMME(DECALER(INDEX({2;3;4;5};{1;2;3});0;0;3;1))}
mais bien sûr ça ne fonctionne pas ;) puisque ce sont des matrices
différentes...

mais cela me parait bizarre puisque je peux faire =SOMME({1};{2}) donc
avec 2 matrices différentes (même si elles ne sont pas générées par Excel)

Donc maintenant que j'ai bien pigé la limitation d'index, si quelqu'un a
une astuce pour réaliser ce que je désire faire (sans utilisation de
cellules intermédiaires) je suis preneur.




>


Publicité
Poster une réponse
Anonyme