Rapport de message :*
 

Re: Trier et appliquer une condition

Titre du sujet : Re: Trier et appliquer une condition
par Mth le 05/12/2009 18:12:22

re :)

Voici une autre version avec plus de gagnants possibles.

Pour les formules utilisées:

. Les zones nommées "Nom" et "Resultat" utilisent les fonctions DECALER() et NBVAL() afin de les rendre dynamiques, l'article "Nommer une plage dynamique" et le fichier qui l'accompagne ICI fournissent des explications et exemples d'utilisation qui je l'espère pourront t'aider à les comprendre facilement.

. Dans la cellule I2 et tirée vers le bas, la formule qui permet d'avoir le classement:
=SI(NBVAL(E:E)();"";GRANDE.VALEUR(Resultat;LIGNES(I$2:I2)))
En la décomposant:

- La fonction LIGNE() indique le numéro de la ligne de référence, sur la ligne 2 =LIGNE() renvoie 2, sur la ligne 25 =LIGNE() renvoie 25.
- La fonction LIGNES() permet d'avoir le nombre de lignes de la zone en référence.
LIGNES(I$2:I2) renverra 1 car il il a une seule ligne dans cette plage. En tirant la formule vers le bas, LIGNES(I$2:I2) devient LIGNES(I$2:I3) puis LIGNES(I$2:I4) etc, le nombre de ligne augment de 1 à chaque fois, cette partie de la formule renvoie donc 1 puis 2 puis 3 etc ...
- NBVAL(E:E) indique le nombre de cellules non vides dans la colonne E
- Le test du début de la formule:
=SI(NBVAL(E:E)();""; etc ...)
permet de savoir si le nombre de lignes dans le tableau de gauche est inférieur ou pas à la ligne où se trouve la formule. Ainsi, si nous sommes sur la 15ème ligne alors qu'il n'y a que 12 participants, on renverra un vide (noté par deux guillemets l'un à coté de l'autre) et on évitera que la formule renvoie #NOMBRE!
Dans le cas contraire, on effectue la calul suivant:
=GRANDE.VALEUR(Resultat;LIGNES(I$2:I2))
- La fonction GRANDE.VALEUR() permet d'obtenir la x-ième plus grande valeur située dans la plage nommée Resultat.
x est calculé grace à la formule LIGNES() vue ci-dessus, la première fois on a donc la premère plus grande valeur de la zone "Résultat", sur la ligne du dessous la 2ème plus grande valeur, etc...


. En cellule H2 tirée vers le bas, cette formule permet de récupérer le nom de la personne ayant obtenu le score indiqué en colonne I:
=SI(I2="";"";INDEX(Nom;EQUIV(I2;Resultat;0);))
La fonction INDEX() va renvoyer la valeur trouvée dans la zone nommée "Nom" du premier tableau, la ligne sur laquelle se trouve cette valeur est calculée par la fonction EQUIV(). Tu peux aller voir l'aide excel qui est très bien sur cette fonction EQUIV(), sourire... sans oublier l'excellent fichier de notre ami Jean Marie sur la fonction INDEX() ICI

. La troisième formule en F3 tirée vers le bas utilise également les fonctions EQUIV() et INDEX():
=SI(ESTNA(EQUIV(A2;$H$2:$H$21;0));"";INDEX($J$2:$J$21;EQUIV(A2;$H$2:$H$21;0);))

simplement, en début de formule, le test permet de renvoyer un vide si la personne recherchée ne fait pas partie de la zone des 20 premiers.
Soit la personne existe dans cette liste et la fonction EQUIV() renverra le numéro de la ligne correspondante, soit elle n'existe pas et la fonction renvoie #NA.
La fonction ESTNA renvoie VRAI si le résultat de la fonction EQUIV() est #NA, et renvoie FAUX dans le cas contraire. SI le résultat est VRAI, pour éviter d'avoir de vilains #NA dans la colonne, on met un vide, si non on fait le calcul.

Voilà Michel, j'espère que ces commentaires pourront t'aider pour ton fichier et te souhaite une bonne soirée,

à bientôt,

mth