Pages

[XL-2010] Adapter Tri rapide (quickSort) pour listbox sujet

samedi 1 février 2014




Bonjour

J'ai un liste de donnée qui s'affiche dans une listbox

Mon code fonction, avec la liste non triée, mais lorsque je veux la trier
à partir d'un bouton, le tri ne fonction pas.

ou est le problème ?
merci d'avance


Code:


Private Sub UserForm_Activate()
Dim Tb, Ii, Ij
Dim CCle As Integer
Dim TabListBox As Variant
Dim i, j, k, l As Byte
Dim temp As String

'CCle = Val(UsfLignes.CboCle1)
CCle = UsfLignes.Lign


         
    If CCle < 20 Then
        Tb = TableClient.Range("A2:C" & TableClient.Range("A" & TableClient.Rows.Count).End(xlUp).Row)
            Else
              If CCle > 20 And CCle < 40 Then
                    Tb = TableFournisseur.Range("A2:C" & TableFournisseur.Range("A" & TableFournisseur.Rows.Count).End(xlUp).Row)
                      Else
                    Tb = Tablegene.Range("A2:C" & Tablegene.Range("A" & Tablegene.Rows.Count).End(xlUp).Row)
              End If
    End If


    With Me.ListBox1
      .ColumnCount = 2
      .ColumnWidths = "45;100"
        For i = LBound(Tb, 1) To UBound(Tb, 1)
                  ' MAJ 18/01/2014
       
            If Tb(i, 1) = Range("Paramètre!B13") Then
               
                .AddItem Tb(i, 2)
                .List(.ListCount - 1, 1) = Tb(i, 3)
                j = j + 1
            End If
        Next i
       

       
       
End With


'MAJ 18/01/2014
'
' Tri le plan des comptes clients
'
       
       
'If UsfLignes.CboCle1 <= 39 Then
'TabListBox = ListBox1.List


'For i = 0 To UBound(TabListBox)
 ' For j = 0 To UBound(TabListBox)
  '  If TabListBox(i, 1) < TabListBox(j, 1) Then
  '  For k = 0 To 1
    '    temp = TabListBox(j, k)
    '  TabListBox(j, k) = TabListBox(i, k)
      '  TabListBox(i, k) = temp
    ' Next k
  ' End If
 ' Next j
'Next i

'ListBox1.List() = TabListBox
'Else
'End If

'
' je rajoute l'appel à quicktrisort
'
Call QUICKSORT(t(), loBound(t), upBound(t))    'Proc récursive


End Sub


Le mode standard

Code:


Public Sub QUICKSORT(t() As Long, _
                    ByVal loBound As Long, _
                    ByVal upBound As Long)
                     
    Dim med_value As Long
    Dim hi As Long
    Dim lo As Long
    Dim i As Long

    If loBound >= upBound Then Exit Sub
    i = Int((upBound - loBound + 1) * Rnd + loBound)
    med_value = t(i)
    t(i) = t(loBound)
    lo = loBound
    hi = upBound
    Do
        Do While t(hi) >= med_value
            hi = hi - 1
            If hi <= lo Then Exit Do
        Loop
        If hi <= lo Then
            t(lo) = med_value
            Exit Do
        End If
        t(lo) = t(hi)
        lo = lo + 1
        Do While t(lo) < med_value
            lo = lo + 1
            If lo >= hi Then Exit Do
        Loop
        If lo >= hi Then
            lo = hi
            t(hi) = med_value
            Exit Do
        End If
        t(hi) = t(lo)
    Loop
    ' Recursive calls
    QUICKSORT t(), loBound, lo - 1
    QUICKSORT t(), lo + 1, upBound
End Sub






Aucun commentaire:

Enregistrer un commentaire