Trie Tableau VBA

Le
Emcy
Bonjours,

Comment faire en VBA pour trié une variable tableau avec 10 lignes et 4
colonnes (par exemple) par ordre croissant/ décroissant sur l'une des
colonnes ? Existe t-il des commande de trie (je n'en ai jamais entendu
parlé)?
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
chrisn
Le #1240698
Bonjour,

"Emcy" :

Existe t-il des commande de trie (je n'en ai jamais entendu
parlé)?

Ce n'est pas sur un tableau en mémoire, mais c'est bien un ordre de

tri :
Range("c2") parceque le tri est sur la colonne c et qu'il y a une
en-tête

Selection.Sort Key1:=Range("C2"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:úlse, _
Orientation:=xlTopToBottom


--
chrisn
mettre le bon fai, libertysurf pour me répondre

Emcy
Le #1275772
ça ne me va pas, je veux travailler sur des variable de type Tableau non pas
sur Excel (Dim MonTableau(1 to 10, 1 to 4) as string)

"chrisn" news:
Bonjour,

"Emcy" :

Existe t-il des commande de trie (je n'en ai jamais entendu
parlé)?

Ce n'est pas sur un tableau en mémoire, mais c'est bien un ordre de

tri :
Range("c2") parceque le tri est sur la colonne c et qu'il y a une
en-tête

Selection.Sort Key1:=Range("C2"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:úlse, _
Orientation:=xlTopToBottom


--
chrisn
mettre le bon fai, libertysurf pour me répondre




michdenis
Le #1275769
Bonjour Emcy,

Est-ce que tu cherches quelque chose dans le genre ?


Avec cette procédure, on peut trier une liste d'un
combobox ou listbox en ordre croissant.

Pour ce faire : La liste doit être :

A ) Multi-colonnes

B ) Le 1 dans la ligne de commandes signifie la colonne
sur laquelle le tri s'effectue.

C ) Cette procédurpeut servir aussi sur une plage de cellules.


'--------------------------------------
Sub Test()

'Trier une plage ayant plusieurs colonnes
'sur la première colonne de cette plage

Worksheets("Feuil1").ComboBox1.Clear

varr = Range(Cells(1, 1), Cells(10, 3))

'Pour une plage ayant plusieurs colonnes
QuickSort2 varr, 1, LBound(varr, 1), UBound(varr, 1)

Worksheets("Feuil1").ComboBox1.List = varr

End Sub
'--------------------------------------

'--------------------------------------
Sub QuickSort2(SortArray, col, L, R)
'Originally Posted by Jim Rech 10/20/98 Excel.Programming
'Modified to sort on first column of a two dimensional array
'Modified to handle a a second dimension greater than 1 (or zero)
Dim i, j, X, Y, mm

i = L
j = R
X = SortArray((L + R) / 2, col)

While (i <= j)
While (SortArray(i, col) < X And i < R)
i = i + 1
Wend
While (X < SortArray(j, col) And j > L)
j = j - 1
Wend
If (i <= j) Then
For mm = LBound(SortArray, 2) To UBound(SortArray, 2)
Y = SortArray(i, mm)
SortArray(i, mm) = SortArray(j, mm)
SortArray(j, mm) = Y
Next mm
i = i + 1
j = j - 1
End If
Wend
If (L < j) Then Call QuickSort2(SortArray, col, L, j)
If (i < R) Then Call QuickSort2(SortArray, col, i, R)
End Sub
'--------------------------------------


Salutations!



"Emcy" ça ne me va pas, je veux travailler sur des variable de type Tableau non pas
sur Excel (Dim MonTableau(1 to 10, 1 to 4) as string)

"chrisn" news:
Bonjour,

"Emcy" :

Existe t-il des commande de trie (je n'en ai jamais entendu
parlé)?

Ce n'est pas sur un tableau en mémoire, mais c'est bien un ordre de

tri :
Range("c2") parceque le tri est sur la colonne c et qu'il y a une
en-tête

Selection.Sort Key1:=Range("C2"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:úlse, _
Orientation:=xlTopToBottom


--
chrisn
mettre le bon fai, libertysurf pour me répondre




Emcy
Le #1241934
Bonjour,
je ne comprend pas bien comment fonctionne ta macro : c'est quoi cette
fonction SortArray (j'ai appuyer sur F1 pour avoir l'aide mais elle n'est
pas reconnue) ?

"michdenis" news:O9hr$
Bonjour Emcy,

Est-ce que tu cherches quelque chose dans le genre ?


Avec cette procédure, on peut trier une liste d'un
combobox ou listbox en ordre croissant.

Pour ce faire : La liste doit être :

A ) Multi-colonnes

B ) Le 1 dans la ligne de commandes signifie la colonne
sur laquelle le tri s'effectue.

C ) Cette procédurpeut servir aussi sur une plage de cellules.


'--------------------------------------
Sub Test()

'Trier une plage ayant plusieurs colonnes
'sur la première colonne de cette plage

Worksheets("Feuil1").ComboBox1.Clear

varr = Range(Cells(1, 1), Cells(10, 3))

'Pour une plage ayant plusieurs colonnes
QuickSort2 varr, 1, LBound(varr, 1), UBound(varr, 1)

Worksheets("Feuil1").ComboBox1.List = varr

End Sub
'--------------------------------------

