Autres Trier plusieurs colonnes en VBA

Caninge

XLDnaute Accro
Bonjour à tous,

je peux faire une macro en triant une seule colonne, mais comment faire pour trier un grand nombre
de colonnes sans faire un copier- coller et modifier à chaque fois la plage.
J'ai les colonnes B4:B18 C4:C18 D4:D18...... jusqu'à P4:p18 et ensuite B23:B120....jusqu'à P23:p120.
Pouriez-vous me donner un petit coup de mai.
Merci

Sub Tri_Produits()
Application.ScreenUpdating = False '-> Pour éviter les tremblements
Range("B4:B18").Select
ActiveWorkbook.Worksheets("Listes").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Listes").Sort.SortFields.Add Key:=Range("B5"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Listes").Sort
.SetRange Range("B4:B18")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, Caninge

Caninge
Une piste que je te laisse creuser
(avec une boucle)
VB:
Sub test()
Mon_Tri_Porteur "B4:B18", xlAscending
End Sub
Private Sub Mon_Tri_Porteur(Plage As String, Sens As XlSortOrder)
With Range(Plage)
.Sort key1:=.Cells(1), Order1:=Sens
End With
End Sub
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Bonjour,

Tri les colonnes A,B,C

VB:
Sub tri()
 Set Rng = Range("A2:A" & [A65000].End(xlUp).Row)
 Rng.Sort key1:=[A2], Order1:=xlAscending, Header:=xlNo
 Set Rng = Range("B2:B" & [B65000].End(xlUp).Row)
 Rng.Sort key1:=[B2], Order1:=xlAscending, Header:=xlNo
 Set Rng = Range("c2:c" & [c65000].End(xlUp).Row)
 Rng.Sort key1:=[c2], Order1:=xlAscending, Header:=xlNo
End Sub


Boisgontier
 

Staple1600

XLDnaute Barbatruc
Re

Donc je reprends mon idée du post#3
VB:
Sub test_A()
Application.ScreenUpdating = False
Gare_de_Triage Range("B4:P18"), xlAscending
End Sub
Sub test_B()
Application.ScreenUpdating = False
Gare_de_Triage Range("B4:P18"), xlDescending
End Sub

Private Sub Gare_de_Triage(P As Range, s As XlSortOrder)
Dim i&, c As Range
With P.Columns
For i = 1 To .Count: Set c = P.Columns(i): c.Sort key1:=c.Cells(1), Order1:=s: Next
End With
End Sub
 

Caninge

XLDnaute Accro
Bonjour,

me revoici, j'ai essayé de mettre les procédures sur le fichier mais cela ne fonctionne pas.
Mes connaissances sont limitées.

Je vous envoie la feuille et si pouvez me mettre la macro au bon endroit...

Merci d'avance.
 

Pièces jointes

  • Produits.xlsx
    157.3 KB · Affichages: 17

Staple1600

XLDnaute Barbatruc
Bonjour le fil, Caninge

Caninge
Test OK sur ton fichier exemple
VB:
Sub test_C()
Application.ScreenUpdating = False
trier_COL Range("B3"), xlDescending
trier_COL Range("B22"), xlDescending
End Sub
Sub Test_D()
Application.ScreenUpdating = False
trier_COL Range("B3"), xlAscending
trier_COL Range("B22"), xlAscending
End Sub
Private Sub trier_COL(DebutT As Range, sens As XlSortOrder)
Dim p As Range, c As Range, l&
Set p = Rows(DebutT.CurrentRegion.Item(1).Row).SpecialCells(xlCellTypeConstants, 2)
l = DebutT.CurrentRegion.Rows.Count
For Each c In p
c.Resize(l).Sort key1:=c.Cells(1), Order1:=sens, Header:=xlYes, Orientation:=xlTopToBottom
Next
End Sub
NB: Il y a tout ce qu'il faut sur le net et ici comme tutos pour savoir comment copier du code VBA dans un classeur et lancer les macros qu'il contient.
Ici, j'ai mis deux macros de tri
(ascendant et descendant)
 

Caninge

XLDnaute Accro
Bonjour le fil, Staple1600

J'ai disposé les macros au bon endroit, enfin il me semble.
Ça fonctionne.
Tu peux jeter un coup d’œil s'il te plait sur mon fichier maintenant modifié.
Merci

CANINGE
 

Pièces jointes

  • Produits_V2.xlsm
    164.6 KB · Affichages: 42

Staple1600

XLDnaute Barbatruc
Re

=>Caninge
Aucune question, vraiment ?
Même pas sur cela au hasard ;)
Private Sub trier_COL(DebutT As Range, sens As XlSortOrder)
Dans ce cas, tes connaissances en VBA ne sont pas si limitées que tu le penses, alors.
(cf message#1)
 

Caninge

XLDnaute Accro
si si ! je ne comprend pas trop, dire rien du tout serait plus juste.J'arrive à modifier certaines macros mais c'est tout.

Déjà que je ne connais pas la langue anglaise.

Mais j'aurais aimé apprendre.

Private Sub trier_COL(DebutT As Range, sens As XlSortOrder)

il me semble que cette ligne veut dire que la macro s'exécute toute seule sans appuyer sur un bouton. C'est ça ?

A plus
 

Staple1600

XLDnaute Barbatruc
Re

Caninge
Tu veux pratiquer le VBA, ce sera forcément en anglais.
Si j'ai pointé "la lumière" sur cette macro, c'est parce que c'est une macro paramétrée (les paramètres sont entre les parenthèses)
D'habitude, les macros sont de ce type
VB:
Sub Macro1()
MsgBox Date
End Sub
Dans Sub trier_COL, le 1er paramètre DebutT
(DebutT pour DébutTableau) sert à indiquer la 1ere cellule du tableau à trier. Et le second sens indique le sens du tri.
Et donc selon le tri que l'on veut faire, on utilise trier_COL en la paramétrant; comme dans cet exemple
VB:
Sub test_Ca()
Application.ScreenUpdating = False
'Ici on va trier le tableau qui en commence en B3
'Et le tri sera descendant (de Z à A )
trier_COL Range("B3"), xlDescending
End Sub
Voilà, pour les explications.
 

Discussions similaires

Réponses
3
Affichages
547
Réponses
1
Affichages
1 K

Statistiques des forums

Discussions
311 713
Messages
2 081 808
Membres
101 819
dernier inscrit
lukumubarth