Ordonner des nombres

  • Initiateur de la discussion Initiateur de la discussion JJ1
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

JJ1

Guest
Bonsoir,

Je ne trouve pas de solution au problème d'ordonnancement de 5 nombres en fonction d'une ligne de référence (ligne 1) en ordre décroissant pour chacun des 5 nombres.
Avez-vous une idée de solution?
Merci de votre aide.
Bonne soirée
 

Pièces jointes

Re : Ordonner des nombres

Re
Onglet "après": ici la formule devrait trier la plage A2:E6 en fonction de la réf I1:R1
Je ne vois pas comment tu peux faire cela : quels sont les éléments présents en I1:R1 de l'onglet "après" qui te permettraient d'effectuer ce tri ? De plus, I1:R1 de l'onglet "après" est identique à I1:R1 de l'onglet "avant".
Autre point pas clair : quand tu parles de "la plage A2:E6", à quelle plage fais-tu référence ? Celle de l'onglet après ou celle de l'onglet avant ?
Autre point pour tenter de comprendre ta démarche : dans l'onglet "après": le plus simple serait que tu partes d'une feuille blanche et que tu me mettes manuellement uniquement ce que tu cherches en 1er (le tri de la plage A2:E6 ou la ligne en H2:H6 ?) avec les éléments dont tu disposes pour faire cette 1ère étape. Quand cette étape sera résolue, nous verrons pour ton étape 2.
A+
 
Re : Ordonner des nombres

Re,

Je t'envoie un nouveau fichier (sans tableau ) pour te montrer ce que je cherche à faire: passer de la plage A: E à la plage triée F:J décroissant par rapport aux nombres N1:W1
Ce fichier est plus épuré.
Dis moi si c'est plus clair?
merci
 

Pièces jointes

Re : Ordonner des nombres

Re
oui ta demande est plus lisible et je crois comprendre ce que tu veux obtenir : trier chaque ligne en fonction de sa correspondance avec l'ordre établi en N1:W1, à savoir : rechercher les lignes ayant un 3 en position 1, si plusieurs, rechercher parmi celles-ci celles où l'on trouve un 1 en position 2, si pas de 1, sélectionner celles qui ont un 8, etc.
Quand on a traité toutes les lignes commençant par 3, trier ensuite celles commençant par 1 selon la même idée.
Est-ce cela ?
J'attends de savoir si j'ai bien compris la problématique avant de regarder si je peux te proposer quelque chose.
A+
 
Re : Ordonner des nombres

EXACTLY !!
Tu as compris, et tu comprends pourquoi, une fois ces lignes triées, je voulais l'ancien numéro de ligne où se situait la série avant le tri!
Bien sûr c'est un exemple, j'ai plus de colonnes en ligne 1 de référence et environ 500 lignes en plage A:E à trier. J'adapterai ensuite.
Merci
 
Re : Ordonner des nombres

Re,
J'ai 50 colonnes de reference (+ la colonne de la ligne avant le tri). La base à trier reste à 5 colonnes (A:E)
On peut essayer par formule, j'essayerai d'adapter à mon fichier ensuite.
Merci
Bonne soirée
 
Dernière modification par un modérateur:
Re : Ordonner des nombres

Re
On peut essayer par formule, j'essayerai d'adapter à mon fichier ensuite.
Même si je persiste à dire que la meilleure solution est via VBA, puisque tu veux par formules, voilà.
A toi d'adapter maintenant (ceci-dit, il y a peut-être plus simple même par formules : avis aux amateurs🙄).
A+
 

Pièces jointes

Re : Ordonner des nombres

