Bonsoir,
une tentative d'explication :
=INDEX($F$2:$F$1700;PETITE.VALEUR(SI(($B$2:$B$1700="lundi")*($F$2:$F$1700<>"");LIGNE(INDIRECT("1:"&LIGNES($F$2:$F$1700))));LIGNES($1:1)))
Petite.valeur renvoie la kième petite valeur NUMERIQUE d'une matrice.
Le premier argument est la liste de la série, le deuxième la position kième de la petite valeur de la série voulue.
Vous ai-je perdu ?
le premier argument se trouve être une condition SI, avec comme test logique de condition une multiplication de deux égalités.
Sous Excel, une égalité "vrai" équivaut à 1 et une fausse équivaut à 0, donc si l'on fait le produit de ces égalités, le résultat vaut 1 si tout est à 1 donc tout est Vrai, et vaut 0 si au moins une égalité est fausse.
Dans la fonction SI un test logique = à 1 vaut VRAI et = à 0 vaut FAUX
Donc dans votre cas si les deux conditions sont vrai le SI = VRAI alors c'est la "double" fonction LIGNE qui fonctionne
sinon c'est la simple.
Pour comprendre la suite il faut faire la différence entre ligne(référence) et ligneS(Matrice).
La première renvoie le numéro de ligne de la feuille Excel de la référence. Exemple ligne(b32) renvoie 32 même si la fonction ligne est écrite dans une formule de la ligne 10. En l'absence de référence elle renvoie le numéro de ligne où elle est inscrite.
La deuxième renvoie le NOMBRE de lignes de la matrice, c'est à dire que si la plage fournie en paramètre comporte 13 ligne alors la fonction renvoie 13 : Lignes(A3:A15) renvoie 13 !
Une petite touche de INDIRECT afin de créer des références qui ne seront pas liées au numéro de ligne Excel lors de la recopie de la formule, et surtout afin d'avoir des référence matricielle en fonction de la condition SI.
La formule matricielle c'est comme une boucle sous VBA si je puis dire et cette boucle est interne à la cellule :
on a une matrice qui va de $F$2:$F$1700, le fait de valider en matricielle, le résultat sur une ligne correspondrait au premier tour de boucle, la ligne suivante au deuxième etc...
donc si on prend la première ligne la fonction SI donnerait cela si on devait l'écrire :
SI((B2="lundi")*(F2<>"");LIGNE(INDIRECT("1:"&LIGNES(F2))))
si((1)*(1);ligne(indirect("1:2")))
si(1;ligne(A1:A2))
si(vrai;ligne(1))
= 1
donc PETITE.VALEUR a en premier paramètre 1 et en paramètre k il a
Lignes($1:1) qui renvoie 1
(Le deuxième 1 lui n'ayant pas de "$" va s'incrémenter avec la recopie de la formule, nous le verrons plus loin)
Donc dans la liste de valeurs (1) PETITE.VALEUR doit renvoyer celle qui est la "1ième" donc 1.
La fonction INDEX nous renvoie donc la valeur en ligne 1 de sa matrice colonne F, qui elle commence en ligne 2 de la feuille Excel,
ce qui fait qu'INDEX renvoie bien la valeur de la cellule F2 soit Rodrigue !
Pour le test suivant, supprimons Selim de la liste, que va nous renvoyer la formule ?
Comme je vous l'ai dit le matriciel c'est comme une boucle.
Donc on passe à la deuxième ligne, la fonction SI donnerait cela si on devait l'écrire :
SI((B3="lundi")*(F3<>"");LIGNE(INDIRECT("1:"&LIGNES(F3))))
si((1)*(0);ligne(indirect("1:3")))
si(0;ligne(A1:A3))
si(faux;ligne(1))
= FAUX
donc PETITE.VALEUR a en premier paramètre et deuxième place de la matrice la valeur FAUX et en paramètre k il a
Lignes($1:2) qui renvoie 2 (l'incrémentation due à la recopie)
Donc petite valeur devrait renvoyer la deuxième petite valeur de sa matrice, hors dans l'explication nous venons de voir que la deuxième valeur vaut FAUX, elle n'est donc pas prise en compte !!!
C'est là qu'intervient le coté "matricielle" de la formule :
il faut s'imaginer que le tableau va vers le bas sur 1700 lignes, mais qu'à chaque cellule où se trouve la formule, c'est lignes vont également en profondeur de ces cellules, nous entrons dans une troisième dimension !
Du coup en étant "terre à terre" il devrait y avoir une erreur, mais comme dans la cellule on a bien une matrice avec 1700 données, lorsque l'on demande la deuxième donnée numérique de la matrice petite.valeur, alors Excel nous renvoi l'équivalent de la troisième ligne "en 2D" du tableau !!!
C'est comme si qu'à chaque ligne où la formule est inscrite, cette même formule faisait une boucle en elle même sur le tableau !
J'ai beau me relire, c'est difficile à faire passer comme message. Pour plus de clarté, faites un tour sur "Formules" puis "Evaluer la formule" et vous verrez ceci écrit pour la ligne 3 d'Excel, qui prend en référence la ligne 2 de la matrice sur laquelle on a supprimé Selim pour l'exemple :
PETITE.VALEUR({1;FAUX;3....];LIGNES($1:2))
k = 2 car ligneS renvoie le nombre de ligne de la matrice
et entre les accolades on a une image de la troisième dimension du tableau qui se trouve dans une seule cellule, et en fonction des différents tests du SI il y aura inscrit le numéro de ligne où le test est bon, ou bien FAUX quand le test n'est pas bon, comme le paramètre k ne prend que les numériques, la deuxième petite.valeur est bien 3, donc index renvoie la valeur de sa troisième ligne en colonne F qui est Loic ! CQFD !
Allez bon courage pour la compréhension, comme je disais, j'ai encore du mal avec cette gymnastique, rien ne vaut l'entrainement et grâce à vous j'en ai eu!
@ bientôt
LouReeD