Depassement capacite listbox [Résolu]

ccir 11 Messages postés mercredi 6 août 2003Date d'inscription 24 mars 2015 Dernière intervention - 27 mars 2006 à 17:51 - Dernière réponse : rvblog 794 Messages postés vendredi 4 mars 2005Date d'inscription 12 juin 2012 Dernière intervention
- 27 mars 2006 à 23:34
Voila mon probleme, comment faire pour entrer 200.000 lignes dans une liste? sinon on peut remplacer la liste avec quel controle pour entrer 200.000 lignes?
Afficher la suite 

4 réponses

jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 27 mars 2006 à 17:57
+3
Utile
Salut,

Ca passe 200000 Lignes dans un listBox. j viens de teste avec VB6 et le code suivant

Private Sub Form_Load()
Dim i As Long


While i < 200000
List1.AddItem i
i = i + 1

Wend
End Sub

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
Cette réponse vous a-t-elle aidé ?  
ccir 11 Messages postés mercredi 6 août 2003Date d'inscription 24 mars 2015 Dernière intervention - 27 mars 2006 à 18:09
0
Utile
Oui tu a raison, il suffit de bien dimenssioner le index. Il faut le mettre Dim I as Long, et ca marche meme avec 500.000 lignes. Merci mille fois!
ccir 11 Messages postés mercredi 6 août 2003Date d'inscription 24 mars 2015 Dernière intervention - 27 mars 2006 à 18:29
0
Utile
Oui mais j'ai verifie tout a l'heure de manipuler la liste et je n'arrive pas a effacer le derniers 500 lignes! pourtant elles sont affiche dans la liste!

fait la liste multiselect, extended,
Essaye ca:



Private Sub Command1_Click()
Dim i As Long
DoEvents
List1.Visible = False
While i < 200000
DoEvents
List1.AddItem i
i = i + 1

Wend
List1.Refresh
Text1.Text = List1.ListCount
DoEvents
List1.Visible = True

End Sub

Private Sub Command2_Click()
Dim i As Long
For i = 0 To List1.ListCount
If List1.Selected(i) = True Then
List1.RemoveItem (i)
End If
List1.Refresh
Next i

End Sub
rvblog 794 Messages postés vendredi 4 mars 2005Date d'inscription 12 juin 2012 Dernière intervention - 27 mars 2006 à 23:34
0
Utile
Salut ccir, salut julien,

je viens pour la cause perdue, Victor le Nettoyeur était pas dispo :)
le problème est que le ListBox.ListCount est un Integer, dommage !
on pourrait toujours écrire :

Private Sub Command2_Click()
Dim i As Long

For i = 0 To 200000
If List1.Selected(i) = True Then
List1.RemoveItem (i)
End If
List1.Refresh
Next i


End Sub

mais ListBox.Selected attend un argument de type Integer,
et puis le ListIndex est de type Integer,
en fait, le ListBox est fait pour travailler avec des Integer,
ça se voit dans AddItem, qui attend un argument Index de type Integer encore dommage!

Ben alors! la solution de la cause perdue?
On utilise un ListView (Microsoft Windows Common Controls 6.0), en plus, il recèle de fonctionnalités plus intéressantes les une que les autres (icones, vues différentes, colonnes, drag'n drop, node check,...), c'est un des composants utilisé par l'Explorer (c'est peu dire).


Private Sub Form_Load()
With Me.ListView1
'autorise la multi-sélection
.MultiSelect = True
'vue de type Détails
.View = lvwReport
'ajoute une colonne
.ColumnHeaders.Add , , "Eléments"
End With
End Sub


Private Sub Command1_Click()
Dim i As Long
With Me
With .ListView1
'cache la liste
.Visible = False
'vide la liste
.ListItems.Clear
'de 1 à 200000
For i = 1 To 200000
DoEvents
'ajoute un élément
.ListItems.Add i, , "Elément " & i
Next i
End With
'affiche le compte
.Text1.Text = .ListView1.ListItems.Count
DoEvents
'affiche la liste
.ListView1.Visible = True
End With
End Sub


Private Sub Command2_Click()
Dim liTemp As ListItem
Dim m_Col As Collection
Set m_Col = New Collection
With Me.ListView1
'pour chaque élément de la liste
For Each liTemp In .ListItems
's'il est seléctionné
If liTemp.Selected Then
'mémorise l'élément courant
'on ne peut pas le supprimer ici
m_Col.Add liTemp, CStr(.ListItems.Count - liTemp.Index)
End If
Next liTemp
'pour chaque élément mémorisé
For Each liTemp In m_Col
'le supprime
.ListItems.Remove liTemp.Index
Next liTemp
End With
End Sub


Merci d'appuyer sur Accepter la réponse, si elle te plaît (si et seulement si),
ça peut aider les prochains qui rencontre le même problème, et qui trouveront une réponse déjà testée et validée par toi.

Voilà, à +,


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.