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

Solution
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) =...
Je n'avais pas saisi la particularité clic, mais clic droit !
Effectivement ça fonctionne.
Par contre, ta solution est en quelque sorte comme un nouveau projet indépendant du
classeur initial puisque le bouton reset ne fonctionne pas, les 3 boutons principaux (gris,
bleu, vert) ne fonctionnent pas et le visuel de ton tri se retrouve dans le tableau référence/import.

Il faut que je cogite tout ça, serai-je capable ensuite de recréer un classeur unique,
ceci est une autre histoire vu mon niveau Excel semblable au vol des éphémères
virevoltant sous les réverbères par les soirs bleu d'été...
Merci en tout cas pour cette solution.
 
vous n'avez qu'à modifier le tableau à gauche (ajouter/supprimer des lignes, modifier des chiffres) et puis clicquer les 25 chiffres en haut et à droit vous aurez le résultat.
La même macro avec une pause de quelque secondes entre chaque phase.
Ce n'est pas une autre histoire.
 

Pièces jointes

vous n'avez qu'à modifier le tableau à gauche (ajouter/supprimer des lignes, modifier des chiffres) et puis clicquer les 25 chiffres en haut et à droit vous aurez le résultat.
La même macro avec une pause de quelque secondes entre chaque phase.
Ce n'est pas une autre histoire.
Merci à vous bsalv pour cette réalisation hyper efficace et qui solutionne tous les critères.
Je n’avais pas saisi de prime abord la particularité du clic droit.
Ce dont je m’aperçois dans votre réalisation, c’est que tout est en quelque sorte automatisé.

N’ayant pas de compétences affirmées en VBA, en ouvrant les modules et les tableaux, je ne
peux que saisir l’intention. Je ne peux pas interpréter le codage effectué.

Vous avez donc a priori :
• créer (peut-être) un automatisme en rapport aux macros initiales (du module 1)
• cet automatisme se trouve maintenant a priori dans la/les macro(s) (module 2)
• mais ensuite, les tableaux sur le classeur ne sont plus aux mêmes emplacements qu’auparavant
maintenant B9 ►K / AB9►AK + création d’un petit tableau, emplacement où sont positionnés les 25 n°.

Mais dans la/les macro(s) du module 2, je ne vois pas de référencement des cellules permettant de
délimiter ces emplacements. Si je voulais intervenir, modifier des emplacements, modifier les tableaux,
ajouter d’autres valeurs, je ne vois du tout où se situent leurs positionnements (leurs écritures).

♦ Après il est possible qu’amener un explicatif soit trop compliqué ou beaucoup trop long dans la
mesure où je n’ai pas déjà une base de connaissance Excel suffisante, ce que je comprendrai tout à fait.
Encore merci pour le travail effectué.
 
Dernière édition:
le clicque droit et les modifications fait au tableau à gauche sont détectés dans le module de la feuille "Feuil1". Donc si vous clicquez avec la souris sur le tab de cette feuille et vous choississez "programmacode ...", vous les trouvez.
  • le "Worksheet_BeforeRightClick" filtre les "rightClicks" dans la plage des 25 chiffres et si cela est le cas, lance la macro "All_in_one"
  • le "Worksheet_Change" détecte un changement dans le tableau à gauche et si cela est le cas, lance la macro "All_in_one"
Le module1 est supprimé pour éliminer toute confusion.
J'ai ajouté du commentaire dans la macro "All_In_One"
 

Pièces jointes

Dernière édition:
le clicque droit et les modifications fait au tableau à gauche sont détectés dans le module de la feuille "Feuil1". Donc si vous clicquez avec la souris sur le tab de cette feuille et vous choississez "programmacode ...", vous les trouvez.
  • le "Worksheet_BeforeRightClick" filtre les "rightClicks" dans la plage des 25 chiffres et si cela est le cas, lance la macro "All_in_one"
  • le "Worksheet_Change" détecte un changement dans le tableau à gauche et si cela est le cas, lance la macro "All_in_one"
Le module1 est supprimé pour éliminer toute confusion.
J'ai ajouté du commentaire dans la macro "All_In_One"
• Et bien, j'ai fait plusieurs clics en divers endroits, chercher "programmacode" ... je ne trouve pas.
• Je pige pas les 2 lignes qui suivent pour délimiter les cellules, mais peut-être qu'il s'agit en fait
d'un automatisme qui détecte tout changement ?
  • le "Worksheet_BeforeRightClick" filtre les "rightClicks" dans la plage des 25 chiffres et si cela est le cas, lance la macro "All_in_one"
  • le "Worksheet_Change" détecte un changement dans le tableau à gauche et si cela est le cas, lance la macro "All_in_one"
