Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Trie Tableau VBA

6 réponses
Avatar
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é)?

6 réponses

Avatar
chrisn
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

Avatar
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" a écrit dans le message de
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




Avatar
michdenis
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 écrit dans le message de 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" a écrit dans le message de
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




Avatar
Emcy
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" a écrit dans le message de
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" a écrit dans le message de
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" a écrit dans le message de
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









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

"Emcy" a écrit dans le message de
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" a écrit dans le message de
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" a écrit dans le message de
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" a écrit dans le message de
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













Avatar
chrisn
"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