tri listbox à 2 colonnes

  • Initiateur de la discussion Initiateur de la discussion Titoy
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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é !
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
504
  • Question Question
XL 2021 listbox
Réponses
18
Affichages
285
Réponses
4
Affichages
505
Réponses
1
Affichages
180
Réponses
3
Affichages
665
Retour