Tri ordre alphabétique combobox : dépassement de capacité

  • Initiateur de la discussion Initiateur de la discussion yadla
  • 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 !

Re : Tri ordre alphabétique combobox : dépassement de capacité

Bonjour,

Exemple en PJ

Code:
Private Sub UserForm_Initialize()
  Dim temp()
   temp = Range([B2], [B2].End(xlDown))
  Call Tri(temp, 1, UBound(temp, 1))
  Me.ListBox1.List = temp
End Sub

Sub Tri(a(), gauc, droi)          ' Quick sort
 ref = a((gauc + droi) \ 2, 1)
 g = gauc: d = droi
 Do
     Do While a(g, 1) < ref: g = g + 1: Loop
     Do While ref < a(d, 1): d = d - 1: Loop
     If g <= d Then
       temp = a(g, 1): a(g, 1) = a(d, 1): a(d, 1) = temp
       g = g + 1: d = d - 1
     End If
 Loop While g <= d
 If g < droi Then Call Tri(a, g, droi)
 If gauc < d Then Call Tri(a, gauc, d)
End Sub

JB
Formation Excel VBA JB
 

Pièces jointes

Dernière édition:
Re : Tri ordre alphabétique combobox : dépassement de capacité

Bonjour a tous

Si tu utilises le code de l'excellent Hervé

Code:
[COLOR=#0000ff]Dim[/COLOR][COLOR=black] i [/COLOR][COLOR=blue]As Byte[/COLOR][COLOR=black], j [/COLOR][COLOR=blue]As Byte[/COLOR]
[COLOR=blue]Dim[/COLOR][COLOR=black] temp [/COLOR][COLOR=blue]As String[/COLOR][COLOR=blue]With[/COLOR][COLOR=black] ComboBox1[/COLOR]
[COLOR=blue]For[/COLOR][COLOR=black] i = 0 [/COLOR][COLOR=blue]To[/COLOR][COLOR=black] .ListCount - 1[/COLOR]
[COLOR=blue]For[/COLOR][COLOR=black] j = 0 [/COLOR][COLOR=blue]To[/COLOR][COLOR=black] .ListCount - 1[/COLOR]
[COLOR=blue]If[/COLOR][COLOR=black] .List(i) < .List(j) [/COLOR][COLOR=blue]Then[/COLOR]
[COLOR=black]temp = .List(i)[/COLOR]
[COLOR=black].List(i) = .List(j)[/COLOR]
[COLOR=black].List(j) = temp[/COLOR]
[COLOR=blue]End If[/COLOR][COLOR=blue]Next[/COLOR][COLOR=black] j[/COLOR]
[COLOR=blue]Next[/COLOR][COLOR=black] i[/COLOR]
[COLOR=blue]End With[/COLOR]

remplace

Dim i As Byte, j As Byte
par Dim i as Integer,j as Integer
 
Re : Tri ordre alphabétique combobox : dépassement de capacité

Bonjour PierreJean,

Temps comparés pour 1000 éléments:

0,02 sec et 7 sec

JB
 

Pièces jointes

Re : Tri ordre alphabétique combobox : dépassement de capacité

Re

Il est evident que la methode de tri que tu proposes est bien plus rapide que la methode 'basique'
Chez moi d'ailleurs la difference est encore plus flagrante (8,5 secondes contre 0,015625)
mon intention etait surtout de faire comprendre la raison du depassement de capacité
 
Re : Tri ordre alphabétique combobox : dépassement de capacité

Bonjour pierrejean, BOISGONTIER, jp,

Je vous remercie pour vos réponses, mais en fait mon problème se pose sur une COMBOBOX et pas sur une listbox.

Avec le code de pierrejean, ya quand meme le dépassement de capacité... 😕 c'est le meme que celui que j'avais déjà pris (lien dans mon premier message)...

Je pense que je vais garder la méthode de BOISGONTIER qui prend un peu de temps... mais tant pis...

Je vous remercie beaucoup encore pour votre aide.
 
Dernière édition:
Re : Tri ordre alphabétique combobox : dépassement de capacité

Re PierreJean,

Ce n'est pas seulement le tri qui est en cause.
En utilisant le même algorithme de tri dans un tableau plutôt que de trier directement la ListBox, le temps passe de 7s à 1,3 s.

JB
 
Re : Tri ordre alphabétique combobox : dépassement de capacité

Bonjour
Bonjour Pierrejean

Ci dessous une autre technique de tri qui consiste à permuter deux lignes.
On arrête quand il n'y a plus de permutation.
Code:
Dim trouve As Byte
t = Timer()
Dim i As Long, j As Long
Dim temp As String
Me.ComboBox1.List = [b2:B1000].Value
    With ComboBox1
    Do
    trouve = 0
    For i = 0 To .ListCount - 2
        If .List(i) > .List(i + 1) Then
            temp = .List(i)
            .List(i) = .List(i + 1)
            .List(i + 1) = temp
            trouve = 1
        End If
        
    Next i
    If trouve = 0 Then Exit Do
   Loop
    End With
    MsgBox Timer() - t

Ce code n'est pas valable si la valeur à mettre au début et en dernière position comme dans le fichier.

JP
 
- 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
10
Affichages
764
Retour