Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Capacité Max d'une ListBox

1 réponse
Avatar
michel.arnoux
Bonjour,

Sous VB6, apparemment une ListBox a une capacit=E9 limit=E9e.
J'ai en effet un programme qui fonctionne, mais, lorsqu'il "mouline"
un volume plus important de donn=E9es, il bloque.
Je n'arrive pas =E0 d=E9terminer cette limite

Apr=E8s examen, il appara=EEt que le nombre List1.ListIndex a une valeur
d'entier et ne peut pas d=E9passer la valeur 32786
Par contre la ListBox peut se remplir au del=E0 de cette valeur.

Dans ces conditions
- je compte le nombre de ligne avec un entier Double
- avec une boucle For Next
- je lis la position 0, puis je l'efface
- puis je lis la position 0 ... qui est la suivante ...
- ...je vide en quelque sorte ListBox par le haut
C'est un peu tordu, mais =E7a marche; qu'en pensez vous ?

A d=E9faut, je pense qu'il faut utiliser des Tableaux et
utiliser un classement par dichotomie (longue liste) pour remplacer la
fonction "Sort" de la ListBox"
L'utilisation de Tableaux m'obligera =E0 utiliser des Sous-Programmes au
lieu de Proc=E9dures, puisqu'il n'est pas possible de faire travailler 2
Proc=E9dures sur un m=EAme Tableau (alors que c'est possible avec
ListBox).
Que me conseillez vous ?

Merci, et bonne soir=E9e
Michel

1 réponse

Avatar
JB
Bonsoir,

Exemple:

http://boisgontierjacques.free.fr/pages_site/formulairelistetriee.htm#ListeT riee

Private Sub UserForm_Initialize()
Dim temp()
temp = Range("liste3") ' liste tableau temp (1 To n,1 To 1) ou
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



On 6 avr, 19:31, wrote:
Bonjour,

Sous VB6, apparemment une ListBox a une capacité limitée.
J'ai en effet un programme qui fonctionne, mais, lorsqu'il "mouline"
un volume plus important de données, il bloque.
Je n'arrive pas à déterminer cette limite

Après examen, il apparaît que le nombre List1.ListIndex a une valeur
d'entier et ne peut pas dépasser la valeur 32786
Par contre la ListBox peut se remplir au delà de cette valeur.

Dans ces conditions
- je compte le nombre de ligne avec un entier Double
- avec une boucle For Next
-   je lis la position 0, puis je l'efface
-   puis je lis la position 0 ... qui est la suivante ...
-   ...je vide en quelque sorte ListBox par le haut
C'est un peu tordu, mais ça marche; qu'en pensez vous ?

A défaut, je pense qu'il faut utiliser des Tableaux et
utiliser un classement par dichotomie (longue liste) pour remplacer la
fonction "Sort" de la ListBox"
L'utilisation de Tableaux m'obligera à utiliser des Sous-Programmes au
lieu de Procédures, puisqu'il n'est pas possible de faire travailler 2
Procédures sur un même Tableau (alors que c'est possible avec
ListBox).
Que me conseillez vous ?

Merci, et bonne soirée
Michel