Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
XL 2021Trier des numéros par ordre croissant lignes et colonnes
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 !
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.
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) =...
Bonjour bsalv, j'ouvre le classeur mais rien ne fonctionne.
Est-ce dû au type d'enregistrement du fichier Excel ? Je suis sur Excel / Office 2016 = 2021, j'ai débloqué
le fichier au niveau sécurité.
c'est 2016 (=alors, cela ne fonctionne pas) ou 2021 (je suppose que cela fonctionne, moi, j'ai 365) ???
Les boutons sont inutiles, il faut clicquer avec la souris droite sur une des 25 cellules avec des chiffres de B2:L4
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.
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é.
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"
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é.
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 ?
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 ...
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 ?
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.
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.
- 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