tri listbox à 2 colonnes

Titoy

XLDnaute Junior
Bonjour Le Forum,

Je me suis beaucoup inspiré d'un code de Boisgontier pour établir mon code ci-dessous. En faite j'ai juste modifié les plages sélectionné et le nom des label ! :)

Pour résumer, un userform est lancé et je dois sélectionner une valeur s'affichant dans une list box.

La list box est composé de deux colonnes et ce code doit permettre de trier soit la colone "DPT" ou "LVILLE" sachant que quand je lance le tri, j'obtiens :

Erreur 9

L'indice n'appartient pas à la sélection


et cette ligne spécialement est mise en surbrilance
ref = a((gauc + droi) \ 2, colTri)



Code:
Private Sub UserForm_Initialize()
 With Sheets("matrice")
   Me.ListBox1.List = .Range("B12:C" & .[c65000].End(xlUp).Row).Value
 End With
End Sub



Private Sub lville_Click()
   Dim a()
   a = Me.ListBox1.List
   NbCol = UBound(a, 1) - LBound(a, 1) + 1
   Call tri(a(), LBound(a), UBound(a), NbCol, 1)
   Me.ListBox1.List = a
   Me.lville.ForeColor = vbRed
   Me.dpt.ForeColor = vbBlack
End Sub

Private Sub dpt_Click()
   Dim a()
   a = Me.ListBox1.List
   NbCol = UBound(a, 2) - LBound(a, 2) + 1
   Call tri(a(), LBound(a), UBound(a), NbCol, 2)
   Me.ListBox1.List = a
   Me.lville.ForeColor = vbRed
   Me.dpt.ForeColor = vbGreen
End Sub

Sub tri(a(), gauc, droi, NbCol, colTri)        ' Quick sort
 ref = a((gauc + droi) \ 2, colTri)                               ' ICI cette ligne 
 g = gauc: d = droi
 Do
     Do While a(g, colTri) < ref: g = g + 1: Loop
     Do While ref < a(d, colTri): d = d - 1: Loop
     If g <= d Then
       For c = 0 To NbCol - 1
         temp = a(g, c): a(g, c) = a(d, c): a(d, c) = temp
       Next
       g = g + 1: d = d - 1
     End If
 Loop While g <= d
 If g < droi Then Call tri(a, g, droi, NbCol, colTri)
 If gauc < d Then Call tri(a, gauc, d, NbCol, colTri)
End Sub

Je ne sais pas si avec seulement le code vous allez pouvoir faire quelque chose,

Peux t-on m'expliquer pk les variable Nbcol et coltri ne sont pas défini ?
Peux être cela viendrait de là ?

Je suis largué !
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : tri listbox à 2 colonnes

Bonjour,

Code:
Private Sub lville_Click()
   Dim a()
   a = Me.ListBox1.List
   NbCol = UBound(a, 2) - LBound(a, 2) + 1
   Call tri(a(), LBound(a), UBound(a), NbCol, 1)
   Me.ListBox1.List = a
   Me.lville.ForeColor = vbRed
   Me.dpt.ForeColor = vbBlack
End Sub

Private Sub dpt_Click()
   Dim a()
   a = Me.ListBox1.List
   NbCol = UBound(a, 2) - LBound(a, 2) + 1
   Call tri(a(), LBound(a), UBound(a), NbCol, 0)
   Me.ListBox1.List = a
   Me.lville.ForeColor = vbRed
   Me.dpt.ForeColor = vbRed
End Sub

JB
 

Discussions similaires

Réponses
4
Affichages
208

Statistiques des forums

Discussions
312 195
Messages
2 086 079
Membres
103 112
dernier inscrit
cuq-laet