XL 2021 Trier des numéros par ordre croissant lignes et colonnes

  • Initiateur de la discussion Initiateur de la discussion alan5
  • 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 !

alan5

XLDnaute Nouveau
Bonjour à tous,
mes compétences concernant Excel sont très limitées en VBA.
Je fais donc appel à vos talents.
Tableau comportant les tirages du jeu Crescendo.
1. Plan horizontal. Comment trier les dix numéros sur chaque ligne par ordre croissant,
de la gauche vers la droite.
2. Plan vertical. Éventuellement, tri ensuite des lignes (numéros) sur le plan vertical par
ordre croissant du plus petit au plus grand.
 

Pièces jointes

Bonjour @alan5🙂, à tous😉,

Une macro pour trier chaque ligne (tri par bulle) et une macro pour trier par colonne tel que je l'ai compris et qui conserve l'ordre au sein de chaque ligne.

nota : Le tri par colonne n'est judicieux qu'après avoir trié chaque ligne! C'est pourquoi le choix est donné dans la macro de tri par colonne.

Les codes dans Module1:
VB:
Sub TriChaqueLigne()
Dim DerLig&, t, i&, j&, ech As Boolean, aux
   With Sheets("Feuil1")
      DerLig = .Cells(Rows.Count, "B").End(xlUp).Row
      t = .Range("b6:k" & DerLig).Value
      For i = 1 To UBound(t)
         Do
            ech = False
            For j = 1 To UBound(t, 2) - 1
               If t(i, j) > t(i, j + 1) Then ech = True: aux = t(i, j): t(i, j) = t(i, j + 1): t(i, j + 1) = aux
            Next j
         Loop While ech
      Next i
      .Range("b6:k" & DerLig) = t
   End With
End Sub

Sub TriDesLignesParColonnes()
Dim rep, DerLig&, plage As Range, j&
   rep = MsgBox("Voulez-vous d'abord trier chaque ligne ?", vbYesNo + vbQuestion + vbDefaultButton1)
   With Sheets("Feuil1")
      If rep = vbYes Then TriChaqueLigne
      DerLig = .Cells(Rows.Count, "b").End(xlUp).Row
      Set plage = .Range("b6:k" & DerLig)
      .Sort.SortFields.Clear
      For j = 1 To plage.Columns.Count
         .Sort.SortFields.Add2 Key:=plage.Columns(j), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      Next j
      With .Sort
         .SetRange plage
         .Header = xlGuess
         .MatchCase = False
         .Orientation = xlTopToBottom
         .SortMethod = xlPinYin
         .Apply
      End With
   End With
End Sub

nb: j'ai repris la présentation de @sylvanu que je salue😉.
 

Pièces jointes

Bonjour @alan5🙂, à tous😉,

Une macro pour trier chaque ligne (tri par bulle) et une macro pour trier par colonne tel que je l'ai compris et qui conserve l'ordre au sein de chaque ligne.

nota : Le tri par colonne n'est judicieux qu'après avoir trié chaque ligne! C'est pourquoi le choix est donné dans la macro de tri par colonne.

Les codes dans Module1:
VB:
Sub TriChaqueLigne()
Dim DerLig&, t, i&, j&, ech As Boolean, aux
   With Sheets("Feuil1")
      DerLig = .Cells(Rows.Count, "B").End(xlUp).Row
      t = .Range("b6:k" & DerLig).Value
      For i = 1 To UBound(t)
         Do
            ech = False
            For j = 1 To UBound(t, 2) - 1
               If t(i, j) > t(i, j + 1) Then ech = True: aux = t(i, j): t(i, j) = t(i, j + 1): t(i, j + 1) = aux
            Next j
         Loop While ech
      Next i
      .Range("b6:k" & DerLig) = t
   End With
End Sub

Sub TriDesLignesParColonnes()
Dim rep, DerLig&, plage As Range, j&
   rep = MsgBox("Voulez-vous d'abord trier chaque ligne ?", vbYesNo + vbQuestion + vbDefaultButton1)
   With Sheets("Feuil1")
      If rep = vbYes Then TriChaqueLigne
      DerLig = .Cells(Rows.Count, "b").End(xlUp).Row
      Set plage = .Range("b6:k" & DerLig)
      .Sort.SortFields.Clear
      For j = 1 To plage.Columns.Count
         .Sort.SortFields.Add2 Key:=plage.Columns(j), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      Next j
      With .Sort
         .SetRange plage
         .Header = xlGuess
         .MatchCase = False
         .Orientation = xlTopToBottom
         .SortMethod = xlPinYin
         .Apply
      End With
   End With
End Sub

nb: j'ai repris la présentation de @sylvanu que je salue😉.
 
