[VBA] Tri d'un tableau sur plus de 3 critères

4 réponses
Avatar
HD
Bonjour,

Pour trier un tableau Excel en VBA j'utilise Sort... mais le souci est que
cette fonction est limitée à 3 critères... lorsque je lance ma ligne vba:

Columns("A:Z").Sort Key1:=Range("F1"), Order1:=xlAscending,
Key2:=Range("U1"), Order2:=xlAscending, Key3:=Range("K1"),
Order3:=xlAscending, Key4:=Range("D1"), Order4:=xlAscending, Header:=xlNo

j'obtiens un message d'erreur...

Avez vous une autre fonction pour réaliser des tris de tableaux ?

Merci d'avance pour votre aide

Cordialement,

HD

4 réponses

Avatar
h2so4
Bonjour,

une manière de faire est de créer une colonne supplémentaire qui est la concaténation de toutes les clés (à conditions que le critère de tri soit le même pour toutes ces clés) et de faire le tri basé sur c ette colonne

il faut s'assurer que lors de la concaténation chaque clé a une longueu r fixe (mettre des zéros ou des blancs, le cas échéeant)
Avatar
MichD
Bonjour,

Tu as essayé quelque chose comme ceci :

Tu crées les conditions à partir du plus général vers le plus spécifique
comme dans : Continent - Pays - Ville - Nom du client - Prénom du client ....

'----------------------------------------
Sub test()

Dim Sh As Worksheet
Set Sh = Worksheets("Feuil1") 'Nom feuille à adapter

With Sh
With .Range("A:Z")
.Sort Key1:=Sh.Range("F1"), Order1:=xlAscending, _
Key2:=Sh.Range("U1"), Order2:=xlAscending, _
Key3:=Sh.Range("K1"), Order3:=xlAscending, Header:=xlNo

.Sort Key1:=Sh.Range("D1"), Order1:=xlDescending, Header:=xlNo
End With
End With
End Sub
'----------------------------------------


MichD
------------------------------------------
"HD" a écrit dans le message de groupe de discussion : jeejjv$lmv$

Bonjour,

Pour trier un tableau Excel en VBA j'utilise Sort... mais le souci est que
cette fonction est limitée à 3 critères... lorsque je lance ma ligne vba:

Columns("A:Z").Sort Key1:=Range("F1"), Order1:=xlAscending,
Key2:=Range("U1"), Order2:=xlAscending, Key3:=Range("K1"),
Order3:=xlAscending, Key4:=Range("D1"), Order4:=xlAscending, Header:=xlNo

j'obtiens un message d'erreur...

Avez vous une autre fonction pour réaliser des tris de tableaux ?

Merci d'avance pour votre aide

Cordialement,

HD
Avatar
LSteph
Bonjour,

Avec ou sans VBA.. le principe:

Tu dois procèder semi-récursivement.. exemple pour 5 critères

trie d'abord dans l'odre du premier au dernier
les 3 derniers critères
puis les 2 premiers

Cordialement.

--
LSteph




"HD" a écrit dans le message de
news:jeejjv$lmv$
Bonjour,

Pour trier un tableau Excel en VBA j'utilise Sort... mais le souci est que
cette fonction est limitée à 3 critères... lorsque je lance ma ligne vba:

Columns("A:Z").Sort Key1:=Range("F1"), Order1:=xlAscending,
Key2:=Range("U1"), Order2:=xlAscending, Key3:=Range("K1"),
Order3:=xlAscending, Key4:=Range("D1"), Order4:=xlAscending, Header:=xlNo

j'obtiens un message d'erreur...

Avez vous une autre fonction pour réaliser des tris de tableaux ?

Merci d'avance pour votre aide

Cordialement,

HD

Avatar
HD
Avec ou sans VBA.. le principe:
Tu dois procèder semi-récursivement.. exemple pour 5 critères
trie d'abord dans l'odre du premier au dernier
les 3 derniers critères
puis les 2 premiers


Ok, donc dans mon cas, au lieu d'utiliser:
Columns("A:Z").Sort Key1:=Range("F1"), Order1:=xlAscending, _
Key2:=Range("U1"), Order2:=xlAscending, Key3:=Range("K1"), _
Order3:=xlAscending, Key4:=Range("D1"), Order4:=xlAscending, Header:=xlNo

Je ferais un tri en 2 temps:
Columns("A:Z").Sort Key1:=Range("U1"), Order1:=xlAscending, _
Key2:=Range("K1"), Order2:=xlAscending, Key3:=Range("D1"), _
Order3:=xlAscending, Header:=xlNo
Columns("A:Z").Sort Key1:=Range("F1"), Order1:=xlAscending, Header:=xlNo

Cordialement,

HD