Depassement capacite listbox

Résolu
ccir Messages postés 11 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 24 mars 2015 - 27 mars 2006 à 17:51
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 - 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?

4 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
27 mars 2006 à 17:57
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
3
ccir Messages postés 11 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 24 mars 2015
27 mars 2006 à 18:09
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!
0
ccir Messages postés 11 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 24 mars 2015
27 mars 2006 à 18:29
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
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
27 mars 2006 à 23:34
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>
0
Rejoignez-nous