Je trie le contenu une listbox (1 colonne ) dans un userform avec ce code :
With ListBox1
For i = 0 To .ListCount - 1
For j = 0 To .ListCount - 1
If UCase(.List(i)) < UCase(.List(j)) Then
temp = .List(j)
.List(j) = .List(i)
.List(i) = temp
End If
Next j
Next i
End With
Je cherche a adapter ce code pour qu'il tri une listbox avec 2 colonnes. Cl�
du trie 1�re colonne.
Je gal�re un peu. Cela est-il seulement possible ?
D' avance merci pour votre aide.
Cordialement.
Excel...lent
Métode de tri rapide.
http://boisgontierjacques.free.fr/pages_site/formulaireListes2colonnes.htm#ListBoxTrie
JB
http://boisgontierjacques.free.fr
On 3 mai, 11:19, "Excel...lent" <vpc...@orange.fr> wrote:
> Re bonjour,
>
> Je trie le contenu une listbox (1 colonne ) dans un userform avec ce code :
>
> With ListBox1
> For i = 0 To .ListCount - 1
> For j = 0 To .ListCount - 1
> If UCase(.List(i)) < UCase(.List(j)) Then
> temp = .List(j)
> .List(j) = .List(i)
> .List(i) = temp
> End If
> Next j
> Next i
> End With
>
> Je cherche a adapter ce code pour qu'il tri une listbox avec 2 colonnes. Clé
> du trie 1ère colonne.
> Je galère un peu. Cela est-il seulement possible ?
La proc�dure est activ�e par un clic sur un bouton de
commande "CommandButton2_Click"
Tu dois adapter le nom du combobox2.
Copie ceci : "Sub QuickSort2(SortArray, col, L, R)"
dans ton module formulaire.
La proc�dure trie les entr�es de ton combobox sur la
premi�re colonne de celle-ci.
'-----------------------------------------
Private Sub CommandButton2_Click()
With Me.ComboBox2
Var = .List
QuickSort2 Var, 1, LBound(Var, 1), UBound(Var, 1)
.RowSource = ""
.List = Var
End With
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
'-----------------------------------------
"Excel...lent" <vpc...@orange.fr> a �crit dans le message de news:
%2394E2Kq...@TK2MSFTNGP06.phx.gbl...
"Excel...lent" <vpc...@orange.fr> a �crit dans le message de
news:%2394E2Kq...@TK2MSFTNGP06.phx.gbl...
Merci � vous deux pour votre aide.
Jacques :
Merci pour tes ressources. j'ai choisi ton code "ListBox multi colonnes
tri�" ici
:ttp://boisgontierjacques.free.fr/pages_site/formulaireListes2colonnes.htm
Denis :
Ta soluce fonctionne bien sauf qu'elle tri sur la 2�me colonne de ma listbox
alors
que je souhaiterai qu'elle tri sur la 1�re.
J'ai oubli� de vous dire que ma list box est accompagn� de 2 textbox et un
commandbutton qui me permettent d'alimenter la listbox. Je saisi dans les 2
txtbox les textes des col1 et col2 et je valide l'insertion dans la listbox
avec le commandbutton.
Le tout �tant dans une Frame. Et je crois que c'est la qu'il y a un soucis.
Je m'explique.
Quand j'essaie vos codes dans des userform simple avec la m�me chose que
dans le mien mais pas a l'interieur d'une frame tout fonctionne tr�s bien.
Mais lorsque j'int�gre les codes de la m�me fa�on dans mon userform et bien
le trie ne s'op�re plus. Le dernier item saisi reste en dernier dans la
listbox. Il semblerait que le fait qu'il y ait une frame le tri ne
s'effectue pas.
Bizzare non ?
Merci pour votre aide
Amicalement
Marc
"Excel...lent" <vpc...@orange.fr> a �crit dans le message de
news:%2394E2Kq...@TK2MSFTNGP06.phx.gbl...
"Excel...lent" <vpc...@orange.fr> a �crit dans le message de
news:%2394E2Kq...@TK2MSFTNGP06.phx.gbl...