En résumé, mon niveau d'Excel est minimaliste. J'en suis désolé.
 

Pièces jointes

  • 2026-04-04_153541.jpg
    2026-04-04_153541.jpg
    280.5 KB · Affichages: 11
quand je vois le capture d'écran du #22, alors ces macros ne sont plus dans le PJ de mon poste #21. Je pense que vous utilisez un mauvais fichier.
J'ai repris le fichier #21, fait des captures d'écran des différentes feuilles.
Ce que je ne pige pas en regardant les macros, c’est comment dans le codage sont déterminées les emplacements
de cellules en rapport aux différents tableaux du classeur. Fait également différents clics sans succès ...
""le clicque droit et les modifications fait au tableau à gauche sont détectés dans le module de la feuille "Feuil1". Donc si vous clicquez avec la souris sur le tab de cette feuille et vous choississez "programmacode ...", vous les trouvez.""

♦ Autre chose / Si je veux modifier la largeur des colonnes entre B et K, le fait d'appuyer sur
la/les lettre(s) de la colonne déclenche le système de calcul : Largeur de colonne n'apparait pas.
Pourquoi ou comment y remédier ?
 

Pièces jointes

  • Worksheet.jpg
    Worksheet.jpg
    113.7 KB · Affichages: 5
  • Visuel 1.jpg
    Visuel 1.jpg
    23.3 KB · Affichages: 4
  • Module 2 All in one suite.jpg
    Module 2 All in one suite.jpg
    168.4 KB · Affichages: 1
  • Module 2 All in one 1.jpg
    Module 2 All in one 1.jpg
    255.7 KB · Affichages: 1
  • Général -vide.jpg
    Général -vide.jpg
    22.9 KB · Affichages: 3
Dernière édition:
concernant les emplacements, j'avais crée quelque plage nommées et tableaux structurés. Comme ça, quand VBA utilise leur noms, VBA connait leur position. Vous pouvez les visualiser avec cette macro
VB:
Sub M_Emplacements()

     On Error Resume Next
     For Each nm In ThisWorkbook.Names
          Set c = Range(nm.Name)
          MsgBox nm.Name & vbLf & "feuille : " & c.Parent.Name & vbLf & "Adresse : " & c.Address(0, 0), vbInformation, "Plage Nommée"
     Next
     On Error GoTo 0

     For Each LO In ActiveSheet.ListObjects
          MsgBox LO.Name & vbLf & "feuille : " & c.Parent.Name & vbLf & "Adresse : " & LO.Range.Address(0, 0), vbInformation, "Tableau structuré"
     Next
End Sub

On a votre capture d'écran "Visuel 1.jpg", si vous clicquez double là sur "Feuil1 (Feuil1)", vous verrez le module de la feuille "Feuil1" avec les macros d'évenements qui j'ai décrit (cfr. supra)

Quand vous faites un clicque droite sur votre colonne K, par exemple, pour changer son largeur, la macro "Worksheet_BeforeRightClick" a priorité sur le window qu'on y voit normallement, alors, il faut "bloquer" ces "évents" temporairement. J'ai ajouté 2 macros "E_ON" et "E_OFF" avec cette fonction. Donc avant que vous voulez modifier les largeurs des colonnes ou des autres choses après un clicque droite, vous lancez "E_OFF" et vous pouvez tout faire comme d'habitude. Puis quand tout est fait,vous lancez "E_ON".

Je suppose que votre problème majeur est que vous ne voyez pas des adresses dans mes macros. Les tableaux structurés sont des outils vraiment pratiques, donc si on sait bien les manipuler, on sait faire tas de choses en quelque lignes VBA. On peut même déplacer ces tableaux vers une autre feuille sans modifier VBA, supér !!!

J'ai ajouté une flèche au milieu des 2 tableaux et si vous avez bloqué les events avec "E_OFF" et vous modifiez le tableau "TBL_Efface" en colonne AN, vous y ajoutez/supprimez des chiffres et puis vous poussez cette flèche, cela vous plait peut-être mieux ?

En état "E_OFF" et vous clicquez sur une de 25 cellules, il ne se passera rien ...
 

Pièces jointes

Dernière édition:
concernant les emplacements, j'avais crée quelque plage nommées et tableaux structurés. Comme ça, quand VBA utilise leur noms, VBA connait leur position. Vous pouvez les visualiser avec cette macro
VB:
Sub M_Emplacements()

     On Error Resume Next
     For Each nm In ThisWorkbook.Names
          Set c = Range(nm.Name)
          MsgBox nm.Name & vbLf & "feuille : " & c.Parent.Name & vbLf & "Adresse : " & c.Address(0, 0), vbInformation, "Plage Nommée"
     Next
     On Error GoTo 0

     For Each LO In ActiveSheet.ListObjects
          MsgBox LO.Name & vbLf & "feuille : " & c.Parent.Name & vbLf & "Adresse : " & LO.Range.Address(0, 0), vbInformation, "Tableau structuré"
     Next
