Classement de données

Bonjour

J'aurai un classement de données à faire

données

1 : 2

2 : 1

3 : 4

4 :1

résultat désiré

1er : 3

2eme: 1

3 eme :2

4eme : 4

on peux remarquer q'en cas d'égalité on garde l'ordre des données (le 2 est avant le 4)

merci par avance

Bonjour,

Un exemple pour le principe.

Cdlt.

6tapir26200.xlsx (16.11 Ko)

Bonjour,

le fichier joint :

17classement.xlsx (9.09 Ko)

permet de répondre à votre demande.

Le principe ?

on crée un "décalage" des différentes valeurs afin qu'il n'y ait pas d'égalité entre elles, c'est ce que fait la partie de formule (Ligne($B$2:$B$5)/100).

en effet chaque valeur est sur un N° de ligne différent, ce numéro de ligne on le divise par 100 (par exemple, cela peut être plus...)

et on soustrait cette valeur à la valeur de chaque ligne, donc en ligne 2 on a :

2 - (ligne()/100) = 2 - 0.02 = 1.98

en ligne 3 : 0.97

en ligne 4 : 3.96

en ligne 5 : 0.95

on voit bien qu'en cas d'égalité, c'est bien la première valeur "trouvée" qui passe devant les autres...

Le reste de la formule n'est qu'un simple INDEX : cette fonction renvoie la valeur d'une matrice (plage de cellule) dont on donne les coordonnées dans cette matrice, nous on veut afficher les noms, donc la matrice est bien la colonne A $A$2:$A$5,

l'argument suivant est la coordonnée en ligne de la valeur que l'on veut renvoyé, et c'est ce qu'il nous faut vu que la plage n'a qu'une colonne

Pour trouver cette coordonnée on utilise EQUIV qui renvoie la position d'une valeur cherchée dans une plage de données.

La valeur cherchée est la plus grande des valeurs de la colonne B (pour le premier du classement) donc valeur cherchée : Grande.Valeur(plage de donnée; rang de cette valeur)

la plage de données c'est $B$2:$B$5, le rang c'est 1 car c'est la première grande valeur que l'on cherche.

Mais comme il risque d'y avoir des égalités alors on crée un décalage sur la valeur cherchée :

GRANDE.VALEUR(B$2:B$5-LIGNE(B$2:B$5)/100;1), et comme la formule sera étirable vers le bas et que la prochaine devra chercher la grande valeur de rang 2, on peut rendre le rang "variable" en lui attribuant une formule qui fait référence au numéro de ligne où se trouve la formule, on obtient :

GRANDE.VALEUR(B$2:B$5-LIGNE(B$2:B$5)/100;LIGNE()-1)

comme cela la formule en ligne 3 cherchera la grande valeur de rang : LIGNE()-1 = 3-1 = 2

et en ligne 3 on veut afficher le deuxième du classement

Donc GRANDE.VALEUR nous renoie la valeur cherchée, il suffit que EQUIV nous revoie sa position dans la plage de recherche, mais cette plage de recherche si on ne fait rien n'aura aucune correspondance de valeur car on a crée un décalage !

Il faut donc également créé ce décalage dans la plage de valeur de la fonction EQUIV :

EQUIV(GRANDE.VALEUR(B$2:B$5-LIGNE(B$2:B$5)/100;LIGNE()-1);B$2:B$5-LIGNE(B$2:B$5)/100;0)

surligné en vert le décalage des valeurs de la plage de recherche de EQUIV et pour finir on met le paramètre "type de recherche" à 0 car on cherche une valeur "exacte".

La formule finale est :

=INDEX(A$2:A$5;EQUIV(GRANDE.VALEUR(B$2:B$5-LIGNE(B$2:B$5)/100;LIGNE()-1);B$2:B$5-LIGNE(B$2:B$5)/100;0))

qu'il faut valider avec la combinaison des touches suivantes : [Shift]+[CTRL]+[ENTREE]

afin de la rendre "matricielle" car les recherches se font non pas sur une cellule, mais sur des plages de cellules, vous devriez alors arriver sur ceci :

{=INDEX(A$2:A$5;EQUIV(GRANDE.VALEUR(B$2:B$5-LIGNE(B$2:B$5)/100;LIGNE()-1);B$2:B$5-LIGNE(B$2:B$5)/100;0))}

des accolades s'affichent de par et d'autre de la formule, une fois la première formule écrite vous pouvez la tirer vers le bas sur trois lignes, cela vous donne accès au classement des 4 noms de la plage voulue.

@ bientôt

LouReeD

Merci Jean-Eric !

@ bientôt

LouReeD

Rechercher des sujets similaires à "classement donnees"