Bonjour David et merci pour cette belle formule (bravo! c'était pas simple et inexistant dan l'historique d'XLD).

Si j'ai bien compris, en rajoutant des nombres en ligne 1 de référence, je vais avoir à modifier la formule de cond1, cond2...cond5? en espérant que je passerai en dessous de 255 caractères.

Je vais essayer d'en rajouter 2 ou 3 pour commencer.......
Je te dirai.
Bon samedi et merci à toi.
C'est vrai qu'une macro pourrait certainement convenir, je vais voir aussi dans ce sens.
 
Re : Ordonner des nombres

Bonjour le fil 🙂,
Effectivement, avec VBA, ce sera plus simple (mais pas forcément performant en fonction du nombre de cellules à traiter... En cas de gros fichier, je te conseille de faire une colonne intermédiaire avec la fonction, et d'y faire appel avec Index ensuite 🙄...) 😛...
David m'ayant demandé mon avis, nous avons réfléchi sur le problème, et voici le résultat de nos cogitations :
Une fonction VBA pour récupérer le N° de ligne
Code:
Function David84%(Plage As Range, Valeurs As Range, Rang%)
Dim I%, J%, K%, Tableau(), Total As Long, Comparer As Long
ReDim Tableau(Plage.Rows.Count - 1)
For I = 0 To Plage.Rows.Count - 1
For J = 1 To Plage.Columns.Count
For K = 1 To Valeurs.Count
If Plage.Cells(I + 1, J) = Valeurs.Cells(K) Then Total = Total + K
Next K
Next J
Tableau(I) = Total
Total = 0
Next I
Comparer = Application.WorksheetFunction.Small(Tableau, Rang)
For I = 0 To Plage.Rows.Count - 1
If Comparer = Tableau(I) Then Exit For
Next I
David84 = I + 1
End Function
et
Code:
=INDEX(base;David84(base;$N$1:$W$1;LIGNES($1:1));COLONNES($A:A))
comme formule d'appel 😛.
Vive la collaboration XLD 😉...
Bon WE 😎
 
Re : Ordonner des nombres

Re le Forum, David
Bonjour JNP (et merci pour ton code),

Je réponds de mon PC tour car .........mon PC portable (1.6Ghz, 2MoRam, double coeur) sous XLS (j'aurais du le mettre sous XLM 2007 ?) est rougeoyant...les ventilateurs tournent, bientôt il va décoller !!!!

Pour vous donner une idée, données A:E500, 50 nombres de référence:
31% réalisé en 45 minutes.
Je reessayerai sous Excel 2010 XLM pour voir si c'est plus rapide qu'un fichier converti en XLS avec macro?

En tout cas merci à vous deux, il me restera le numéro de ligne.

Bravo et merci, c'était pas simple à faire (et aussi à expliquer!)


Bon samedi
 
Re : Ordonner des nombres

Re
En tout cas merci à vous deux, il me restera le numéro de ligne.
Relie bien le post de JNP :
Une fonction VBA pour récupérer le N° de ligne
et
et
Code :
=INDEX(base;David84(base;$N$1:$W$1;LIGNES($1:1));COLONNES($A:A))
comme formule d'appel
Donc, pour récupérer les n° de ligne :
Code:
=David84(base;$N$1:$W$1;LIGNES($1:1))
et pour récupérer tes lignes :
Code:
=INDEX(base;David84(base;$N$1:$W$1;LIGNES($1:1));COLONNES($A:A))
En passant, tu peux rebaptiser la fonction "JNP" en l'honneur de son concepteur🙂.
A+
 
Re : Ordonner des nombres

Re 🙂,
Je réponds de mon PC tour car .........mon PC portable (1.6Ghz, 2MoRam, double coeur) sous XLS (j'aurais du le mettre sous XLM 2007 ?) est rougeoyant...les ventilateurs tournent, bientôt il va décoller !!!!

Pour vous donner une idée, données A:E500, 50 nombres de référence:
31% réalisé en 45 minutes.
d'où le conseil de d'abord récupérer dans une colonne les valeurs de ligne (quitte à faire un copier/collage spécial valeur...) puis de faire référence à cette colonne pour les Index 😛...
Autre solution, à mon avis plus rapide, affecter aux cellules la valeur trouvée via VBA en appel de la fonction 🙄...
Bon courage 😎
 
Re : Ordonner des nombres

Re,
Résultat: un peu moins de 3H pour le tri total.

Par contre, j'avais des lignes "mal triées" dans le tableau. J'ai fait un test avec moins de valeur, il semble que la fonction décale certaines lignes ou bien c'est moi qui ai mal appliqué la fonction?
Je joins l'exemple.(pb avec le 20 et le 18)

voici l'ordre attendu:
20 17 16 15 7
20 17 14 4 3
19 18 16 14 3
18 15 12 9 6
18 15 10 7 1
18 11 7 4 3
15 10 9 7 5
9 8 6 3 2

Pour le numéro de ligne, c'est parfait.
Merci.
Bon WE
 

Pièces jointes

Dernière modification par un modérateur:
Re : Ordonner des nombres

Re 🙂,
Non, c'est moi qui ai mal pondéré la fonction 😱...
J'avais ajouté 1 de décalage par ordre de la colonne et pris la plus petite valeur, alors que je viens de tester une nouvelle pondération avec 2 à la puissance du rang de la colonne trouver, ça semble fonctionner 🙄...
Code:
Function David84%(Plage As Range, Valeurs As Range, Rang%)
Dim I%, J%, K%, Tableau(), Total As Long, Comparer As Long
Application.Volatile
ReDim Tableau(Plage.Rows.Count - 1)
For I = 0 To Plage.Rows.Count - 1
For J = 1 To Plage.Columns.Count
For K = 1 To Valeurs.Count
If Plage.Cells(I + 1, J) = Valeurs.Cells(K) Then Total = Total + 2 ^ (Valeurs.Count - K)
Next K
Next J
Tableau(I) = Total
Total = 0
Next I
Comparer = Application.WorksheetFunction.Large(Tableau, Rang)
For I = 0 To Plage.Rows.Count - 1
If Comparer = Tableau(I) Then Exit For
Next I
David84 = I + 1
End Function
pour la vitesse, on cherche avec David 😛...
A + 😎
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Microsoft 365 Format de nombres
Réponses
21
Affichages
520
Réponses
2
Affichages
168
Réponses
16
Affichages
556
Réponses
9
Affichages
369
W
Réponses
48
Affichages
1 K
Retour