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

yadla

XLDnaute Occasionnel
Bonjour le forum,

Après une petite recherche sur le forum, j'ai trouvé cette discussion :
https://www.excel-downloads.com/threads/trier-en-ordre-alphabetique-dans-un-combobox.49022/

Le problème est que je traite plus de 650 lignes dans la feuille Excel, et donc il me met un message d'erreur : "dépassement de capacité".

Comment je pourrais faire ?

Merci pour votre aide
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
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

  • F_liste_trieex.zip
    24.7 KB · Affichages: 45
Dernière édition:

pierrejean

XLDnaute Barbatruc
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
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
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

  • Copie de F_liste_trieey.zip
    25.3 KB · Affichages: 57
  • Copie de F_liste_trieey.zip
    25.3 KB · Affichages: 58
  • Copie de F_liste_trieey.zip
    25.3 KB · Affichages: 60

pierrejean

XLDnaute Barbatruc
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é
 

yadla

XLDnaute Occasionnel
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é... :confused: 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:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
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
 

pierrejean

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

Re

Et pour rehabiliter (un peu) la methode de tri traditionelle
une methode 3
 

Pièces jointes

  • Copie de F_liste_trieey.zip
    31.7 KB · Affichages: 35
  • Copie de F_liste_trieey.zip
    31.7 KB · Affichages: 39
  • Copie de F_liste_trieey.zip
    31.7 KB · Affichages: 39

pierrejean

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

Re Yadla

Voila avec combobox
Mais avais-tu remplaçé les Dim Byte par Dim Integer ?

Re JB

OK , c'est pour cela que j'ai remis l'affaire sur le metier
 

Pièces jointes

  • Copie de F_liste_trieey.xls
    107 KB · Affichages: 91

jp14

XLDnaute Barbatruc
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
 

Discussions similaires

Réponses
10
Affichages
514

Statistiques des forums

Discussions
312 148
Messages
2 085 770
Membres
102 969
dernier inscrit
pizza