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 ?
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 ?
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, michel.arn...@gmail.com 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 ?
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 ?