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.....
| ce post à des novices
AMHA, des novices qui utilisent ce type de formule et qui sont
susceptibles de comprendre les tenants et aboutissants de ce
type de formule avec les explications données sur ce fil,
ne sont plus des novices à moins qu'ils soient affublés de douance
particulière...
C'est vrai.
| ce post à des novices
AMHA, des novices qui utilisent ce type de formule et qui sont
susceptibles de comprendre les tenants et aboutissants de ce
type de formule avec les explications données sur ce fil,
ne sont plus des novices à moins qu'ils soient affublés de douance
particulière...
C'est vrai.
| ce post à des novices
AMHA, des novices qui utilisent ce type de formule et qui sont
susceptibles de comprendre les tenants et aboutissants de ce
type de formule avec les explications données sur ce fil,
ne sont plus des novices à moins qu'ils soient affublés de douance
particulière...
C'est vrai.
Bonjour, *Paul V*
Limpide...
Mérite, àmha, de figurer dans le xlwiki
Même moi, j'ai (presque) tout compris...
--
Bien amicordialement,
P. Bastard
Avant d'imprimer ce mail, ayez une pensée pour les arbres.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.....
Bonjour, *Paul V*
Limpide...
Mérite, àmha, de figurer dans le xlwiki
Même moi, j'ai (presque) tout compris...
--
Bien amicordialement,
P. Bastard
Avant d'imprimer ce mail, ayez une pensée pour les arbres.
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.....
Bonjour, *Paul V*
Limpide...
Mérite, àmha, de figurer dans le xlwiki
Même moi, j'ai (presque) tout compris...
--
Bien amicordialement,
P. Bastard
Avant d'imprimer ce mail, ayez une pensée pour les arbres.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.....
Peut-etre une adresse pour trouver des reponses?
ici, en français : http://xcell05.free.fr/ en suivant formule, Utilisation des formules
matricielle? Quels sont les inconvenients?
Lorsqu'on modifie la formule, oublier de re-valider avec ses 3 doigts et ses 2 mains (ou 1
Peut-etre une adresse pour trouver des reponses?
ici, en français : http://xcell05.free.fr/ en suivant formule, Utilisation des formules
matricielle? Quels sont les inconvenients?
Lorsqu'on modifie la formule, oublier de re-valider avec ses 3 doigts et ses 2 mains (ou 1
Peut-etre une adresse pour trouver des reponses?
ici, en français : http://xcell05.free.fr/ en suivant formule, Utilisation des formules
matricielle? Quels sont les inconvenients?
Lorsqu'on modifie la formule, oublier de re-valider avec ses 3 doigts et ses 2 mains (ou 1
Bonjour,
Vaste sujet.Peut-etre une adresse pour trouver des reponses?
ici, en français : http://xcell05.free.fr/ en suivant formule,
Utilisation des formules matricielles.
et là (entre autres) en anglais :
http://www.tushar-mehta.com/excel/tips/array_formulas.htmmatricielle? Quels sont les inconvenients?
Lorsqu'on modifie la formule, oublier de re-valider avec ses 3 doigts
et ses 2 mains (ou 1 main si on est pianiste et/ou gynécologue)
Cordialement
Trirème
Bonjour,
Vaste sujet.
Peut-etre une adresse pour trouver des reponses?
ici, en français : http://xcell05.free.fr/ en suivant formule,
Utilisation des formules matricielles.
et là (entre autres) en anglais :
http://www.tushar-mehta.com/excel/tips/array_formulas.htm
matricielle? Quels sont les inconvenients?
Lorsqu'on modifie la formule, oublier de re-valider avec ses 3 doigts
et ses 2 mains (ou 1 main si on est pianiste et/ou gynécologue)
Cordialement
Trirème
Bonjour,
Vaste sujet.Peut-etre une adresse pour trouver des reponses?
ici, en français : http://xcell05.free.fr/ en suivant formule,
Utilisation des formules matricielles.
et là (entre autres) en anglais :
http://www.tushar-mehta.com/excel/tips/array_formulas.htmmatricielle? Quels sont les inconvenients?
Lorsqu'on modifie la formule, oublier de re-valider avec ses 3 doigts
et ses 2 mains (ou 1 main si on est pianiste et/ou gynécologue)
Cordialement
Trirème