classement

  • Initiateur de la discussion Tophe31
  • Date de début
T

Tophe31

Guest
Bonjour, voila mon problème :
j'ai réalisé un tableau dont pas mal de cellules contenant des fonctions sont verrouillées. Il n'est par conséquent pas possible de faire de tri vertical. Pour remédier à cela, j'ai fait un collage spécial du tableau en question sur la deuxième feuille que je n'ai pas verrouillé. Est-il possible de programmer un tri qui se face automatiquement dans cette feuille ?
De cette façon, je rentre les valeurs dans la feuille 1, et j'ai un classement effectué automatiquement dans la feuille 2.
Merci.
 
P

Pierre

Guest
Je vois une solution en deux étapes, pour ma part.
Premier temps: création d'une zone où la fonction RANG() te donne un numéro d'ordre pour chaque valeur.
Deuxième temps une fonction SI() qui vérifie dans la liste des rangs ou se situe le premeire, le second,....

Hope this will help you.

Bonne soirée
 
M

Monique

Guest
Bonsoir,

En espérant qu'il n'y ait que quelques valeurs à classer.
Tu sélectionnes autant de cellules que de valeurs à classer.
Pour un tri décroissant de 6 valeurs, tu tapes :
=GRANDE.VALEUR(table;{1;2;3;4;5;6})
et tu valides par ctrl + maj + entrée.
Pour un tri croissant :
=PETITE.VALEUR(table;{1;2;3;4;5;6})

Ce sont des accolades qui entourent la série 1;2;3; etc
"table" = le nom de la plage de cellules à classer.
 
M

Monique

Guest
Re

Suite
Si tu veux trier une plage de cellules selon la valeur d'une autre plage.
Exemple : trier la plage nommée "prenom" selon la plage nommée "table"
=INDEX(prenom;EQUIV(GRANDE.VALEUR(table;{1;2;3;4;5;6});table;0))
Même système : sélectionner d'abord autant de cellules que nécessaire, taper la formule puis valider par ctrl + maj + entrée.
 
J

Jean-Marie

Guest
Bonsoir,

On peut remplacer {1;2;3;4;5;6} de la fonction par LIGNE()-Nombre de lignes de l'entête.

En amaginant que l'entête est composée de trois lignes. Celà donnerait
=INDEX(prenom;EQUIV(GRANDE.VALEUR(table;LIGNE()-LIGNES(1:3));table;0))

LIGNE() ou LIGNE(A4) renvoi le numéro de la ligne -> 4
LIGNES(1:3) renvoi le nombres de lignes de la plage ->3

@+Jean-Marie
 
T

Tophe31

Guest
Merci à tous pour ce précieux coup de main. J'ai testé la méthode de Monique qui me paraît fonctionner parfaitement. Je vais essayer de l'améliorer avec le schéma de Jean Pierre afin de gagner un peu de temps, mon tableau étant composé de 200 lignes et de 8 colonnes !
 
T

Tophe31

Guest
Bonjour,
J'ai un problème pour trier une plage de cellules selon la valeur d'une autre plage. En effet tout fonctionne parfaitement selon la méthode expliquée ci-dessus SAUF quand j'ai des valeurs identiques dans la colonne de référence. Existe-t-il une solution pour ce problème ?

Exemple : si j'ai 3 cellules qui ont pour valeur 3 ; 2 et 2 , qui correspondent aux lettres a pour la première b pour la seconde et c pour la troisième, j'aurai après classement décroissant a correspond à 3, b correspond à 2 et b au lieu de c correspond à 2.
 
M

Monique

Guest
Bonjour,

En cas d'ex aequo, en effet, ça donne des résultats non valables.
Je l'avais remarqué puis je n'y ai plus pensé.

Pour que les ex aequo aient chacun leur cellule, tu peux essayer ceci :
=INDEX(prenom;EQUIV(GRANDE.VALEUR(table+LIGNE()/100000;LIGNE());table+LIGNE()/100000;0))
Tu sélectionnes autant de cellules que de noms à trier.
Tu écris cette formule.
Tu valides par ctrl + maj + entrée.

Le nombre 100000 est du pifomètre, une "marge de sécurité".
C'est pour éviter des erreurs au cas où tu aurais 65536 ex aequo.
 
T

Tophe31

Guest
Tout d'abord, je tiens à vous remercier pour votre réactivité.
Je vais essayer cette nouvelle formule, j'espère que je parviendrai à l'appliquer. Je vous tiendrai informé dans l'après-midi.
Merci encore.
 
M

Monique

Guest
Re-bonjour,

C'est un truc qui a été précisé par Jean-Marie dans un des messages précédents et je ne l'ai pas refait.

Si on démarre la colonne à la ligne 1, voici la formule :
=INDEX(prenom;EQUIV(GRANDE.VALEUR(table+LIGNE()/100000;LIGNE());table+LIGNE()/100000;0))
Si on démarre à la ligne 2
=INDEX(prenom;EQUIV(GRANDE.VALEUR(table+LIGNE()-LIGNES(1:1)/100000;LIGNE()-LIGNES(1:1));table+LIGNE()-LIGNES(1:1)/100000;0))
Si on démarre à la ligne 3
=INDEX(prenom;EQUIV(GRANDE.VALEUR(table+LIGNE()-LIGNES(1:2)/100000;LIGNE()-LIGNES(1:2));table+LIGNE()-LIGNES(1:2)/100000;0))
Dans les 2è et 3è formules, la formule laisse tomber LIGNES(1:1) ou LIGNES(1:2) et démarre le compte juste après.

NB - LIGNES(1:etc) est au pluriel, même s'il n'y a qu'une ligne.
 
T

Tophe31

Guest
Bonjour,
J'ai réussi à faire fonctionner la dernière formule mais elle ne résoud pas mon problème. A une valeur répétée dans la seconde colonne, j'obtiens toujours la même dans la première.
Peut-être avez-vous une autre solution ?
Merci
 
M

Monique

Guest
Bonjour,

Aïe, il manquait une parenthèse autour de "LIGNE()-LIGNES(1:2)"
C'est donc la même solution, avec 2 paires de parenthèses en plus.

Au lieu de ça :
=INDEX(prenom;EQUIV(GRANDE.VALEUR(table+LIGNE()-LIGNES(1:2)/100000;LIGNE()-LIGNES(1:2));table+LIGNE()-LIGNES(1:2)/100000;0))
c'est ça :
=INDEX(prenom;EQUIV(GRANDE.VALEUR(table+(LIGNE()-LIGNES(1:2))/100000;LIGNE()-LIGNES(1:2));table+(LIGNE()-LIGNES(1:2))/100000;0))

Sauf erreur...
 

Discussions similaires

Réponses
4
Affichages
168

Statistiques des forums

Discussions
311 724
Messages
2 081 936
Membres
101 844
dernier inscrit
pktla