|
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT|
|
("1:"&LIGNES($A$2:$A$11)))))
Habituellement, si on avait seulement un critère, on utiliserait, une
formule
de ce genre : Exemple :
=INDEX(Code;EQUIV(F1;Nom;0))
Dans cette formule, on a remplacé Equiv() par une formule
matricielle Sommeprod() pour déterminer la ligne où les
2 condtions étaient vrai. Dans le tableau, une seule entrée
répond aux 2 critères.
Avec 2 critères le sommeprod() va donner un tableau de vrai / faux pour
chacune des entrées du
tableau qui va tester
$A$2:$A$11á) * ($B$2:$B$11ñ)
Faux Faux = 0
Faux vrai = 0
Vrai Faux = 0
Vrai Vrai =1
Etc etc... pour chacune des lignes
Comme la valeur numérique de faux dans excel est 0
et la valeur numérique de Vrai est 1 , seules les entrées
dont les 2 colonnes égales vrai vont donner 1
Cette section de la formule :LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
retourne un tableau de numéro des lignes indiquées dans la plage
la premiière ligne est 1 et la dernière ligne est 10 (LIGNES($A$2:$A$11))
Pour tester cela, sélectionne 10 lignes dans une même colonne, entre la
formule
et valide par Ctrl + Maj + Enter ... chacune des cellules indiquera un
chiffre de
1 à 10. (la plage à 10 lignes)
Si je multiplie le résultat obtenu par la première partie de la formule
par le
numéro de la ligne, j'obtiens :
0 * 1 = 0
0 * 2 = 0
0 * 3 = 0
1 * 4 = 4
Le chiffre 4 devient la valeur retournée par sommeprod() qui est en fait
le deuxième
argument de la fonction Index(Tableau,Ligne,Colonne). La ligne 4 est par
conséquent
la ligne où les 2 conditions sont vrais. On connaît le tableau où
chercher la valeur, on
vient d'évaluer la ligne = 4 et on la colonne est 1 (si non mentionnée) ,
on est donc
capable d'extraire la valeur recherchée.
"daniel" a écrit dans le message de news:
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut
éclairer nos lanternes.....
|
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT|
|
("1:"&LIGNES($A$2:$A$11)))))
Habituellement, si on avait seulement un critère, on utiliserait, une
formule
de ce genre : Exemple :
=INDEX(Code;EQUIV(F1;Nom;0))
Dans cette formule, on a remplacé Equiv() par une formule
matricielle Sommeprod() pour déterminer la ligne où les
2 condtions étaient vrai. Dans le tableau, une seule entrée
répond aux 2 critères.
Avec 2 critères le sommeprod() va donner un tableau de vrai / faux pour
chacune des entrées du
tableau qui va tester
$A$2:$A$11á) * ($B$2:$B$11ñ)
Faux Faux = 0
Faux vrai = 0
Vrai Faux = 0
Vrai Vrai =1
Etc etc... pour chacune des lignes
Comme la valeur numérique de faux dans excel est 0
et la valeur numérique de Vrai est 1 , seules les entrées
dont les 2 colonnes égales vrai vont donner 1
Cette section de la formule :LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
retourne un tableau de numéro des lignes indiquées dans la plage
la premiière ligne est 1 et la dernière ligne est 10 (LIGNES($A$2:$A$11))
Pour tester cela, sélectionne 10 lignes dans une même colonne, entre la
formule
et valide par Ctrl + Maj + Enter ... chacune des cellules indiquera un
chiffre de
1 à 10. (la plage à 10 lignes)
Si je multiplie le résultat obtenu par la première partie de la formule
par le
numéro de la ligne, j'obtiens :
0 * 1 = 0
0 * 2 = 0
0 * 3 = 0
1 * 4 = 4
Le chiffre 4 devient la valeur retournée par sommeprod() qui est en fait
le deuxième
argument de la fonction Index(Tableau,Ligne,Colonne). La ligne 4 est par
conséquent
la ligne où les 2 conditions sont vrais. On connaît le tableau où
chercher la valeur, on
vient d'évaluer la ligne = 4 et on la colonne est 1 (si non mentionnée) ,
on est donc
capable d'extraire la valeur recherchée.
"daniel" <novice@neuf.fr> a écrit dans le message de news:
eUMLfdFEHHA.4952@TK2MSFTNGP06.phx.gbl...
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut
éclairer nos lanternes.....
|
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT|
|
("1:"&LIGNES($A$2:$A$11)))))
Habituellement, si on avait seulement un critère, on utiliserait, une
formule
de ce genre : Exemple :
=INDEX(Code;EQUIV(F1;Nom;0))
Dans cette formule, on a remplacé Equiv() par une formule
matricielle Sommeprod() pour déterminer la ligne où les
2 condtions étaient vrai. Dans le tableau, une seule entrée
répond aux 2 critères.
Avec 2 critères le sommeprod() va donner un tableau de vrai / faux pour
chacune des entrées du
tableau qui va tester
$A$2:$A$11á) * ($B$2:$B$11ñ)
Faux Faux = 0
Faux vrai = 0
Vrai Faux = 0
Vrai Vrai =1
Etc etc... pour chacune des lignes
Comme la valeur numérique de faux dans excel est 0
et la valeur numérique de Vrai est 1 , seules les entrées
dont les 2 colonnes égales vrai vont donner 1
Cette section de la formule :LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
retourne un tableau de numéro des lignes indiquées dans la plage
la premiière ligne est 1 et la dernière ligne est 10 (LIGNES($A$2:$A$11))
Pour tester cela, sélectionne 10 lignes dans une même colonne, entre la
formule
et valide par Ctrl + Maj + Enter ... chacune des cellules indiquera un
chiffre de
1 à 10. (la plage à 10 lignes)
Si je multiplie le résultat obtenu par la première partie de la formule
par le
numéro de la ligne, j'obtiens :
0 * 1 = 0
0 * 2 = 0
0 * 3 = 0
1 * 4 = 4
Le chiffre 4 devient la valeur retournée par sommeprod() qui est en fait
le deuxième
argument de la fonction Index(Tableau,Ligne,Colonne). La ligne 4 est par
conséquent
la ligne où les 2 conditions sont vrais. On connaît le tableau où
chercher la valeur, on
vient d'évaluer la ligne = 4 et on la colonne est 1 (si non mentionnée) ,
on est donc
capable d'extraire la valeur recherchée.
"daniel" a écrit dans le message de news:
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut
éclairer nos lanternes.....
|
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT|
|
("1:"&LIGNES($A$2:$A$11)))))
Habituellement, si on avait seulement un critère, on utiliserait, une
formule
de ce genre : Exemple :
=INDEX(Code;EQUIV(F1;Nom;0))
Dans cette formule, on a remplacé Equiv() par une formule
matricielle Sommeprod() pour déterminer la ligne où les
2 condtions étaient vrai. Dans le tableau, une seule entrée
répond aux 2 critères.
Avec 2 critères le sommeprod() va donner un tableau de vrai / faux pour
chacune des entrées du
tableau qui va tester
$A$2:$A$11á) * ($B$2:$B$11ñ)
Faux Faux = 0
Faux vrai = 0
Vrai Faux = 0
Vrai Vrai =1
Etc etc... pour chacune des lignes
Comme la valeur numérique de faux dans excel est 0
et la valeur numérique de Vrai est 1 , seules les entrées
dont les 2 colonnes égales vrai vont donner 1
Cette section de la formule :LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
retourne un tableau de numéro des lignes indiquées dans la plage
la premiière ligne est 1 et la dernière ligne est 10 (LIGNES($A$2:$A$11))
Pour tester cela, sélectionne 10 lignes dans une même colonne, entre la
formule
et valide par Ctrl + Maj + Enter ... chacune des cellules indiquera un
chiffre de
1 à 10. (la plage à 10 lignes)
Si je multiplie le résultat obtenu par la première partie de la formule
par le
numéro de la ligne, j'obtiens :
0 * 1 = 0
0 * 2 = 0
0 * 3 = 0
1 * 4 = 4
Le chiffre 4 devient la valeur retournée par sommeprod() qui est en fait
le deuxième
argument de la fonction Index(Tableau,Ligne,Colonne). La ligne 4 est par
conséquent
la ligne où les 2 conditions sont vrais. On connaît le tableau où
chercher la valeur, on
vient d'évaluer la ligne = 4 et on la colonne est 1 (si non mentionnée) ,
on est donc
capable d'extraire la valeur recherchée.
"daniel" a écrit dans le message de news:
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut
éclairer nos lanternes.....
|
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT|
|
("1:"&LIGNES($A$2:$A$11)))))
Habituellement, si on avait seulement un critère, on utiliserait, une
formule
de ce genre : Exemple :
=INDEX(Code;EQUIV(F1;Nom;0))
Dans cette formule, on a remplacé Equiv() par une formule
matricielle Sommeprod() pour déterminer la ligne où les
2 condtions étaient vrai. Dans le tableau, une seule entrée
répond aux 2 critères.
Avec 2 critères le sommeprod() va donner un tableau de vrai / faux pour
chacune des entrées du
tableau qui va tester
$A$2:$A$11á) * ($B$2:$B$11ñ)
Faux Faux = 0
Faux vrai = 0
Vrai Faux = 0
Vrai Vrai =1
Etc etc... pour chacune des lignes
Comme la valeur numérique de faux dans excel est 0
et la valeur numérique de Vrai est 1 , seules les entrées
dont les 2 colonnes égales vrai vont donner 1
Cette section de la formule :LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
retourne un tableau de numéro des lignes indiquées dans la plage
la premiière ligne est 1 et la dernière ligne est 10 (LIGNES($A$2:$A$11))
Pour tester cela, sélectionne 10 lignes dans une même colonne, entre la
formule
et valide par Ctrl + Maj + Enter ... chacune des cellules indiquera un
chiffre de
1 à 10. (la plage à 10 lignes)
Si je multiplie le résultat obtenu par la première partie de la formule
par le
numéro de la ligne, j'obtiens :
0 * 1 = 0
0 * 2 = 0
0 * 3 = 0
1 * 4 = 4
Le chiffre 4 devient la valeur retournée par sommeprod() qui est en fait
le deuxième
argument de la fonction Index(Tableau,Ligne,Colonne). La ligne 4 est par
conséquent
la ligne où les 2 conditions sont vrais. On connaît le tableau où
chercher la valeur, on
vient d'évaluer la ligne = 4 et on la colonne est 1 (si non mentionnée) ,
on est donc
capable d'extraire la valeur recherchée.
"daniel" <novice@neuf.fr> a écrit dans le message de news:
eUMLfdFEHHA.4952@TK2MSFTNGP06.phx.gbl...
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut
éclairer nos lanternes.....
|
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT|
|
("1:"&LIGNES($A$2:$A$11)))))
Habituellement, si on avait seulement un critère, on utiliserait, une
formule
de ce genre : Exemple :
=INDEX(Code;EQUIV(F1;Nom;0))
Dans cette formule, on a remplacé Equiv() par une formule
matricielle Sommeprod() pour déterminer la ligne où les
2 condtions étaient vrai. Dans le tableau, une seule entrée
répond aux 2 critères.
Avec 2 critères le sommeprod() va donner un tableau de vrai / faux pour
chacune des entrées du
tableau qui va tester
$A$2:$A$11á) * ($B$2:$B$11ñ)
Faux Faux = 0
Faux vrai = 0
Vrai Faux = 0
Vrai Vrai =1
Etc etc... pour chacune des lignes
Comme la valeur numérique de faux dans excel est 0
et la valeur numérique de Vrai est 1 , seules les entrées
dont les 2 colonnes égales vrai vont donner 1
Cette section de la formule :LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
retourne un tableau de numéro des lignes indiquées dans la plage
la premiière ligne est 1 et la dernière ligne est 10 (LIGNES($A$2:$A$11))
Pour tester cela, sélectionne 10 lignes dans une même colonne, entre la
formule
et valide par Ctrl + Maj + Enter ... chacune des cellules indiquera un
chiffre de
1 à 10. (la plage à 10 lignes)
Si je multiplie le résultat obtenu par la première partie de la formule
par le
numéro de la ligne, j'obtiens :
0 * 1 = 0
0 * 2 = 0
0 * 3 = 0
1 * 4 = 4
Le chiffre 4 devient la valeur retournée par sommeprod() qui est en fait
le deuxième
argument de la fonction Index(Tableau,Ligne,Colonne). La ligne 4 est par
conséquent
la ligne où les 2 conditions sont vrais. On connaît le tableau où
chercher la valeur, on
vient d'évaluer la ligne = 4 et on la colonne est 1 (si non mentionnée) ,
on est donc
capable d'extraire la valeur recherchée.
"daniel" a écrit dans le message de news:
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut
éclairer nos lanternes.....
Bonjour Paul,
Tu as bien fait d'intervenir... on est jamais trop à essayer
d'expliquer ces formules...ceux et celles qui veulent faire
un effort seront bien servis...encore que les explications
ne sont pas nécessairement très explicites pour les non initiés.
Bon matin !
"Paul V" a écrit dans le message de news:
Mer2,
J'étais pas le seul à ne plus dormir.
Salut MichDenis, si j'avais su, j'aurais pas venu.
T'as tout bien dit et en plus concis que moi.
A+
Paul V
"MichDenis" a écrit dans le message de news:|
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT|
|
("1:"&LIGNES($A$2:$A$11)))))
Habituellement, si on avait seulement un critère, on utiliserait, une
formule
de ce genre : Exemple :
=INDEX(Code;EQUIV(F1;Nom;0))
Dans cette formule, on a remplacé Equiv() par une formule
matricielle Sommeprod() pour déterminer la ligne où les
2 condtions étaient vrai. Dans le tableau, une seule entrée
répond aux 2 critères.
Avec 2 critères le sommeprod() va donner un tableau de vrai / faux pour
chacune des entrées du
tableau qui va tester
$A$2:$A$11á) * ($B$2:$B$11ñ)
Faux Faux = 0
Faux vrai = 0
Vrai Faux = 0
Vrai Vrai =1
Etc etc... pour chacune des lignes
Comme la valeur numérique de faux dans excel est 0
et la valeur numérique de Vrai est 1 , seules les entrées
dont les 2 colonnes égales vrai vont donner 1
Cette section de la formule :LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
retourne un tableau de numéro des lignes indiquées dans la plage
la premiière ligne est 1 et la dernière ligne est 10
(LIGNES($A$2:$A$11))
Pour tester cela, sélectionne 10 lignes dans une même colonne, entre la
formule
et valide par Ctrl + Maj + Enter ... chacune des cellules indiquera un
chiffre de
1 à 10. (la plage à 10 lignes)
Si je multiplie le résultat obtenu par la première partie de la formule
par le
numéro de la ligne, j'obtiens :
0 * 1 = 0
0 * 2 = 0
0 * 3 = 0
1 * 4 = 4
Le chiffre 4 devient la valeur retournée par sommeprod() qui est en fait
le deuxième
argument de la fonction Index(Tableau,Ligne,Colonne). La ligne 4 est par
conséquent
la ligne où les 2 conditions sont vrais. On connaît le tableau où
chercher la valeur, on
vient d'évaluer la ligne = 4 et on la colonne est 1 (si non mentionnée) ,
on est donc
capable d'extraire la valeur recherchée.
"daniel" a écrit dans le message de news:
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut
éclairer nos lanternes.....
Bonjour Paul,
Tu as bien fait d'intervenir... on est jamais trop à essayer
d'expliquer ces formules...ceux et celles qui veulent faire
un effort seront bien servis...encore que les explications
ne sont pas nécessairement très explicites pour les non initiés.
Bon matin !
"Paul V" <nobody@home.ir> a écrit dans le message de news:
eUtsZLIEHHA.4508@TK2MSFTNGP02.phx.gbl...
Mer2,
J'étais pas le seul à ne plus dormir.
Salut MichDenis, si j'avais su, j'aurais pas venu.
T'as tout bien dit et en plus concis que moi.
A+
Paul V
"MichDenis" <michdenis@hotmail.com> a écrit dans le message de news:
uJCmOFIEHHA.4312@TK2MSFTNGP06.phx.gbl...
|
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT|
|
("1:"&LIGNES($A$2:$A$11)))))
Habituellement, si on avait seulement un critère, on utiliserait, une
formule
de ce genre : Exemple :
=INDEX(Code;EQUIV(F1;Nom;0))
Dans cette formule, on a remplacé Equiv() par une formule
matricielle Sommeprod() pour déterminer la ligne où les
2 condtions étaient vrai. Dans le tableau, une seule entrée
répond aux 2 critères.
Avec 2 critères le sommeprod() va donner un tableau de vrai / faux pour
chacune des entrées du
tableau qui va tester
$A$2:$A$11á) * ($B$2:$B$11ñ)
Faux Faux = 0
Faux vrai = 0
Vrai Faux = 0
Vrai Vrai =1
Etc etc... pour chacune des lignes
Comme la valeur numérique de faux dans excel est 0
et la valeur numérique de Vrai est 1 , seules les entrées
dont les 2 colonnes égales vrai vont donner 1
Cette section de la formule :LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
retourne un tableau de numéro des lignes indiquées dans la plage
la premiière ligne est 1 et la dernière ligne est 10
(LIGNES($A$2:$A$11))
Pour tester cela, sélectionne 10 lignes dans une même colonne, entre la
formule
et valide par Ctrl + Maj + Enter ... chacune des cellules indiquera un
chiffre de
1 à 10. (la plage à 10 lignes)
Si je multiplie le résultat obtenu par la première partie de la formule
par le
numéro de la ligne, j'obtiens :
0 * 1 = 0
0 * 2 = 0
0 * 3 = 0
1 * 4 = 4
Le chiffre 4 devient la valeur retournée par sommeprod() qui est en fait
le deuxième
argument de la fonction Index(Tableau,Ligne,Colonne). La ligne 4 est par
conséquent
la ligne où les 2 conditions sont vrais. On connaît le tableau où
chercher la valeur, on
vient d'évaluer la ligne = 4 et on la colonne est 1 (si non mentionnée) ,
on est donc
capable d'extraire la valeur recherchée.
"daniel" <novice@neuf.fr> a écrit dans le message de news:
eUMLfdFEHHA.4952@TK2MSFTNGP06.phx.gbl...
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut
éclairer nos lanternes.....
Bonjour Paul,
Tu as bien fait d'intervenir... on est jamais trop à essayer
d'expliquer ces formules...ceux et celles qui veulent faire
un effort seront bien servis...encore que les explications
ne sont pas nécessairement très explicites pour les non initiés.
Bon matin !
"Paul V" a écrit dans le message de news:
Mer2,
J'étais pas le seul à ne plus dormir.
Salut MichDenis, si j'avais su, j'aurais pas venu.
T'as tout bien dit et en plus concis que moi.
A+
Paul V
"MichDenis" a écrit dans le message de news:|
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT|
|
("1:"&LIGNES($A$2:$A$11)))))
Habituellement, si on avait seulement un critère, on utiliserait, une
formule
de ce genre : Exemple :
=INDEX(Code;EQUIV(F1;Nom;0))
Dans cette formule, on a remplacé Equiv() par une formule
matricielle Sommeprod() pour déterminer la ligne où les
2 condtions étaient vrai. Dans le tableau, une seule entrée
répond aux 2 critères.
Avec 2 critères le sommeprod() va donner un tableau de vrai / faux pour
chacune des entrées du
tableau qui va tester
$A$2:$A$11á) * ($B$2:$B$11ñ)
Faux Faux = 0
Faux vrai = 0
Vrai Faux = 0
Vrai Vrai =1
Etc etc... pour chacune des lignes
Comme la valeur numérique de faux dans excel est 0
et la valeur numérique de Vrai est 1 , seules les entrées
dont les 2 colonnes égales vrai vont donner 1
Cette section de la formule :LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
retourne un tableau de numéro des lignes indiquées dans la plage
la premiière ligne est 1 et la dernière ligne est 10
(LIGNES($A$2:$A$11))
Pour tester cela, sélectionne 10 lignes dans une même colonne, entre la
formule
et valide par Ctrl + Maj + Enter ... chacune des cellules indiquera un
chiffre de
1 à 10. (la plage à 10 lignes)
Si je multiplie le résultat obtenu par la première partie de la formule
par le
numéro de la ligne, j'obtiens :
0 * 1 = 0
0 * 2 = 0
0 * 3 = 0
1 * 4 = 4
Le chiffre 4 devient la valeur retournée par sommeprod() qui est en fait
le deuxième
argument de la fonction Index(Tableau,Ligne,Colonne). La ligne 4 est par
conséquent
la ligne où les 2 conditions sont vrais. On connaît le tableau où
chercher la valeur, on
vient d'évaluer la ligne = 4 et on la colonne est 1 (si non mentionnée) ,
on est donc
capable d'extraire la valeur recherchée.
"daniel" a écrit dans le message de news:
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut
éclairer nos lanternes.....
J'oubliais, si le formuliste de service avait été disponible...
(les lendemains de veille sont toujours pénibles) il aurait
sûrement proposé une formule de ce type ce qui n'aurait
pas arrangé les choses quant à la compréhension .....;-))
Mais c'est un peu plus court...
c'est pour smilsdslick ... tu sais ce que je veux dire ? ;-))))
Validation matrielle : Maj + Ctrl + Enter
=INDEX(Code;EQUIV(E1&F1;Type&Nom;0))
"Paul V" a écrit dans le message de news:
Mer2,
J'étais pas le seul à ne plus dormir.
Salut MichDenis, si j'avais su, j'aurais pas venu.
T'as tout bien dit et en plus concis que moi.
A+
Paul V
"MichDenis" a écrit dans le message de news:|
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT|
|
("1:"&LIGNES($A$2:$A$11)))))
Habituellement, si on avait seulement un critère, on utiliserait, une
formule
de ce genre : Exemple :
=INDEX(Code;EQUIV(F1;Nom;0))
Dans cette formule, on a remplacé Equiv() par une formule
matricielle Sommeprod() pour déterminer la ligne où les
2 condtions étaient vrai. Dans le tableau, une seule entrée
répond aux 2 critères.
Avec 2 critères le sommeprod() va donner un tableau de vrai / faux pour
chacune des entrées du
tableau qui va tester
$A$2:$A$11á) * ($B$2:$B$11ñ)
Faux Faux = 0
Faux vrai = 0
Vrai Faux = 0
Vrai Vrai =1
Etc etc... pour chacune des lignes
Comme la valeur numérique de faux dans excel est 0
et la valeur numérique de Vrai est 1 , seules les entrées
dont les 2 colonnes égales vrai vont donner 1
Cette section de la formule :LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
retourne un tableau de numéro des lignes indiquées dans la plage
la premiière ligne est 1 et la dernière ligne est 10
(LIGNES($A$2:$A$11))
Pour tester cela, sélectionne 10 lignes dans une même colonne, entre la
formule
et valide par Ctrl + Maj + Enter ... chacune des cellules indiquera un
chiffre de
1 à 10. (la plage à 10 lignes)
Si je multiplie le résultat obtenu par la première partie de la formule
par le
numéro de la ligne, j'obtiens :
0 * 1 = 0
0 * 2 = 0
0 * 3 = 0
1 * 4 = 4
Le chiffre 4 devient la valeur retournée par sommeprod() qui est en fait
le deuxième
argument de la fonction Index(Tableau,Ligne,Colonne). La ligne 4 est par
conséquent
la ligne où les 2 conditions sont vrais. On connaît le tableau où
chercher la valeur, on
vient d'évaluer la ligne = 4 et on la colonne est 1 (si non mentionnée) ,
on est donc
capable d'extraire la valeur recherchée.
"daniel" a écrit dans le message de news:
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut
éclairer nos lanternes.....
J'oubliais, si le formuliste de service avait été disponible...
(les lendemains de veille sont toujours pénibles) il aurait
sûrement proposé une formule de ce type ce qui n'aurait
pas arrangé les choses quant à la compréhension .....;-))
Mais c'est un peu plus court...
c'est pour smilsdslick ... tu sais ce que je veux dire ? ;-))))
Validation matrielle : Maj + Ctrl + Enter
=INDEX(Code;EQUIV(E1&F1;Type&Nom;0))
"Paul V" <nobody@home.ir> a écrit dans le message de news:
eUtsZLIEHHA.4508@TK2MSFTNGP02.phx.gbl...
Mer2,
J'étais pas le seul à ne plus dormir.
Salut MichDenis, si j'avais su, j'aurais pas venu.
T'as tout bien dit et en plus concis que moi.
A+
Paul V
"MichDenis" <michdenis@hotmail.com> a écrit dans le message de news:
uJCmOFIEHHA.4312@TK2MSFTNGP06.phx.gbl...
|
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT|
|
("1:"&LIGNES($A$2:$A$11)))))
Habituellement, si on avait seulement un critère, on utiliserait, une
formule
de ce genre : Exemple :
=INDEX(Code;EQUIV(F1;Nom;0))
Dans cette formule, on a remplacé Equiv() par une formule
matricielle Sommeprod() pour déterminer la ligne où les
2 condtions étaient vrai. Dans le tableau, une seule entrée
répond aux 2 critères.
Avec 2 critères le sommeprod() va donner un tableau de vrai / faux pour
chacune des entrées du
tableau qui va tester
$A$2:$A$11á) * ($B$2:$B$11ñ)
Faux Faux = 0
Faux vrai = 0
Vrai Faux = 0
Vrai Vrai =1
Etc etc... pour chacune des lignes
Comme la valeur numérique de faux dans excel est 0
et la valeur numérique de Vrai est 1 , seules les entrées
dont les 2 colonnes égales vrai vont donner 1
Cette section de la formule :LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
retourne un tableau de numéro des lignes indiquées dans la plage
la premiière ligne est 1 et la dernière ligne est 10
(LIGNES($A$2:$A$11))
Pour tester cela, sélectionne 10 lignes dans une même colonne, entre la
formule
et valide par Ctrl + Maj + Enter ... chacune des cellules indiquera un
chiffre de
1 à 10. (la plage à 10 lignes)
Si je multiplie le résultat obtenu par la première partie de la formule
par le
numéro de la ligne, j'obtiens :
0 * 1 = 0
0 * 2 = 0
0 * 3 = 0
1 * 4 = 4
Le chiffre 4 devient la valeur retournée par sommeprod() qui est en fait
le deuxième
argument de la fonction Index(Tableau,Ligne,Colonne). La ligne 4 est par
conséquent
la ligne où les 2 conditions sont vrais. On connaît le tableau où
chercher la valeur, on
vient d'évaluer la ligne = 4 et on la colonne est 1 (si non mentionnée) ,
on est donc
capable d'extraire la valeur recherchée.
"daniel" <novice@neuf.fr> a écrit dans le message de news:
eUMLfdFEHHA.4952@TK2MSFTNGP06.phx.gbl...
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut
éclairer nos lanternes.....
J'oubliais, si le formuliste de service avait été disponible...
(les lendemains de veille sont toujours pénibles) il aurait
sûrement proposé une formule de ce type ce qui n'aurait
pas arrangé les choses quant à la compréhension .....;-))
Mais c'est un peu plus court...
c'est pour smilsdslick ... tu sais ce que je veux dire ? ;-))))
Validation matrielle : Maj + Ctrl + Enter
=INDEX(Code;EQUIV(E1&F1;Type&Nom;0))
"Paul V" a écrit dans le message de news:
Mer2,
J'étais pas le seul à ne plus dormir.
Salut MichDenis, si j'avais su, j'aurais pas venu.
T'as tout bien dit et en plus concis que moi.
A+
Paul V
"MichDenis" a écrit dans le message de news:|
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT|
|
("1:"&LIGNES($A$2:$A$11)))))
Habituellement, si on avait seulement un critère, on utiliserait, une
formule
de ce genre : Exemple :
=INDEX(Code;EQUIV(F1;Nom;0))
Dans cette formule, on a remplacé Equiv() par une formule
matricielle Sommeprod() pour déterminer la ligne où les
2 condtions étaient vrai. Dans le tableau, une seule entrée
répond aux 2 critères.
Avec 2 critères le sommeprod() va donner un tableau de vrai / faux pour
chacune des entrées du
tableau qui va tester
$A$2:$A$11á) * ($B$2:$B$11ñ)
Faux Faux = 0
Faux vrai = 0
Vrai Faux = 0
Vrai Vrai =1
Etc etc... pour chacune des lignes
Comme la valeur numérique de faux dans excel est 0
et la valeur numérique de Vrai est 1 , seules les entrées
dont les 2 colonnes égales vrai vont donner 1
Cette section de la formule :LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
retourne un tableau de numéro des lignes indiquées dans la plage
la premiière ligne est 1 et la dernière ligne est 10
(LIGNES($A$2:$A$11))
Pour tester cela, sélectionne 10 lignes dans une même colonne, entre la
formule
et valide par Ctrl + Maj + Enter ... chacune des cellules indiquera un
chiffre de
1 à 10. (la plage à 10 lignes)
Si je multiplie le résultat obtenu par la première partie de la formule
par le
numéro de la ligne, j'obtiens :
0 * 1 = 0
0 * 2 = 0
0 * 3 = 0
1 * 4 = 4
Le chiffre 4 devient la valeur retournée par sommeprod() qui est en fait
le deuxième
argument de la fonction Index(Tableau,Ligne,Colonne). La ligne 4 est par
conséquent
la ligne où les 2 conditions sont vrais. On connaît le tableau où
chercher la valeur, on
vient d'évaluer la ligne = 4 et on la colonne est 1 (si non mentionnée) ,
on est donc
capable d'extraire la valeur recherchée.
"daniel" a écrit dans le message de news:
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut
éclairer nos lanternes.....
Bravo, brillantissime.
He oui, cela me rappelle le style de notre champion des formules, toutes
catégories.
Lundi, à son réveil, il va en tomber à la renverse d'émotion.
A+
Paul V
"MichDenis" a écrit dans le message de news:
%232fp$J'oubliais, si le formuliste de service avait été disponible...
(les lendemains de veille sont toujours pénibles) il aurait
sûrement proposé une formule de ce type ce qui n'aurait
pas arrangé les choses quant à la compréhension .....;-))
Mais c'est un peu plus court...
c'est pour smilsdslick ... tu sais ce que je veux dire ? ;-))))
Validation matrielle : Maj + Ctrl + Enter
=INDEX(Code;EQUIV(E1&F1;Type&Nom;0))
"Paul V" a écrit dans le message de news:
Mer2,
J'étais pas le seul à ne plus dormir.
Salut MichDenis, si j'avais su, j'aurais pas venu.
T'as tout bien dit et en plus concis que moi.
A+
Paul V
"MichDenis" a écrit dans le message de news:|
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT|
|
("1:"&LIGNES($A$2:$A$11)))))
Habituellement, si on avait seulement un critère, on utiliserait, une
formule
de ce genre : Exemple :
=INDEX(Code;EQUIV(F1;Nom;0))
Dans cette formule, on a remplacé Equiv() par une formule
matricielle Sommeprod() pour déterminer la ligne où les
2 condtions étaient vrai. Dans le tableau, une seule entrée
répond aux 2 critères.
Avec 2 critères le sommeprod() va donner un tableau de vrai / faux pour
chacune des entrées du
tableau qui va tester
$A$2:$A$11á) * ($B$2:$B$11ñ)
Faux Faux = 0
Faux vrai = 0
Vrai Faux = 0
Vrai Vrai =1
Etc etc... pour chacune des lignes
Comme la valeur numérique de faux dans excel est 0
et la valeur numérique de Vrai est 1 , seules les entrées
dont les 2 colonnes égales vrai vont donner 1
Cette section de la formule :LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
retourne un tableau de numéro des lignes indiquées dans la plage
la premiière ligne est 1 et la dernière ligne est 10
(LIGNES($A$2:$A$11))
Pour tester cela, sélectionne 10 lignes dans une même colonne, entre la
formule
et valide par Ctrl + Maj + Enter ... chacune des cellules indiquera un
chiffre de
1 à 10. (la plage à 10 lignes)
Si je multiplie le résultat obtenu par la première partie de la formule
par le
numéro de la ligne, j'obtiens :
0 * 1 = 0
0 * 2 = 0
0 * 3 = 0
1 * 4 = 4
Le chiffre 4 devient la valeur retournée par sommeprod() qui est en fait
le deuxième
argument de la fonction Index(Tableau,Ligne,Colonne). La ligne 4 est par
conséquent
la ligne où les 2 conditions sont vrais. On connaît le tableau où
chercher la valeur, on
vient d'évaluer la ligne = 4 et on la colonne est 1 (si non mentionnée)
,
on est donc
capable d'extraire la valeur recherchée.
"daniel" a écrit dans le message de news:
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut
éclairer nos lanternes.....
Bravo, brillantissime.
He oui, cela me rappelle le style de notre champion des formules, toutes
catégories.
Lundi, à son réveil, il va en tomber à la renverse d'émotion.
A+
Paul V
"MichDenis" <michdenis@hotmail.com> a écrit dans le message de news:
%232fp$aIEHHA.572@TK2MSFTNGP03.phx.gbl...
J'oubliais, si le formuliste de service avait été disponible...
(les lendemains de veille sont toujours pénibles) il aurait
sûrement proposé une formule de ce type ce qui n'aurait
pas arrangé les choses quant à la compréhension .....;-))
Mais c'est un peu plus court...
c'est pour smilsdslick ... tu sais ce que je veux dire ? ;-))))
Validation matrielle : Maj + Ctrl + Enter
=INDEX(Code;EQUIV(E1&F1;Type&Nom;0))
"Paul V" <nobody@home.ir> a écrit dans le message de news:
eUtsZLIEHHA.4508@TK2MSFTNGP02.phx.gbl...
Mer2,
J'étais pas le seul à ne plus dormir.
Salut MichDenis, si j'avais su, j'aurais pas venu.
T'as tout bien dit et en plus concis que moi.
A+
Paul V
"MichDenis" <michdenis@hotmail.com> a écrit dans le message de news:
uJCmOFIEHHA.4312@TK2MSFTNGP06.phx.gbl...
|
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT|
|
("1:"&LIGNES($A$2:$A$11)))))
Habituellement, si on avait seulement un critère, on utiliserait, une
formule
de ce genre : Exemple :
=INDEX(Code;EQUIV(F1;Nom;0))
Dans cette formule, on a remplacé Equiv() par une formule
matricielle Sommeprod() pour déterminer la ligne où les
2 condtions étaient vrai. Dans le tableau, une seule entrée
répond aux 2 critères.
Avec 2 critères le sommeprod() va donner un tableau de vrai / faux pour
chacune des entrées du
tableau qui va tester
$A$2:$A$11á) * ($B$2:$B$11ñ)
Faux Faux = 0
Faux vrai = 0
Vrai Faux = 0
Vrai Vrai =1
Etc etc... pour chacune des lignes
Comme la valeur numérique de faux dans excel est 0
et la valeur numérique de Vrai est 1 , seules les entrées
dont les 2 colonnes égales vrai vont donner 1
Cette section de la formule :LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
retourne un tableau de numéro des lignes indiquées dans la plage
la premiière ligne est 1 et la dernière ligne est 10
(LIGNES($A$2:$A$11))
Pour tester cela, sélectionne 10 lignes dans une même colonne, entre la
formule
et valide par Ctrl + Maj + Enter ... chacune des cellules indiquera un
chiffre de
1 à 10. (la plage à 10 lignes)
Si je multiplie le résultat obtenu par la première partie de la formule
par le
numéro de la ligne, j'obtiens :
0 * 1 = 0
0 * 2 = 0
0 * 3 = 0
1 * 4 = 4
Le chiffre 4 devient la valeur retournée par sommeprod() qui est en fait
le deuxième
argument de la fonction Index(Tableau,Ligne,Colonne). La ligne 4 est par
conséquent
la ligne où les 2 conditions sont vrais. On connaît le tableau où
chercher la valeur, on
vient d'évaluer la ligne = 4 et on la colonne est 1 (si non mentionnée)
,
on est donc
capable d'extraire la valeur recherchée.
"daniel" <novice@neuf.fr> a écrit dans le message de news:
eUMLfdFEHHA.4952@TK2MSFTNGP06.phx.gbl...
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut
éclairer nos lanternes.....
Bravo, brillantissime.
He oui, cela me rappelle le style de notre champion des formules, toutes
catégories.
Lundi, à son réveil, il va en tomber à la renverse d'émotion.
A+
Paul V
"MichDenis" a écrit dans le message de news:
%232fp$J'oubliais, si le formuliste de service avait été disponible...
(les lendemains de veille sont toujours pénibles) il aurait
sûrement proposé une formule de ce type ce qui n'aurait
pas arrangé les choses quant à la compréhension .....;-))
Mais c'est un peu plus court...
c'est pour smilsdslick ... tu sais ce que je veux dire ? ;-))))
Validation matrielle : Maj + Ctrl + Enter
=INDEX(Code;EQUIV(E1&F1;Type&Nom;0))
"Paul V" a écrit dans le message de news:
Mer2,
J'étais pas le seul à ne plus dormir.
Salut MichDenis, si j'avais su, j'aurais pas venu.
T'as tout bien dit et en plus concis que moi.
A+
Paul V
"MichDenis" a écrit dans le message de news:|
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT|
|
("1:"&LIGNES($A$2:$A$11)))))
Habituellement, si on avait seulement un critère, on utiliserait, une
formule
de ce genre : Exemple :
=INDEX(Code;EQUIV(F1;Nom;0))
Dans cette formule, on a remplacé Equiv() par une formule
matricielle Sommeprod() pour déterminer la ligne où les
2 condtions étaient vrai. Dans le tableau, une seule entrée
répond aux 2 critères.
Avec 2 critères le sommeprod() va donner un tableau de vrai / faux pour
chacune des entrées du
tableau qui va tester
$A$2:$A$11á) * ($B$2:$B$11ñ)
Faux Faux = 0
Faux vrai = 0
Vrai Faux = 0
Vrai Vrai =1
Etc etc... pour chacune des lignes
Comme la valeur numérique de faux dans excel est 0
et la valeur numérique de Vrai est 1 , seules les entrées
dont les 2 colonnes égales vrai vont donner 1
Cette section de la formule :LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
retourne un tableau de numéro des lignes indiquées dans la plage
la premiière ligne est 1 et la dernière ligne est 10
(LIGNES($A$2:$A$11))
Pour tester cela, sélectionne 10 lignes dans une même colonne, entre la
formule
et valide par Ctrl + Maj + Enter ... chacune des cellules indiquera un
chiffre de
1 à 10. (la plage à 10 lignes)
Si je multiplie le résultat obtenu par la première partie de la formule
par le
numéro de la ligne, j'obtiens :
0 * 1 = 0
0 * 2 = 0
0 * 3 = 0
1 * 4 = 4
Le chiffre 4 devient la valeur retournée par sommeprod() qui est en fait
le deuxième
argument de la fonction Index(Tableau,Ligne,Colonne). La ligne 4 est par
conséquent
la ligne où les 2 conditions sont vrais. On connaît le tableau où
chercher la valeur, on
vient d'évaluer la ligne = 4 et on la colonne est 1 (si non mentionnée)
,
on est donc
capable d'extraire la valeur recherchée.
"daniel" a écrit dans le message de news:
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut
éclairer nos lanternes.....
J'oubliais, si le formuliste de service avait été disponible...
(les lendemains de veille sont toujours pénibles) il aurait
sûrement proposé une formule de ce type ce qui n'aurait
pas arrangé les choses quant à la compréhension .....;-))
Mais c'est un peu plus court...
c'est pour smilsdslick ... tu sais ce que je veux dire ? ;-))))
Validation matrielle : Maj + Ctrl + Enter
=INDEX(Code;EQUIV(E1&F1;Type&Nom;0))
"Paul V" a écrit dans le message de news:
Mer2,
J'étais pas le seul à ne plus dormir.
Salut MichDenis, si j'avais su, j'aurais pas venu.
T'as tout bien dit et en plus concis que moi.
A+
Paul V
"MichDenis" a écrit dans le message de news:|
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT|
|
("1:"&LIGNES($A$2:$A$11)))))
Habituellement, si on avait seulement un critère, on utiliserait, une
formule
de ce genre : Exemple :
=INDEX(Code;EQUIV(F1;Nom;0))
Dans cette formule, on a remplacé Equiv() par une formule
matricielle Sommeprod() pour déterminer la ligne où les
2 condtions étaient vrai. Dans le tableau, une seule entrée
répond aux 2 critères.
Avec 2 critères le sommeprod() va donner un tableau de vrai / faux pour
chacune des entrées du
tableau qui va tester
$A$2:$A$11á) * ($B$2:$B$11ñ)
Faux Faux = 0
Faux vrai = 0
Vrai Faux = 0
Vrai Vrai =1
Etc etc... pour chacune des lignes
Comme la valeur numérique de faux dans excel est 0
et la valeur numérique de Vrai est 1 , seules les entrées
dont les 2 colonnes égales vrai vont donner 1
Cette section de la formule :LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
retourne un tableau de numéro des lignes indiquées dans la plage
la premiière ligne est 1 et la dernière ligne est 10
(LIGNES($A$2:$A$11))
Pour tester cela, sélectionne 10 lignes dans une même colonne, entre la
formule
et valide par Ctrl + Maj + Enter ... chacune des cellules indiquera un
chiffre de
1 à 10. (la plage à 10 lignes)
Si je multiplie le résultat obtenu par la première partie de la formule
par le
numéro de la ligne, j'obtiens :
0 * 1 = 0
0 * 2 = 0
0 * 3 = 0
1 * 4 = 4
Le chiffre 4 devient la valeur retournée par sommeprod() qui est en fait
le deuxième
argument de la fonction Index(Tableau,Ligne,Colonne). La ligne 4 est par
conséquent
la ligne où les 2 conditions sont vrais. On connaît le tableau où
chercher la valeur, on
vient d'évaluer la ligne = 4 et on la colonne est 1 (si non mentionnée) ,
on est donc
capable d'extraire la valeur recherchée.
"daniel" a écrit dans le message de news:
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut
éclairer nos lanternes.....
J'oubliais, si le formuliste de service avait été disponible...
(les lendemains de veille sont toujours pénibles) il aurait
sûrement proposé une formule de ce type ce qui n'aurait
pas arrangé les choses quant à la compréhension .....;-))
Mais c'est un peu plus court...
c'est pour smilsdslick ... tu sais ce que je veux dire ? ;-))))
Validation matrielle : Maj + Ctrl + Enter
=INDEX(Code;EQUIV(E1&F1;Type&Nom;0))
"Paul V" <nobody@home.ir> a écrit dans le message de news:
eUtsZLIEHHA.4508@TK2MSFTNGP02.phx.gbl...
Mer2,
J'étais pas le seul à ne plus dormir.
Salut MichDenis, si j'avais su, j'aurais pas venu.
T'as tout bien dit et en plus concis que moi.
A+
Paul V
"MichDenis" <michdenis@hotmail.com> a écrit dans le message de news:
uJCmOFIEHHA.4312@TK2MSFTNGP06.phx.gbl...
|
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT|
|
("1:"&LIGNES($A$2:$A$11)))))
Habituellement, si on avait seulement un critère, on utiliserait, une
formule
de ce genre : Exemple :
=INDEX(Code;EQUIV(F1;Nom;0))
Dans cette formule, on a remplacé Equiv() par une formule
matricielle Sommeprod() pour déterminer la ligne où les
2 condtions étaient vrai. Dans le tableau, une seule entrée
répond aux 2 critères.
Avec 2 critères le sommeprod() va donner un tableau de vrai / faux pour
chacune des entrées du
tableau qui va tester
$A$2:$A$11á) * ($B$2:$B$11ñ)
Faux Faux = 0
Faux vrai = 0
Vrai Faux = 0
Vrai Vrai =1
Etc etc... pour chacune des lignes
Comme la valeur numérique de faux dans excel est 0
et la valeur numérique de Vrai est 1 , seules les entrées
dont les 2 colonnes égales vrai vont donner 1
Cette section de la formule :LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
retourne un tableau de numéro des lignes indiquées dans la plage
la premiière ligne est 1 et la dernière ligne est 10
(LIGNES($A$2:$A$11))
Pour tester cela, sélectionne 10 lignes dans une même colonne, entre la
formule
et valide par Ctrl + Maj + Enter ... chacune des cellules indiquera un
chiffre de
1 à 10. (la plage à 10 lignes)
Si je multiplie le résultat obtenu par la première partie de la formule
par le
numéro de la ligne, j'obtiens :
0 * 1 = 0
0 * 2 = 0
0 * 3 = 0
1 * 4 = 4
Le chiffre 4 devient la valeur retournée par sommeprod() qui est en fait
le deuxième
argument de la fonction Index(Tableau,Ligne,Colonne). La ligne 4 est par
conséquent
la ligne où les 2 conditions sont vrais. On connaît le tableau où
chercher la valeur, on
vient d'évaluer la ligne = 4 et on la colonne est 1 (si non mentionnée) ,
on est donc
capable d'extraire la valeur recherchée.
"daniel" <novice@neuf.fr> a écrit dans le message de news:
eUMLfdFEHHA.4952@TK2MSFTNGP06.phx.gbl...
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut
éclairer nos lanternes.....
J'oubliais, si le formuliste de service avait été disponible...
(les lendemains de veille sont toujours pénibles) il aurait
sûrement proposé une formule de ce type ce qui n'aurait
pas arrangé les choses quant à la compréhension .....;-))
Mais c'est un peu plus court...
c'est pour smilsdslick ... tu sais ce que je veux dire ? ;-))))
Validation matrielle : Maj + Ctrl + Enter
=INDEX(Code;EQUIV(E1&F1;Type&Nom;0))
"Paul V" a écrit dans le message de news:
Mer2,
J'étais pas le seul à ne plus dormir.
Salut MichDenis, si j'avais su, j'aurais pas venu.
T'as tout bien dit et en plus concis que moi.
A+
Paul V
"MichDenis" a écrit dans le message de news:|
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT|
|
("1:"&LIGNES($A$2:$A$11)))))
Habituellement, si on avait seulement un critère, on utiliserait, une
formule
de ce genre : Exemple :
=INDEX(Code;EQUIV(F1;Nom;0))
Dans cette formule, on a remplacé Equiv() par une formule
matricielle Sommeprod() pour déterminer la ligne où les
2 condtions étaient vrai. Dans le tableau, une seule entrée
répond aux 2 critères.
Avec 2 critères le sommeprod() va donner un tableau de vrai / faux pour
chacune des entrées du
tableau qui va tester
$A$2:$A$11á) * ($B$2:$B$11ñ)
Faux Faux = 0
Faux vrai = 0
Vrai Faux = 0
Vrai Vrai =1
Etc etc... pour chacune des lignes
Comme la valeur numérique de faux dans excel est 0
et la valeur numérique de Vrai est 1 , seules les entrées
dont les 2 colonnes égales vrai vont donner 1
Cette section de la formule :LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
retourne un tableau de numéro des lignes indiquées dans la plage
la premiière ligne est 1 et la dernière ligne est 10
(LIGNES($A$2:$A$11))
Pour tester cela, sélectionne 10 lignes dans une même colonne, entre la
formule
et valide par Ctrl + Maj + Enter ... chacune des cellules indiquera un
chiffre de
1 à 10. (la plage à 10 lignes)
Si je multiplie le résultat obtenu par la première partie de la formule
par le
numéro de la ligne, j'obtiens :
0 * 1 = 0
0 * 2 = 0
0 * 3 = 0
1 * 4 = 4
Le chiffre 4 devient la valeur retournée par sommeprod() qui est en fait
le deuxième
argument de la fonction Index(Tableau,Ligne,Colonne). La ligne 4 est par
conséquent
la ligne où les 2 conditions sont vrais. On connaît le tableau où
chercher la valeur, on
vient d'évaluer la ligne = 4 et on la colonne est 1 (si non mentionnée) ,
on est donc
capable d'extraire la valeur recherchée.
"daniel" a écrit dans le message de news:
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut
éclairer nos lanternes.....
T'as tout bien dit et en plus concis que moi.
Hello à tous,
Comme je suis le seul crack ( ;-) ) réveillé ou à l'écoute, je vais essayer
de vous expliquer mùais il va falloir s'accrocher car tant que l'on a pas
compris, on a vachement l'impression d'avoir du vide à la place du cerveau.
Notez que cela tombe bien que l'on soit samedi car cela vous laisse le
week-end pour vous appliquer.
Sans vouloir être arrogant, j'apprécierais que quelques uns me disent si
l'explication est claire car je ne suis pas sur d'arriver à tout bien
expliquer.
Bref, on y va.
D'abord, il faut remarquer que la formule récupérée par Daniel fonctionne
mais n'est pas indispensable ici. Elle était sans doute mieux adaptée là ou
il l'a récupérée mais elle ne se justifie pas réellement (AMHA) ici.
Les deux formules ci-dessous fontionnerait tout aussi bien et serait plus
"adaptées"
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&NBVAL(Code)))))
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:10"))))
Mais ce sera peut-être plus clair quand vous serez au bout de ce texte (du
moins, je l'espère)
Comme je ne vois pas trop ou cela coince, j'analyse toute la formule. Que
ceux qui maîtise les notions que je parcours, skipe sans vergogne à la
suite.
Tout d'abord INDEX qui me permet d'aller chercher dans une matrice une
valeur à un certain endroit.
La matrice est le preùmier argument ($C$2:$C$11)
L'endroit est le deuxième argument
(SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11))))
Cela c'est pas trop compliqué sauf qu'il faut comprendre pourquoi ce
deuxième argument donne la valeur 4 qui est la position du code recherché.
Ensuite SOMMEPROD
Comme chacun le sait maintenant, SOMMEPROD, à la grande surprise de ces
concepteurs, est une fonction qui fait des choses imprévues à l'origine.
SOMMEPROD à l'origine est prévue pour "traiter" des matrices entre elles
afin d'obtenir la somme des produits.
C'est d'ailleurs ce que l'on trouve dans l'aide
"Multiplie les valeurs correspondantes des matrices spécifiées et calcule la
somme de ces produits."
Des petits malins ont découverts que cette fonction faisiat bien d'autres
choses et entre autre avantage, effectue donc un calcul matriciel sans
devoir valider comme les autres calculs matriciels.
Donc dans une fonction SOMEMPROD, le système parcourt toutes les matrices et
"engrange" au passage les résultats des différents traitements pour donner
en finale le résultat de l'ensemble.
Dans notre exemple la fonction :
=SOMMEPROD((Typeá)*1) donne 2 comme résultat. Pourquoi?
Le système parcourt la plage "type" , vérifie si la valeur est vrai ou
fausse ou en d'autres mots si la valeur est 1 (vrai) ou 0 (fausse) et
mulpiplie par 1 chaque résultat
Le calcul détaillé est donc pour la plage "Type" qui va de A2 à A11
A2á * 1 ou encore faux *1 ou encore 0 *1 ce qui fait 0
plus
A3á * 1 ou encore faux *1 ou encore 0 *1 ce qui fait 0
Et ainsi de suite pour passer par
A5á * 1 ou encore vrai *1 ou encore 1 *1 ce qui fait 1
Comme deux cellule sont égales à E, le total fera donc deux.
Si on combine plusieurs conditions, la logique est la même:
Exemple toujours dans le même tableau
=SOMMEPROD((Typeá)*(Nomñ)) donne 1 car il y a une seule cellule dans
type égale à E en même temps que une cellule en Nom = F1
On peut ainsi multiplier les combinaisons (quasi ) à l'inffini
Normalement, à ce stade ci, cela devrait être clair pour la première partie
du deuxième argument de la fonction originale.
Il ne reste plus que ce fameux LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
Passons rapidement sur Ligne et Lignes, la première donnant la ligne de la
plage, la deuxième de nombre de lignes de la plage.
LIGNES($A$2:$A$11) renvoie donc le nombre de lignes de la plage càd ici 10.
Ceci explique maintenant pourquoi on pouvait simplisier la formule en
remplaçant LIGNES($A$2:$A$11))) par 10 ou par NBVAL(A2:A11) dans notre
exemple puisque la plage est fixe. (Pour les super cracks qui se gondolent
en me lisant, je suis d'accord que ce point pourrait être discuté, mais au
lieu de vous gondoler, vous feriez mieux de faire ce pensum à ma place ;-)
Je fatigue déjà un peu, et si vous voulez ma place, prenez la, moi je vais
promener au bois, il fait tellement beau aujourd'hui que je ne comprends pas
e que je fais devant mon PC)
Il ne reste qu'INDIRECT et l'ensemble.:
Indirect est aussi une fonction qui a un peu échappé à ses concepteurs.
A l'origine, indirect renvoie la référence inscrite dans une chaine de
caractère (en gros)
Mais son fonctionnement interne est très particulier et surprenant.
Si vous introsuisez, par exemple INDIRECT("1:10") dans une formule
matricielle, le système va créer un vecteur vertical "VIRTUEL" avec toutes
les valeurs de 1 à 10 et donc si cette formule est incluse dans un
sommeprod, il va traiter toutes les valeurs du vecteurs comme si c'était une
matrice existante.
Exemple: =SOMMEPROD(LIGNE(INDIRECT("1:10"))) donne 55 càd la somme des
numéro de ligne DANS LE VECTEUR VIRTUEL créé par indirect("1:10") soit
1+2+3+4+5+6+7+8+9+10
Je vous avait prévenu, c'était pas de la tarte. Vous suivez toujours?
Si c'est pas clair ( je vois d'ici vos yeux équarquillés donc je me permets
d'insister; Ceux qui ont pigé, passez tout de suite à la case suivante sans
passer par le parloir de la prison)
Si c'est pas clair, imaginer donc un vecteur virtuel vertical càd "un
morceau de colonne" dans un classeur qui n'existe que dans la mémoire de
votre PC qui est complèté avec toutes les valeurs de 1 à 10 soit 1,2,3,
etc...
Chaque valeur est donc à une certain numéro de ligne dans ce classeur
virtuel et Sommeprod fait l'addition de ces numéros de ligne.
Ceci étant dit et les choses étant ce qu'elles sont, terminons maintenant
notre analyse.
Dans :
(SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11))))
la dernière partie va créer avec indirect un "vecteur virtuel vertical"
composé du nombres de valeurs comprises de 1 au nombres de lignes composant
la plage A2:A11 soit de 1 à 10 soit 10 donc un "vecteur vertical virtuel" de
10 cellules.
Sommeprod vas prendre la première ligne des trois conditions càd "A2 est-il
égal à E "(dans l'exmple non donc valeur 0) multiplié par "B2 est-il égal à
F1" (non donc valeur 0) multiplié par le numéro de ligne de la première
cellule du "vecteur vertical virtuel" (dans l'exmple 1); Le résultat de
cette multiplication est bien sur 0 puisqu'au moins un des facteurs est égal
à 0. A cela Somme prod ajoute le résultat de la deuxième ligne, qui donne
aussi valeur 0.
Il n'y a qu'une ligne ou les deux conditions sont remplies donc 1*1
multiplié par la ligne de la cellule correspondante dans le "VVV" (pour
vecteur virtuel vertical) c'est la quatrième ligne. Dans le VVV le numéro de
la ligne est donc 4 et 1*1*4=4
Toutes les autres lignes étant agales à 0, le total est bien 4.
Ce 4 est donc récupéré pour aller cherche la 4ème position dans la plage
couverte par index et on a donc le code correct.
Queceux qui ont compris lève le doigt.
A+
PAul V
"daniel" a écrit dans le message de news:bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut éclairer nos lanternes.....
T'as tout bien dit et en plus concis que moi.
Hello à tous,
Comme je suis le seul crack ( ;-) ) réveillé ou à l'écoute, je vais essayer
de vous expliquer mùais il va falloir s'accrocher car tant que l'on a pas
compris, on a vachement l'impression d'avoir du vide à la place du cerveau.
Notez que cela tombe bien que l'on soit samedi car cela vous laisse le
week-end pour vous appliquer.
Sans vouloir être arrogant, j'apprécierais que quelques uns me disent si
l'explication est claire car je ne suis pas sur d'arriver à tout bien
expliquer.
Bref, on y va.
D'abord, il faut remarquer que la formule récupérée par Daniel fonctionne
mais n'est pas indispensable ici. Elle était sans doute mieux adaptée là ou
il l'a récupérée mais elle ne se justifie pas réellement (AMHA) ici.
Les deux formules ci-dessous fontionnerait tout aussi bien et serait plus
"adaptées"
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&NBVAL(Code)))))
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:10"))))
Mais ce sera peut-être plus clair quand vous serez au bout de ce texte (du
moins, je l'espère)
Comme je ne vois pas trop ou cela coince, j'analyse toute la formule. Que
ceux qui maîtise les notions que je parcours, skipe sans vergogne à la
suite.
Tout d'abord INDEX qui me permet d'aller chercher dans une matrice une
valeur à un certain endroit.
La matrice est le preùmier argument ($C$2:$C$11)
L'endroit est le deuxième argument
(SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11))))
Cela c'est pas trop compliqué sauf qu'il faut comprendre pourquoi ce
deuxième argument donne la valeur 4 qui est la position du code recherché.
Ensuite SOMMEPROD
Comme chacun le sait maintenant, SOMMEPROD, à la grande surprise de ces
concepteurs, est une fonction qui fait des choses imprévues à l'origine.
SOMMEPROD à l'origine est prévue pour "traiter" des matrices entre elles
afin d'obtenir la somme des produits.
C'est d'ailleurs ce que l'on trouve dans l'aide
"Multiplie les valeurs correspondantes des matrices spécifiées et calcule la
somme de ces produits."
Des petits malins ont découverts que cette fonction faisiat bien d'autres
choses et entre autre avantage, effectue donc un calcul matriciel sans
devoir valider comme les autres calculs matriciels.
Donc dans une fonction SOMEMPROD, le système parcourt toutes les matrices et
"engrange" au passage les résultats des différents traitements pour donner
en finale le résultat de l'ensemble.
Dans notre exemple la fonction :
=SOMMEPROD((Typeá)*1) donne 2 comme résultat. Pourquoi?
Le système parcourt la plage "type" , vérifie si la valeur est vrai ou
fausse ou en d'autres mots si la valeur est 1 (vrai) ou 0 (fausse) et
mulpiplie par 1 chaque résultat
Le calcul détaillé est donc pour la plage "Type" qui va de A2 à A11
A2á * 1 ou encore faux *1 ou encore 0 *1 ce qui fait 0
plus
A3á * 1 ou encore faux *1 ou encore 0 *1 ce qui fait 0
Et ainsi de suite pour passer par
A5á * 1 ou encore vrai *1 ou encore 1 *1 ce qui fait 1
Comme deux cellule sont égales à E, le total fera donc deux.
Si on combine plusieurs conditions, la logique est la même:
Exemple toujours dans le même tableau
=SOMMEPROD((Typeá)*(Nomñ)) donne 1 car il y a une seule cellule dans
type égale à E en même temps que une cellule en Nom = F1
On peut ainsi multiplier les combinaisons (quasi ) à l'inffini
Normalement, à ce stade ci, cela devrait être clair pour la première partie
du deuxième argument de la fonction originale.
Il ne reste plus que ce fameux LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
Passons rapidement sur Ligne et Lignes, la première donnant la ligne de la
plage, la deuxième de nombre de lignes de la plage.
LIGNES($A$2:$A$11) renvoie donc le nombre de lignes de la plage càd ici 10.
Ceci explique maintenant pourquoi on pouvait simplisier la formule en
remplaçant LIGNES($A$2:$A$11))) par 10 ou par NBVAL(A2:A11) dans notre
exemple puisque la plage est fixe. (Pour les super cracks qui se gondolent
en me lisant, je suis d'accord que ce point pourrait être discuté, mais au
lieu de vous gondoler, vous feriez mieux de faire ce pensum à ma place ;-)
Je fatigue déjà un peu, et si vous voulez ma place, prenez la, moi je vais
promener au bois, il fait tellement beau aujourd'hui que je ne comprends pas
e que je fais devant mon PC)
Il ne reste qu'INDIRECT et l'ensemble.:
Indirect est aussi une fonction qui a un peu échappé à ses concepteurs.
A l'origine, indirect renvoie la référence inscrite dans une chaine de
caractère (en gros)
Mais son fonctionnement interne est très particulier et surprenant.
Si vous introsuisez, par exemple INDIRECT("1:10") dans une formule
matricielle, le système va créer un vecteur vertical "VIRTUEL" avec toutes
les valeurs de 1 à 10 et donc si cette formule est incluse dans un
sommeprod, il va traiter toutes les valeurs du vecteurs comme si c'était une
matrice existante.
Exemple: =SOMMEPROD(LIGNE(INDIRECT("1:10"))) donne 55 càd la somme des
numéro de ligne DANS LE VECTEUR VIRTUEL créé par indirect("1:10") soit
1+2+3+4+5+6+7+8+9+10
Je vous avait prévenu, c'était pas de la tarte. Vous suivez toujours?
Si c'est pas clair ( je vois d'ici vos yeux équarquillés donc je me permets
d'insister; Ceux qui ont pigé, passez tout de suite à la case suivante sans
passer par le parloir de la prison)
Si c'est pas clair, imaginer donc un vecteur virtuel vertical càd "un
morceau de colonne" dans un classeur qui n'existe que dans la mémoire de
votre PC qui est complèté avec toutes les valeurs de 1 à 10 soit 1,2,3,
etc...
Chaque valeur est donc à une certain numéro de ligne dans ce classeur
virtuel et Sommeprod fait l'addition de ces numéros de ligne.
Ceci étant dit et les choses étant ce qu'elles sont, terminons maintenant
notre analyse.
Dans :
(SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11))))
la dernière partie va créer avec indirect un "vecteur virtuel vertical"
composé du nombres de valeurs comprises de 1 au nombres de lignes composant
la plage A2:A11 soit de 1 à 10 soit 10 donc un "vecteur vertical virtuel" de
10 cellules.
Sommeprod vas prendre la première ligne des trois conditions càd "A2 est-il
égal à E "(dans l'exmple non donc valeur 0) multiplié par "B2 est-il égal à
F1" (non donc valeur 0) multiplié par le numéro de ligne de la première
cellule du "vecteur vertical virtuel" (dans l'exmple 1); Le résultat de
cette multiplication est bien sur 0 puisqu'au moins un des facteurs est égal
à 0. A cela Somme prod ajoute le résultat de la deuxième ligne, qui donne
aussi valeur 0.
Il n'y a qu'une ligne ou les deux conditions sont remplies donc 1*1
multiplié par la ligne de la cellule correspondante dans le "VVV" (pour
vecteur virtuel vertical) c'est la quatrième ligne. Dans le VVV le numéro de
la ligne est donc 4 et 1*1*4=4
Toutes les autres lignes étant agales à 0, le total est bien 4.
Ce 4 est donc récupéré pour aller cherche la 4ème position dans la plage
couverte par index et on a donc le code correct.
Queceux qui ont compris lève le doigt.
A+
PAul V
"daniel" <novice@neuf.fr> a écrit dans le message de news:
eUMLfdFEHHA.4952@TK2MSFTNGP06.phx.gbl...
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut éclairer nos lanternes.....
T'as tout bien dit et en plus concis que moi.
Hello à tous,
Comme je suis le seul crack ( ;-) ) réveillé ou à l'écoute, je vais essayer
de vous expliquer mùais il va falloir s'accrocher car tant que l'on a pas
compris, on a vachement l'impression d'avoir du vide à la place du cerveau.
Notez que cela tombe bien que l'on soit samedi car cela vous laisse le
week-end pour vous appliquer.
Sans vouloir être arrogant, j'apprécierais que quelques uns me disent si
l'explication est claire car je ne suis pas sur d'arriver à tout bien
expliquer.
Bref, on y va.
D'abord, il faut remarquer que la formule récupérée par Daniel fonctionne
mais n'est pas indispensable ici. Elle était sans doute mieux adaptée là ou
il l'a récupérée mais elle ne se justifie pas réellement (AMHA) ici.
Les deux formules ci-dessous fontionnerait tout aussi bien et serait plus
"adaptées"
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&NBVAL(Code)))))
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:10"))))
Mais ce sera peut-être plus clair quand vous serez au bout de ce texte (du
moins, je l'espère)
Comme je ne vois pas trop ou cela coince, j'analyse toute la formule. Que
ceux qui maîtise les notions que je parcours, skipe sans vergogne à la
suite.
Tout d'abord INDEX qui me permet d'aller chercher dans une matrice une
valeur à un certain endroit.
La matrice est le preùmier argument ($C$2:$C$11)
L'endroit est le deuxième argument
(SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11))))
Cela c'est pas trop compliqué sauf qu'il faut comprendre pourquoi ce
deuxième argument donne la valeur 4 qui est la position du code recherché.
Ensuite SOMMEPROD
Comme chacun le sait maintenant, SOMMEPROD, à la grande surprise de ces
concepteurs, est une fonction qui fait des choses imprévues à l'origine.
SOMMEPROD à l'origine est prévue pour "traiter" des matrices entre elles
afin d'obtenir la somme des produits.
C'est d'ailleurs ce que l'on trouve dans l'aide
"Multiplie les valeurs correspondantes des matrices spécifiées et calcule la
somme de ces produits."
Des petits malins ont découverts que cette fonction faisiat bien d'autres
choses et entre autre avantage, effectue donc un calcul matriciel sans
devoir valider comme les autres calculs matriciels.
Donc dans une fonction SOMEMPROD, le système parcourt toutes les matrices et
"engrange" au passage les résultats des différents traitements pour donner
en finale le résultat de l'ensemble.
Dans notre exemple la fonction :
=SOMMEPROD((Typeá)*1) donne 2 comme résultat. Pourquoi?
Le système parcourt la plage "type" , vérifie si la valeur est vrai ou
fausse ou en d'autres mots si la valeur est 1 (vrai) ou 0 (fausse) et
mulpiplie par 1 chaque résultat
Le calcul détaillé est donc pour la plage "Type" qui va de A2 à A11
A2á * 1 ou encore faux *1 ou encore 0 *1 ce qui fait 0
plus
A3á * 1 ou encore faux *1 ou encore 0 *1 ce qui fait 0
Et ainsi de suite pour passer par
A5á * 1 ou encore vrai *1 ou encore 1 *1 ce qui fait 1
Comme deux cellule sont égales à E, le total fera donc deux.
Si on combine plusieurs conditions, la logique est la même:
Exemple toujours dans le même tableau
=SOMMEPROD((Typeá)*(Nomñ)) donne 1 car il y a une seule cellule dans
type égale à E en même temps que une cellule en Nom = F1
On peut ainsi multiplier les combinaisons (quasi ) à l'inffini
Normalement, à ce stade ci, cela devrait être clair pour la première partie
du deuxième argument de la fonction originale.
Il ne reste plus que ce fameux LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))
Passons rapidement sur Ligne et Lignes, la première donnant la ligne de la
plage, la deuxième de nombre de lignes de la plage.
LIGNES($A$2:$A$11) renvoie donc le nombre de lignes de la plage càd ici 10.
Ceci explique maintenant pourquoi on pouvait simplisier la formule en
remplaçant LIGNES($A$2:$A$11))) par 10 ou par NBVAL(A2:A11) dans notre
exemple puisque la plage est fixe. (Pour les super cracks qui se gondolent
en me lisant, je suis d'accord que ce point pourrait être discuté, mais au
lieu de vous gondoler, vous feriez mieux de faire ce pensum à ma place ;-)
Je fatigue déjà un peu, et si vous voulez ma place, prenez la, moi je vais
promener au bois, il fait tellement beau aujourd'hui que je ne comprends pas
e que je fais devant mon PC)
Il ne reste qu'INDIRECT et l'ensemble.:
Indirect est aussi une fonction qui a un peu échappé à ses concepteurs.
A l'origine, indirect renvoie la référence inscrite dans une chaine de
caractère (en gros)
Mais son fonctionnement interne est très particulier et surprenant.
Si vous introsuisez, par exemple INDIRECT("1:10") dans une formule
matricielle, le système va créer un vecteur vertical "VIRTUEL" avec toutes
les valeurs de 1 à 10 et donc si cette formule est incluse dans un
sommeprod, il va traiter toutes les valeurs du vecteurs comme si c'était une
matrice existante.
Exemple: =SOMMEPROD(LIGNE(INDIRECT("1:10"))) donne 55 càd la somme des
numéro de ligne DANS LE VECTEUR VIRTUEL créé par indirect("1:10") soit
1+2+3+4+5+6+7+8+9+10
Je vous avait prévenu, c'était pas de la tarte. Vous suivez toujours?
Si c'est pas clair ( je vois d'ici vos yeux équarquillés donc je me permets
d'insister; Ceux qui ont pigé, passez tout de suite à la case suivante sans
passer par le parloir de la prison)
Si c'est pas clair, imaginer donc un vecteur virtuel vertical càd "un
morceau de colonne" dans un classeur qui n'existe que dans la mémoire de
votre PC qui est complèté avec toutes les valeurs de 1 à 10 soit 1,2,3,
etc...
Chaque valeur est donc à une certain numéro de ligne dans ce classeur
virtuel et Sommeprod fait l'addition de ces numéros de ligne.
Ceci étant dit et les choses étant ce qu'elles sont, terminons maintenant
notre analyse.
Dans :
(SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11))))
la dernière partie va créer avec indirect un "vecteur virtuel vertical"
composé du nombres de valeurs comprises de 1 au nombres de lignes composant
la plage A2:A11 soit de 1 à 10 soit 10 donc un "vecteur vertical virtuel" de
10 cellules.
Sommeprod vas prendre la première ligne des trois conditions càd "A2 est-il
égal à E "(dans l'exmple non donc valeur 0) multiplié par "B2 est-il égal à
F1" (non donc valeur 0) multiplié par le numéro de ligne de la première
cellule du "vecteur vertical virtuel" (dans l'exmple 1); Le résultat de
cette multiplication est bien sur 0 puisqu'au moins un des facteurs est égal
à 0. A cela Somme prod ajoute le résultat de la deuxième ligne, qui donne
aussi valeur 0.
Il n'y a qu'une ligne ou les deux conditions sont remplies donc 1*1
multiplié par la ligne de la cellule correspondante dans le "VVV" (pour
vecteur virtuel vertical) c'est la quatrième ligne. Dans le VVV le numéro de
la ligne est donc 4 et 1*1*4=4
Toutes les autres lignes étant agales à 0, le total est bien 4.
Ce 4 est donc récupéré pour aller cherche la 4ème position dans la plage
couverte par index et on a donc le code correct.
Queceux qui ont compris lève le doigt.
A+
PAul V
"daniel" a écrit dans le message de news:bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un crack
peut éclairer nos lanternes.....
Hello à tous,
Comme je suis le seul crack ( ;-) ) réveillé ou à l'écoute, je vais
essayer de vous expliquer mùais il va falloir s'accrocher car tant
que l'on a pas compris, on a vachement l'impression d'avoir du vide à
la place du cerveau.
Notez que cela tombe bien que l'on soit samedi car cela vous laisse le
week-end pour vous appliquer.
Sans vouloir être arrogant, j'apprécierais que quelques uns me disent
si l'explication est claire car je ne suis pas sur d'arriver à tout
bien expliquer.
Bref, on y va.
D'abord, il faut remarquer que la formule récupérée par Daniel
fonctionne mais n'est pas indispensable ici. Elle était sans doute
mieux adaptée là ou il l'a récupérée mais elle ne se justifie pas
réellement (AMHA) ici. Les deux formules ci-dessous fontionnerait tout
aussi bien et serait
plus "adaptées"
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&NBVAL(Code)))))
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:10"))))
Mais ce sera peut-être plus clair quand vous serez au bout de ce
texte (du moins, je l'espère)
Comme je ne vois pas trop ou cela coince, j'analyse toute la formule.
Que ceux qui maîtise les notions que je parcours, skipe sans vergogne
à la suite.
Tout d'abord INDEX qui me permet d'aller chercher dans une matrice une
valeur à un certain endroit.
La matrice est le preùmier argument ($C$2:$C$11)
L'endroit est le deuxième argument
(SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11))))
Cela c'est pas trop compliqué sauf qu'il faut comprendre pourquoi ce
deuxième argument donne la valeur 4 qui est la position du code
recherché.
Ensuite SOMMEPROD
Comme chacun le sait maintenant, SOMMEPROD, à la grande surprise de
ces concepteurs, est une fonction qui fait des choses imprévues à
l'origine. SOMMEPROD à l'origine est prévue pour "traiter" des
matrices entre elles afin d'obtenir la somme des produits.
C'est d'ailleurs ce que l'on trouve dans l'aide
"Multiplie les valeurs correspondantes des matrices spécifiées et
calcule la somme de ces produits."
Des petits malins ont découverts que cette fonction faisiat bien
d'autres choses et entre autre avantage, effectue donc un calcul
matriciel sans devoir valider comme les autres calculs matriciels.
Donc dans une fonction SOMEMPROD, le système parcourt toutes les
matrices et "engrange" au passage les résultats des différents
traitements pour donner en finale le résultat de l'ensemble.
Dans notre exemple la fonction :
=SOMMEPROD((Typeá)*1) donne 2 comme résultat. Pourquoi?
Le système parcourt la plage "type" , vérifie si la valeur est vrai ou
fausse ou en d'autres mots si la valeur est 1 (vrai) ou 0 (fausse) et
mulpiplie par 1 chaque résultat
Le calcul détaillé est donc pour la plage "Type" qui va de A2 à A11
A2á * 1 ou encore faux *1 ou encore 0 *1 ce qui fait 0
plus
A3á * 1 ou encore faux *1 ou encore 0 *1 ce qui fait 0
Et ainsi de suite pour passer par
A5á * 1 ou encore vrai *1 ou encore 1 *1 ce qui fait 1
Comme deux cellule sont égales à E, le total fera donc deux.
Si on combine plusieurs conditions, la logique est la même:
Exemple toujours dans le même tableau
=SOMMEPROD((Typeá)*(Nomñ)) donne 1 car il y a une seule cellule
dans type égale à E en même temps que une cellule en Nom = F1
On peut ainsi multiplier les combinaisons (quasi ) à l'inffini
Normalement, à ce stade ci, cela devrait être clair pour la première
partie du deuxième argument de la fonction originale.
Il ne reste plus que ce fameux
LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11))) Passons rapidement sur Ligne
et Lignes, la première donnant la ligne de la plage, la deuxième de
nombre de lignes de la plage. LIGNES($A$2:$A$11) renvoie donc le nombre de
lignes de la plage càd
ici 10. Ceci explique maintenant pourquoi on pouvait simplisier la
formule en remplaçant LIGNES($A$2:$A$11))) par 10 ou par
NBVAL(A2:A11) dans notre exemple puisque la plage est fixe. (Pour les
super cracks qui se gondolent en me lisant, je suis d'accord que ce
point pourrait être discuté, mais au lieu de vous gondoler, vous
feriez mieux de faire ce pensum à ma place ;-) Je fatigue déjà un
peu, et si vous voulez ma place, prenez la, moi je vais promener au
bois, il fait tellement beau aujourd'hui que je ne comprends pas e
que je fais devant mon PC)
Il ne reste qu'INDIRECT et l'ensemble.:
Indirect est aussi une fonction qui a un peu échappé à ses
concepteurs. A l'origine, indirect renvoie la référence inscrite dans une
chaine de
caractère (en gros)
Mais son fonctionnement interne est très particulier et surprenant.
Si vous introsuisez, par exemple INDIRECT("1:10") dans une formule
matricielle, le système va créer un vecteur vertical "VIRTUEL" avec
toutes les valeurs de 1 à 10 et donc si cette formule est incluse
dans un sommeprod, il va traiter toutes les valeurs du vecteurs comme
si c'était une matrice existante.
Exemple: =SOMMEPROD(LIGNE(INDIRECT("1:10"))) donne 55 càd la somme des
numéro de ligne DANS LE VECTEUR VIRTUEL créé par indirect("1:10") soit
1+2+3+4+5+6+7+8+9+10
Je vous avait prévenu, c'était pas de la tarte. Vous suivez toujours?
Si c'est pas clair ( je vois d'ici vos yeux équarquillés donc je me
permets d'insister; Ceux qui ont pigé, passez tout de suite à la case
suivante sans passer par le parloir de la prison)
Si c'est pas clair, imaginer donc un vecteur virtuel vertical càd "un
morceau de colonne" dans un classeur qui n'existe que dans la mémoire
de votre PC qui est complèté avec toutes les valeurs de 1 à 10 soit
1,2,3, etc...
Chaque valeur est donc à une certain numéro de ligne dans ce classeur
virtuel et Sommeprod fait l'addition de ces numéros de ligne.
Ceci étant dit et les choses étant ce qu'elles sont, terminons
maintenant notre analyse.
Dans :
(SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11))))
la dernière partie va créer avec indirect un "vecteur virtuel
vertical" composé du nombres de valeurs comprises de 1 au nombres de
lignes composant la plage A2:A11 soit de 1 à 10 soit 10 donc un
"vecteur vertical virtuel" de 10 cellules.
Sommeprod vas prendre la première ligne des trois conditions càd "A2
est-il égal à E "(dans l'exmple non donc valeur 0) multiplié par "B2
est-il égal à F1" (non donc valeur 0) multiplié par le numéro de
ligne de la première cellule du "vecteur vertical virtuel" (dans
l'exmple 1); Le résultat de cette multiplication est bien sur 0
puisqu'au moins un des facteurs est égal à 0. A cela Somme prod
ajoute le résultat de la deuxième ligne, qui donne aussi valeur 0.
Il n'y a qu'une ligne ou les deux conditions sont remplies donc 1*1
multiplié par la ligne de la cellule correspondante dans le "VVV"
(pour vecteur virtuel vertical) c'est la quatrième ligne. Dans le VVV
le numéro de la ligne est donc 4 et 1*1*4=4
Toutes les autres lignes étant agales à 0, le total est bien 4.
Ce 4 est donc récupéré pour aller cherche la 4ème position dans la
plage couverte par index et on a donc le code correct.
Queceux qui ont compris lève le doigt.
A+
PAul V
"daniel" a écrit dans le message de news:bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un
crack peut éclairer nos lanternes.....
Hello à tous,
Comme je suis le seul crack ( ;-) ) réveillé ou à l'écoute, je vais
essayer de vous expliquer mùais il va falloir s'accrocher car tant
que l'on a pas compris, on a vachement l'impression d'avoir du vide à
la place du cerveau.
Notez que cela tombe bien que l'on soit samedi car cela vous laisse le
week-end pour vous appliquer.
Sans vouloir être arrogant, j'apprécierais que quelques uns me disent
si l'explication est claire car je ne suis pas sur d'arriver à tout
bien expliquer.
Bref, on y va.
D'abord, il faut remarquer que la formule récupérée par Daniel
fonctionne mais n'est pas indispensable ici. Elle était sans doute
mieux adaptée là ou il l'a récupérée mais elle ne se justifie pas
réellement (AMHA) ici. Les deux formules ci-dessous fontionnerait tout
aussi bien et serait
plus "adaptées"
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&NBVAL(Code)))))
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:10"))))
Mais ce sera peut-être plus clair quand vous serez au bout de ce
texte (du moins, je l'espère)
Comme je ne vois pas trop ou cela coince, j'analyse toute la formule.
Que ceux qui maîtise les notions que je parcours, skipe sans vergogne
à la suite.
Tout d'abord INDEX qui me permet d'aller chercher dans une matrice une
valeur à un certain endroit.
La matrice est le preùmier argument ($C$2:$C$11)
L'endroit est le deuxième argument
(SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11))))
Cela c'est pas trop compliqué sauf qu'il faut comprendre pourquoi ce
deuxième argument donne la valeur 4 qui est la position du code
recherché.
Ensuite SOMMEPROD
Comme chacun le sait maintenant, SOMMEPROD, à la grande surprise de
ces concepteurs, est une fonction qui fait des choses imprévues à
l'origine. SOMMEPROD à l'origine est prévue pour "traiter" des
matrices entre elles afin d'obtenir la somme des produits.
C'est d'ailleurs ce que l'on trouve dans l'aide
"Multiplie les valeurs correspondantes des matrices spécifiées et
calcule la somme de ces produits."
Des petits malins ont découverts que cette fonction faisiat bien
d'autres choses et entre autre avantage, effectue donc un calcul
matriciel sans devoir valider comme les autres calculs matriciels.
Donc dans une fonction SOMEMPROD, le système parcourt toutes les
matrices et "engrange" au passage les résultats des différents
traitements pour donner en finale le résultat de l'ensemble.
Dans notre exemple la fonction :
=SOMMEPROD((Typeá)*1) donne 2 comme résultat. Pourquoi?
Le système parcourt la plage "type" , vérifie si la valeur est vrai ou
fausse ou en d'autres mots si la valeur est 1 (vrai) ou 0 (fausse) et
mulpiplie par 1 chaque résultat
Le calcul détaillé est donc pour la plage "Type" qui va de A2 à A11
A2á * 1 ou encore faux *1 ou encore 0 *1 ce qui fait 0
plus
A3á * 1 ou encore faux *1 ou encore 0 *1 ce qui fait 0
Et ainsi de suite pour passer par
A5á * 1 ou encore vrai *1 ou encore 1 *1 ce qui fait 1
Comme deux cellule sont égales à E, le total fera donc deux.
Si on combine plusieurs conditions, la logique est la même:
Exemple toujours dans le même tableau
=SOMMEPROD((Typeá)*(Nomñ)) donne 1 car il y a une seule cellule
dans type égale à E en même temps que une cellule en Nom = F1
On peut ainsi multiplier les combinaisons (quasi ) à l'inffini
Normalement, à ce stade ci, cela devrait être clair pour la première
partie du deuxième argument de la fonction originale.
Il ne reste plus que ce fameux
LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11))) Passons rapidement sur Ligne
et Lignes, la première donnant la ligne de la plage, la deuxième de
nombre de lignes de la plage. LIGNES($A$2:$A$11) renvoie donc le nombre de
lignes de la plage càd
ici 10. Ceci explique maintenant pourquoi on pouvait simplisier la
formule en remplaçant LIGNES($A$2:$A$11))) par 10 ou par
NBVAL(A2:A11) dans notre exemple puisque la plage est fixe. (Pour les
super cracks qui se gondolent en me lisant, je suis d'accord que ce
point pourrait être discuté, mais au lieu de vous gondoler, vous
feriez mieux de faire ce pensum à ma place ;-) Je fatigue déjà un
peu, et si vous voulez ma place, prenez la, moi je vais promener au
bois, il fait tellement beau aujourd'hui que je ne comprends pas e
que je fais devant mon PC)
Il ne reste qu'INDIRECT et l'ensemble.:
Indirect est aussi une fonction qui a un peu échappé à ses
concepteurs. A l'origine, indirect renvoie la référence inscrite dans une
chaine de
caractère (en gros)
Mais son fonctionnement interne est très particulier et surprenant.
Si vous introsuisez, par exemple INDIRECT("1:10") dans une formule
matricielle, le système va créer un vecteur vertical "VIRTUEL" avec
toutes les valeurs de 1 à 10 et donc si cette formule est incluse
dans un sommeprod, il va traiter toutes les valeurs du vecteurs comme
si c'était une matrice existante.
Exemple: =SOMMEPROD(LIGNE(INDIRECT("1:10"))) donne 55 càd la somme des
numéro de ligne DANS LE VECTEUR VIRTUEL créé par indirect("1:10") soit
1+2+3+4+5+6+7+8+9+10
Je vous avait prévenu, c'était pas de la tarte. Vous suivez toujours?
Si c'est pas clair ( je vois d'ici vos yeux équarquillés donc je me
permets d'insister; Ceux qui ont pigé, passez tout de suite à la case
suivante sans passer par le parloir de la prison)
Si c'est pas clair, imaginer donc un vecteur virtuel vertical càd "un
morceau de colonne" dans un classeur qui n'existe que dans la mémoire
de votre PC qui est complèté avec toutes les valeurs de 1 à 10 soit
1,2,3, etc...
Chaque valeur est donc à une certain numéro de ligne dans ce classeur
virtuel et Sommeprod fait l'addition de ces numéros de ligne.
Ceci étant dit et les choses étant ce qu'elles sont, terminons
maintenant notre analyse.
Dans :
(SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11))))
la dernière partie va créer avec indirect un "vecteur virtuel
vertical" composé du nombres de valeurs comprises de 1 au nombres de
lignes composant la plage A2:A11 soit de 1 à 10 soit 10 donc un
"vecteur vertical virtuel" de 10 cellules.
Sommeprod vas prendre la première ligne des trois conditions càd "A2
est-il égal à E "(dans l'exmple non donc valeur 0) multiplié par "B2
est-il égal à F1" (non donc valeur 0) multiplié par le numéro de
ligne de la première cellule du "vecteur vertical virtuel" (dans
l'exmple 1); Le résultat de cette multiplication est bien sur 0
puisqu'au moins un des facteurs est égal à 0. A cela Somme prod
ajoute le résultat de la deuxième ligne, qui donne aussi valeur 0.
Il n'y a qu'une ligne ou les deux conditions sont remplies donc 1*1
multiplié par la ligne de la cellule correspondante dans le "VVV"
(pour vecteur virtuel vertical) c'est la quatrième ligne. Dans le VVV
le numéro de la ligne est donc 4 et 1*1*4=4
Toutes les autres lignes étant agales à 0, le total est bien 4.
Ce 4 est donc récupéré pour aller cherche la 4ème position dans la
plage couverte par index et on a donc le code correct.
Queceux qui ont compris lève le doigt.
A+
PAul V
"daniel" <novice@neuf.fr> a écrit dans le message de news:
eUMLfdFEHHA.4952@TK2MSFTNGP06.phx.gbl...
bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un
crack peut éclairer nos lanternes.....
Hello à tous,
Comme je suis le seul crack ( ;-) ) réveillé ou à l'écoute, je vais
essayer de vous expliquer mùais il va falloir s'accrocher car tant
que l'on a pas compris, on a vachement l'impression d'avoir du vide à
la place du cerveau.
Notez que cela tombe bien que l'on soit samedi car cela vous laisse le
week-end pour vous appliquer.
Sans vouloir être arrogant, j'apprécierais que quelques uns me disent
si l'explication est claire car je ne suis pas sur d'arriver à tout
bien expliquer.
Bref, on y va.
D'abord, il faut remarquer que la formule récupérée par Daniel
fonctionne mais n'est pas indispensable ici. Elle était sans doute
mieux adaptée là ou il l'a récupérée mais elle ne se justifie pas
réellement (AMHA) ici. Les deux formules ci-dessous fontionnerait tout
aussi bien et serait
plus "adaptées"
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&NBVAL(Code)))))
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:10"))))
Mais ce sera peut-être plus clair quand vous serez au bout de ce
texte (du moins, je l'espère)
Comme je ne vois pas trop ou cela coince, j'analyse toute la formule.
Que ceux qui maîtise les notions que je parcours, skipe sans vergogne
à la suite.
Tout d'abord INDEX qui me permet d'aller chercher dans une matrice une
valeur à un certain endroit.
La matrice est le preùmier argument ($C$2:$C$11)
L'endroit est le deuxième argument
(SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11))))
Cela c'est pas trop compliqué sauf qu'il faut comprendre pourquoi ce
deuxième argument donne la valeur 4 qui est la position du code
recherché.
Ensuite SOMMEPROD
Comme chacun le sait maintenant, SOMMEPROD, à la grande surprise de
ces concepteurs, est une fonction qui fait des choses imprévues à
l'origine. SOMMEPROD à l'origine est prévue pour "traiter" des
matrices entre elles afin d'obtenir la somme des produits.
C'est d'ailleurs ce que l'on trouve dans l'aide
"Multiplie les valeurs correspondantes des matrices spécifiées et
calcule la somme de ces produits."
Des petits malins ont découverts que cette fonction faisiat bien
d'autres choses et entre autre avantage, effectue donc un calcul
matriciel sans devoir valider comme les autres calculs matriciels.
Donc dans une fonction SOMEMPROD, le système parcourt toutes les
matrices et "engrange" au passage les résultats des différents
traitements pour donner en finale le résultat de l'ensemble.
Dans notre exemple la fonction :
=SOMMEPROD((Typeá)*1) donne 2 comme résultat. Pourquoi?
Le système parcourt la plage "type" , vérifie si la valeur est vrai ou
fausse ou en d'autres mots si la valeur est 1 (vrai) ou 0 (fausse) et
mulpiplie par 1 chaque résultat
Le calcul détaillé est donc pour la plage "Type" qui va de A2 à A11
A2á * 1 ou encore faux *1 ou encore 0 *1 ce qui fait 0
plus
A3á * 1 ou encore faux *1 ou encore 0 *1 ce qui fait 0
Et ainsi de suite pour passer par
A5á * 1 ou encore vrai *1 ou encore 1 *1 ce qui fait 1
Comme deux cellule sont égales à E, le total fera donc deux.
Si on combine plusieurs conditions, la logique est la même:
Exemple toujours dans le même tableau
=SOMMEPROD((Typeá)*(Nomñ)) donne 1 car il y a une seule cellule
dans type égale à E en même temps que une cellule en Nom = F1
On peut ainsi multiplier les combinaisons (quasi ) à l'inffini
Normalement, à ce stade ci, cela devrait être clair pour la première
partie du deuxième argument de la fonction originale.
Il ne reste plus que ce fameux
LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11))) Passons rapidement sur Ligne
et Lignes, la première donnant la ligne de la plage, la deuxième de
nombre de lignes de la plage. LIGNES($A$2:$A$11) renvoie donc le nombre de
lignes de la plage càd
ici 10. Ceci explique maintenant pourquoi on pouvait simplisier la
formule en remplaçant LIGNES($A$2:$A$11))) par 10 ou par
NBVAL(A2:A11) dans notre exemple puisque la plage est fixe. (Pour les
super cracks qui se gondolent en me lisant, je suis d'accord que ce
point pourrait être discuté, mais au lieu de vous gondoler, vous
feriez mieux de faire ce pensum à ma place ;-) Je fatigue déjà un
peu, et si vous voulez ma place, prenez la, moi je vais promener au
bois, il fait tellement beau aujourd'hui que je ne comprends pas e
que je fais devant mon PC)
Il ne reste qu'INDIRECT et l'ensemble.:
Indirect est aussi une fonction qui a un peu échappé à ses
concepteurs. A l'origine, indirect renvoie la référence inscrite dans une
chaine de
caractère (en gros)
Mais son fonctionnement interne est très particulier et surprenant.
Si vous introsuisez, par exemple INDIRECT("1:10") dans une formule
matricielle, le système va créer un vecteur vertical "VIRTUEL" avec
toutes les valeurs de 1 à 10 et donc si cette formule est incluse
dans un sommeprod, il va traiter toutes les valeurs du vecteurs comme
si c'était une matrice existante.
Exemple: =SOMMEPROD(LIGNE(INDIRECT("1:10"))) donne 55 càd la somme des
numéro de ligne DANS LE VECTEUR VIRTUEL créé par indirect("1:10") soit
1+2+3+4+5+6+7+8+9+10
Je vous avait prévenu, c'était pas de la tarte. Vous suivez toujours?
Si c'est pas clair ( je vois d'ici vos yeux équarquillés donc je me
permets d'insister; Ceux qui ont pigé, passez tout de suite à la case
suivante sans passer par le parloir de la prison)
Si c'est pas clair, imaginer donc un vecteur virtuel vertical càd "un
morceau de colonne" dans un classeur qui n'existe que dans la mémoire
de votre PC qui est complèté avec toutes les valeurs de 1 à 10 soit
1,2,3, etc...
Chaque valeur est donc à une certain numéro de ligne dans ce classeur
virtuel et Sommeprod fait l'addition de ces numéros de ligne.
Ceci étant dit et les choses étant ce qu'elles sont, terminons
maintenant notre analyse.
Dans :
(SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11))))
la dernière partie va créer avec indirect un "vecteur virtuel
vertical" composé du nombres de valeurs comprises de 1 au nombres de
lignes composant la plage A2:A11 soit de 1 à 10 soit 10 donc un
"vecteur vertical virtuel" de 10 cellules.
Sommeprod vas prendre la première ligne des trois conditions càd "A2
est-il égal à E "(dans l'exmple non donc valeur 0) multiplié par "B2
est-il égal à F1" (non donc valeur 0) multiplié par le numéro de
ligne de la première cellule du "vecteur vertical virtuel" (dans
l'exmple 1); Le résultat de cette multiplication est bien sur 0
puisqu'au moins un des facteurs est égal à 0. A cela Somme prod
ajoute le résultat de la deuxième ligne, qui donne aussi valeur 0.
Il n'y a qu'une ligne ou les deux conditions sont remplies donc 1*1
multiplié par la ligne de la cellule correspondante dans le "VVV"
(pour vecteur virtuel vertical) c'est la quatrième ligne. Dans le VVV
le numéro de la ligne est donc 4 et 1*1*4=4
Toutes les autres lignes étant agales à 0, le total est bien 4.
Ce 4 est donc récupéré pour aller cherche la 4ème position dans la
plage couverte par index et on a donc le code correct.
Queceux qui ont compris lève le doigt.
A+
PAul V
"daniel" a écrit dans le message de news:bonjour,
trouvé dans un message de Sept 2005 (sans matricielle).
=INDEX($C$2:$C$11;SOMMEPROD(($A$2:$A$11á)*($B$2:$B$11ñ)*LIGNE(INDIRECT("1:"&LIGNES($A$2:$A$11)))))
mais je ne saurais l'expliquer pour "ligne(indirect(....", si un
crack peut éclairer nos lanternes.....