Que dire : topissime, respects, félicitations à vous tous ! Je suis loin, bien loin d'être à votre niveau.
• Question subsidiaire néanmoins, la partie d'intégration des résultats de base initiaux placés dans
les colonnes entre b à k est sans limite concernant l'ajout de nouvelles lignes ou y a-t-il justement
une limite ?
 
la partie d'intégration des résultats de base initiaux placés dans
les colonnes entre b à k est sans limite concernant l'ajout de nouvelles lignes ou y a-t-il justement
une limite ?
Dans les macros du post #3 la ligne :
VB:
DL = Cells(Rows.Count, "B").End(xlUp).Row
donne la dernière ligne non vide, il n'y a pas de limite.
( quoique dans les macros avec DL% je limite à 32767, mais on peut l'augmenter en faisant un DL as Long )

Ainsi dans votre fichier DL=145 :
1774682688214.png
 
Si encore une question après réflexion, petit à petit Excel s'infuse en moi et m'interroge :
• Comprendre dans le code VBA, quelles sont les lignes (le code) qui déterminent
dans la 1ère étape / le classement des numéros par ordre croissant dans les lignes.
Important j'imagine car c'est ensuite tout aussi applicable à des tas de tableaux que
l'on souhaiterait éventuellement traiter de la même manière (à savoir un classement
croissant dans les lignes).

• Et quelle serait alors la notation à effectuer qui détermine le contraire : un ordre
décroissant ?
 
Poursuite réflexion, évolution du classeur, nouvelle demande
Dépôt du nouveau classeur
________________________________________________________________________
Rappel de la demande initiale : Au-delà de l’orientation de cette demande récréative mais formatrice,
cela me permet également de découvrir et de me familiariser avec la complexité des macros pour d’autres
utilisations ultérieures éventuelles
.
Il s’agissait de pouvoir classer les tirages du jeu Crescendo
• Classer les nombres dans chaque ligne par ordre croissant (aspect horizontal).
• Classement ensuite de l’ensemble des lignes obtenues par ordre croissant (plan vertical).

Le traitement et vos solutions apportées ont été véritablement parfaites et même ingénieuses.
1/ Placement du résultat des tirages dans le Tableau Référence / colonnes V7-AE.

2/ Le bouton gris 1. Tableau référence permet le transfert de ce tableau vers
le Tableau traitement / colonnes B7-K.

3/ Le bouton bleu 2. Tri sur chaque ligne permet ensuite le classement croissant des nombres
sur chaque ligne horizontale dans le Tableau traitement.

4/ Le bouton vert 3. Tri des lignes par colonnes permet alors le classement de la totalité des
lignes par ordre croissant sur un plan vertical dans le Tableau traitement.
Remarque : le bouton vert 3. Tri des lignes par colonnes permet en fait déjà le traitement
global du tableau traitement. La fonction « Tri de chaque ligne » ayant été reliée dans la macro
du bouton final « Tri par colonnes ».
_______________________________________________________________________________________________________


J’ai ensuite réorganisé, modifié les emplacements des tableaux, optimisé l’aspect visuel global,
ajouté un bouton Reset en rapport au Tableau référence et après réflexion, je souhaite une évolution
de ce tableau. M’étant encore heurté à la complexité des macros en n’ayant pas du tout le niveau requis,
je fais appel à nouveau à vos services.
Je ne sais pas par contre si cette nouvelle demande peut poursuivre la requête initiale ou si elle doit
faire l'objet d'un nouveau dépôt.

Demande d’aujourd’hui :
• J’ai créé et rempli au-dessus du Tableau traitement 50 cellules en rapport aux 25 numéros.
Après appui sur le bouton 3. Tri des lignes par colonnes, mon souhait serait de pouvoir effectuer
un double-clic sur une ou plusieurs cellules couleur et que ce double-clic efface en intégralité
le/les numéro(s) identique(s) à l’intérieur du Tableau traitement.

• Avoir la possibilité d'une deuxième fonction double-clic sur la ou les cellules grisées voisines
de manière à ce qu’un numéro qui vient d’être effacé puisse réapparaitre dans l’intégralité de sa/ses
cellule(s) vierge(s), (un retour arrière en quelque sorte).
Est-ce la meilleure conception pour ce retour arrière, je ne sais pas.
Tout cela est-il possible ?

En vous remerciant par avance pour vos efforts et le partage que vous offrez, tellement louable
à mes yeux dans ce monde parfois si funeste.
 

Pièces jointes

- 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

Discussions similaires

Réponses
4
Affichages
228
F
Réponses
2
Affichages
1 K
F
Réponses
20
Affichages
3 K
FM MEDIAS
F
B
Réponses
4
Affichages
2 K
BobExcel
B
J
Réponses
11
Affichages
2 K
J
L
Réponses
5
Affichages
998
louloubru
L
M
Réponses
3
Affichages
2 K
M
Retour