'--------------------------------------
Sub QuickSort2(SortArray, col, L, R)
'Originally Posted by Jim Rech 10/20/98 Excel.Programming
'Modified to sort on first column of a two dimensional array
'Modified to handle a a second dimension greater than 1 (or zero)
Dim i, j, X, Y, mm

i = L
j = R
X = SortArray((L + R) / 2, col)

While (i <= j)
While (SortArray(i, col) < X And i < R)
i = i + 1
Wend
While (X < SortArray(j, col) And j > L)
j = j - 1
Wend
If (i <= j) Then
For mm = LBound(SortArray, 2) To UBound(SortArray, 2)
Y = SortArray(i, mm)
SortArray(i, mm) = SortArray(j, mm)
SortArray(j, mm) = Y
Next mm
i = i + 1
j = j - 1
End If
Wend
If (L < j) Then Call QuickSort2(SortArray, col, L, j)
If (i < R) Then Call QuickSort2(SortArray, col, i, R)
End Sub
'--------------------------------------


Salutations!



"Emcy" news:OCR%

ça ne me va pas, je veux travailler sur des variable de type Tableau non
pas

sur Excel (Dim MonTableau(1 to 10, 1 to 4) as string)

"chrisn" news:
Bonjour,

"Emcy" :

Existe t-il des commande de trie (je n'en ai jamais entendu
parlé)?

Ce n'est pas sur un tableau en mémoire, mais c'est bien un ordre de

tri :
Range("c2") parceque le tri est sur la colonne c et qu'il y a une
en-tête

Selection.Sort Key1:=Range("C2"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:úlse, _
Orientation:=xlTopToBottom


--
chrisn
mettre le bon fai, libertysurf pour me répondre









Emcy
Le #1241931
Oups c'est bon, j'ai tout compris : c'est bien ça que je recherchais. Merci
beaucoup !

"Emcy" news:%
Bonjour,
je ne comprend pas bien comment fonctionne ta macro : c'est quoi cette
fonction SortArray (j'ai appuyer sur F1 pour avoir l'aide mais elle n'est
pas reconnue) ?

"michdenis" news:O9hr$
Bonjour Emcy,

Est-ce que tu cherches quelque chose dans le genre ?


Avec cette procédure, on peut trier une liste d'un
combobox ou listbox en ordre croissant.

Pour ce faire : La liste doit être :

A ) Multi-colonnes

B ) Le 1 dans la ligne de commandes signifie la colonne
sur laquelle le tri s'effectue.

C ) Cette procédurpeut servir aussi sur une plage de cellules.


'--------------------------------------
Sub Test()

'Trier une plage ayant plusieurs colonnes
'sur la première colonne de cette plage

Worksheets("Feuil1").ComboBox1.Clear

varr = Range(Cells(1, 1), Cells(10, 3))

'Pour une plage ayant plusieurs colonnes
QuickSort2 varr, 1, LBound(varr, 1), UBound(varr, 1)

Worksheets("Feuil1").ComboBox1.List = varr

End Sub
'--------------------------------------

'--------------------------------------
Sub QuickSort2(SortArray, col, L, R)
'Originally Posted by Jim Rech 10/20/98 Excel.Programming
'Modified to sort on first column of a two dimensional array
'Modified to handle a a second dimension greater than 1 (or zero)
Dim i, j, X, Y, mm

i = L
j = R
X = SortArray((L + R) / 2, col)

While (i <= j)
While (SortArray(i, col) < X And i < R)
i = i + 1
Wend
While (X < SortArray(j, col) And j > L)
j = j - 1
Wend
If (i <= j) Then
For mm = LBound(SortArray, 2) To UBound(SortArray, 2)
Y = SortArray(i, mm)
SortArray(i, mm) = SortArray(j, mm)
SortArray(j, mm) = Y
Next mm
i = i + 1
j = j - 1
End If
Wend
If (L < j) Then Call QuickSort2(SortArray, col, L, j)
If (i < R) Then Call QuickSort2(SortArray, col, i, R)
End Sub
'--------------------------------------


Salutations!



"Emcy" news:OCR%

ça ne me va pas, je veux travailler sur des variable de type Tableau non
pas

sur Excel (Dim MonTableau(1 to 10, 1 to 4) as string)

"chrisn" news:
Bonjour,

"Emcy" :

Existe t-il des commande de trie (je n'en ai jamais entendu
parlé)?

Ce n'est pas sur un tableau en mémoire, mais c'est bien un ordre de

tri :
Range("c2") parceque le tri est sur la colonne c et qu'il y a une
en-tête

Selection.Sort Key1:=Range("C2"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:úlse, _
Orientation:=xlTopToBottom


--
chrisn
mettre le bon fai, libertysurf pour me répondre













chrisn
Le #1241929
"Emcy" a écrit dans le message de news:

ça ne me va pas, je veux travailler sur des variable de type
Tableau non pas sur Excel (Dim MonTableau(1 to 10, 1 to 4) as
string)


Si vous ne voulez pas renvoyer votre tableau dans une feuille, vous

pouvez toujours recréer un tri à bulle par exemple.

http://www.vbfrance.com/code.aspx?ID 359

--
chrisn
mettre le bon fai, libertysurf pour me répondre

Publicité
Poster une réponse
Anonyme