End Sub

On a votre capture d'écran "Visuel 1.jpg", si vous clicquez double là sur "Feuil1 (Feuil1)", vous verrez le module de la feuille "Feuil1" avec les macros d'évenements qui j'ai décrit (cfr. supra)

Quand vous faites un clicque droite sur votre colonne K, par exemple, pour changer son largeur, la macro "Worksheet_BeforeRightClick" a priorité sur le window qu'on y voit normallement, alors, il faut "bloquer" ces "évents" temporairement. J'ai ajouté 2 macros "E_ON" et "E_OFF" avec cette fonction. Donc avant que vous voulez modifier les largeurs des colonnes ou des autres choses après un clicque droite, vous lancez "E_OFF" et vous pouvez tout faire comme d'habitude. Puis quand tout est fait,vous lancez "E_ON".

Je suppose que votre problème majeur est que vous ne voyez pas des adresses dans mes macros. Les tableaux structurés sont des outils vraiment pratiques, donc si on sait bien les manipuler, on sait faire tas de choses en quelque lignes VBA. On peut même déplacer ces tableaux vers une autre feuille sans modifier VBA, supér !!!

J'ai ajouté une flèche au milieu des 2 tableaux et si vous avez bloqué les events avec "E_OFF" et vous modifiez le tableau "TBL_Efface" en colonne AN, vous y ajoutez/supprimez des chiffres et puis vous poussez cette flèche, cela vous plait peut-être mieux ?

En état "E_OFF" et vous clicquez sur une de 25 cellules, il ne se passera rien ...
Un grand merci pour ce retour explicatif. Après je suis bien loin de mon côté de pouvoir
concevoir tout cela n'ayant que des notions VBA limitées. Mais bon cela m'aide déjà à
appréhender l'aspect conception.
Bien d'avoir ajouter de nouveaux boutons permettant ensuite la modification de la taille des
colonnes.
De mon côté, je me suis aperçu en fait que le dernier tri, le classement croissant des lignes sur
le plan vertical ne me servait à rien. J'ai donc éliminé la macro suivante en fin de feuille et ça
fonctionne parfaitement, coup de chance pour moi !
___________________________________________________________________
Set c = .Range 'tableau à droite avec ses entêtes
With SH
.Sort.SortFields.Clear 'reset propriétés du triage
For j = 1 To N2 'boucler les colonnes du TS droite
.Sort.SortFields.Add2 Key:=c.Columns(j), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 'trier chaque colonne ascendant
Next j
With .Sort 'effectuer le triage du TS à droite avec ces propriétés
.SetRange c
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
If bPause Then '4ième pause, après triage vertical
Range("Statut").Value = "Fini triage vertical"
DoEvents
Application.Wait Now + TimeSerial(0, 0, iDelai)
End If
_______________________________________________________________________

■ Néanmoins encore une question, j'ai vraiment du mal avec cette typologie de traitement des macros,
comment manipuler, modifier des informations.
• Que faut-il faire, si je souhaite que le tableau de traitement référencé entre AB8 / AK8
soit en fait positionné en Q8 / Z8 par exemple ?

Un grand merci pour votre aide. J'apprécie vraiment.
Je ne sais pas si je dois après clôturer cette requête et comment elle doit être faite
si c'est obligatoire ?
 
Dernière édition:
quand on connait le nom d'un tableau strucuré, c'est facile de savoir ses propriétés, par exemple son adresse. Je l'avais déjà montré dans #25.
Vous pouvez insérer de lignes et/ou des colonnes, comme ça ces tableaux changent de position, mais dans le code VBA, il ne faut pas modifier des choses,
voir PJ et la macro "M_Deplacer" qui déplace les TS sans modifier le code VBA.
 

Pièces jointes

quand on connait le nom d'un tableau strucuré, c'est facile de savoir ses propriétés, par exemple son adresse. Je l'avais déjà montré dans #25.
Vous pouvez insérer de lignes et/ou des colonnes, comme ça ces tableaux changent de position, mais dans le code VBA, il ne faut pas modifier des choses,
voir PJ et la macro "M_Deplacer" qui déplace les TS sans modifier le code VBA.
Merci pour toutes les solutions apportées et votre implication globale si généreuse.
 
- 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
232
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
1 K
louloubru
L
M
Réponses
3
Affichages
2 K
M
Retour