Tri d'un tableau pré-renseigné par chiffre final (non vide) croissant
Bonjour,
Je fais exprès de créer un nouveau topic car même si j'ai déjà posé la question, celle-ci était inclue dans un programme existant. Le code n'étant pas le même d'une part (et la structure du programme pouvant varier), et la manipulation pouvant aider quelqu'un d'autre d'autre part, je propose un nouveau topic.
L'idée est de réaliser la manipulation sur un tableau Excel sur lequel on vient de remplir une partie de la feuille :
Elle consiste à trier toutes les combinaisons initialement entrées sur la feuille, de telle manière à ce que toutes celles avec le nombre final le plus grand (le nombre final étant la dernière colonne à contenir une case non vide) soient affichées simultanément à la suite, en dernier ?
Ici, voici juste un exemple simplifié :
Situation de départ
1 | 2 | 3 | 1 | 2 | 3 | |||
1 | 2 | 1 | 1 | 2 | ||||
1 | 3 | 2 | 1 | 2 | 2 | |||
1 | 2 | 3 | 1 | 2 | 1 | |||
1 | 3 | 2 | 1 | 2 | 1 | 2 | ||
3 | 1 | 2 | 2 | 1 | 3 | |||
2 | 1 | 3 | 1 | 2 | 3 | |||
2 | 2 | 1 | 1 | 3 | ||||
2 | 1 | 2 | 3 | 1 | 1 | |||
1 | 2 | 1 | 1 | 2 | 1 | 3 | 1 | 2 |
2 | 1 | 2 | 1 | 2 | 3 | 3 | ||
1 | 2 | 2 | 3 | 1 | 1 | 2 |
Situation d'arrivée :
1 | 2 | 1 | 1 | 2 | ||||
1 | 3 | 2 | 1 | 2 | 2 | |||
1 | 2 | 3 | 1 | 2 | 1 | |||
1 | 3 | 2 | 1 | 2 | 1 | 2 | ||
2 | 1 | 2 | 3 | 1 | 1 | |||
1 | 2 | 1 | 1 | 2 | 1 | 3 | 1 | 2 |
1 | 2 | 2 | 3 | 1 | 1 | 2 | ||
1 | 2 | 3 | 1 | 2 | 3 | |||
3 | 1 | 2 | 2 | 1 | 3 | |||
2 | 1 | 3 | 1 | 2 | 3 | |||
2 | 2 | 1 | 1 | 3 | ||||
2 | 1 | 2 | 1 | 2 | 3 | 3 |
Dans l'exemple fourni, le chiffre final le plus élevé du tableau est "3" : toutes les combinaisons ayant leur dernière colonne remplie égale à 3 se retrouvent en dernier.
Le programme devrait normalement s'appliquer à la capacité entière de la feuille Excel (toutes les lignes et toutes les colonnes dans la limite des limites d'Excel).
Bonus : Classer toutes ces combinaisons par chiffre final croissant serait un gros plus ;)
exemple :
1 | 2 | 3 | 1 | 2 | 1 | |||
2 | 1 | 2 | 3 | 1 | 1 | |||
1 | 2 | 1 | 1 | 2 | ||||
1 | 3 | 2 | 1 | 2 | 2 | |||
1 | 3 | 2 | 1 | 2 | 1 | 2 | ||
1 | 2 | 1 | 1 | 2 | 1 | 3 | 1 | 2 |
1 | 2 | 2 | 3 | 1 | 1 | 2 | ||
1 | 2 | 3 | 1 | 2 | 3 | |||
3 | 1 | 2 | 2 | 1 | 3 | |||
2 | 1 | 3 | 1 | 2 | 3 | |||
2 | 2 | 1 | 1 | 3 | ||||
2 | 1 | 2 | 1 | 2 | 3 | 3 |
En vous remerciant ! :)
Bonjour,
Je fais exprès de ne pas mettre le post en "résolu" par respect pour ceux qui ont commencé à concocter un programme (sachez d'ailleurs, que même si je viens de trouver une solution, ce n'est absolument pas inutile de faire un programme car il peut être plus adapté de le coder que de le faire manuellement).
La solution que j'ai trouvée est toute simple et prend 10 secondes.
1) Surligner toutes les colonnes à trier
2) Données => Bouton "A-Z avec la flèche" (trier du plus petit au plus grand).
Du coup, ça fonctionne car tous les chiffres finaux sont classés par ordre croissant !
Je me maudis de ne pas y avoir pensé plus tôt et de vous avoir dérangé (mais ce ne sera jamais fait pour rien !)
G.H.
Salut gthe,
ainsi ? En triant le tableau en basant le tri du tableau de colonne en colonne en allant de droite à gauche.
Dim lngRow&
'
For x = UsedRange.Columns.Count To 1 Step -1
If x < UsedRange.Columns.Count Then lngRow = Columns(x + 1).Find _
(what:=WorksheetFunction.Max(UsedRange), lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlPrevious).Row
Range("A" & lngRow + 1).Resize(UsedRange.Rows.Count - lngRow, UsedRange.Columns.Count).Sort key1:=Range(Chr(64 + x) & lngRow + 1), order1:=xlAscending, Orientation:=xlTopToBottom, Header:=xlNo
Next
A+