Listbox limité, utilisation tableau [Résolu]

Messages postés
234
Date d'inscription
dimanche 18 janvier 2009
Statut
Membre
Dernière intervention
28 juillet 2019
- - Dernière réponse : toki127
Messages postés
234
Date d'inscription
dimanche 18 janvier 2009
Statut
Membre
Dernière intervention
28 juillet 2019
- 13 août 2012 à 12:02
Bonjour à tous,

Tout d'abord, je précise que je ne suis pas du tout expert de vb... ;)

Pour faire du tri dans des données, j'utilise plusieurs listbox. Tout fonctionne comme je le souhaite, SAUF lorsque le nombre de données dépasse les 37000 et quelques...
Car j'utilise listbox.listcount et la valeur devient négative, et mes lignes au-delà ne sont plus traitées... :(

J'aimerai donc palier à ce problème :
- en créant mes lignes directement dans un tableau, chose que je ne maitrise pas du tout... :S
dans ce cas, j'aurai besoin de savoir créer un tableau, le remplir (équivalent de .additem), supprimer des lignes, et recopier les données dans une listbox pour affichage du résultat.
- ou alors existe t il une astuce pour pouvoir utiliser les données au-delà de 37xxx ?

Merci d'avance pour votre aide,
Bon dimanche

tOKi127
Afficher la suite 

16 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
3
Merci
Bonjour,
Un tableau dynamique se déclare et se dimensionne par Dim
Ouvre ton aide VB6 sur les mots (instructions) Dim, Redim et Redim Preserve. Ce sera mille fois plus simple que de tenter de t'expliquer ici les explications que tu y trouveras, accompagnées d'exemples !
Mais une chose m'étonne :
SAUF lorsque le nombre de données dépasse les 37000 et quelques...

D'où proviennent donc ces données ? (Question importante car la solution peut dépendre de la réponse).

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 144 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
234
Date d'inscription
dimanche 18 janvier 2009
Statut
Membre
Dernière intervention
28 juillet 2019
0
Merci
alors je viens de refaire le test,
j'ajoute 33649 items à ma listbox.
ils sont bien affichés, mais le listbox1.listcount m'affiche "- 31887"
on en déduit donc que le listcount est borné à 32768.

Le problème est donc que lorsque je veux traiter toutes les lignes par une boucle de 0 à listcount, seules les 32768 premières lignes sont traitées.

En espérant avoir été à peu près clair! ;)

Merci de ta réponse, je vais jeter un coup d'oeil à Dim Redim Preserve...

tOKi127
Commenter la réponse de toki127
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Une listbox est en effet limitée, en ce qui concerne sa gestion, à un nombre d'articles inférieur ou égal à la limite d'un entier ( soit donc : 32,767 ).
Voilà ! Et nul n'y peut rien !
Reste que d'autres contrôles gèrent au-delà (telle une MSFLEXGRID).
Reste également surprenant que tu aies besoin d'alimenter une listbox par un tel nombre d'articles !
Tu n'as pas répondu à la seule question intéressante : d'où proviennent ces données ?
Le "tri" de données se fait en général sur les données et non sur le contrôle qui les héberge !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
234
Date d'inscription
dimanche 18 janvier 2009
Statut
Membre
Dernière intervention
28 juillet 2019
0
Merci
Oh! Excuses moi, je croyais que tu me demandais d'où venait les données (l'histoire des 32768)

Les données sont en fait une succession de nombres, crées avec plusieurs boucles for...next.

Une fois tous ces nombres dans le tableau, je fais le tri suivant différents critères (variables d'un coup sur l'autre)

tOKi127
Commenter la réponse de toki127
Messages postés
234
Date d'inscription
dimanche 18 janvier 2009
Statut
Membre
Dernière intervention
28 juillet 2019
0
Merci
Sinon, après avoir lu les aides en question, j'arrive à créer mon tableau comme souhaité!

Me reste un problème, trouver un équivalent à listbox.removeitem, qui me permettait de supprimer la ligne de la listbox et de décaler les suivantes (pas de ligne vide).

Pourrais tu m'aiguiller pour ceci?

Encore merci! ;)

tOKi127
Commenter la réponse de toki127
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
trouver un équivalent à listbox.removeitem, qui me permettait de supprimer la ligne de la listbox et de décaler les suivantes (pas de ligne vide)

et :
Les données sont en fait une succession de nombres, crées avec plusieurs boucles for...next.

Réponse sans la moindre hésitation :
n'ajouter que ce que l'on veut avoir !
Etonnante question.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
234
Date d'inscription
dimanche 18 janvier 2009
Statut
Membre
Dernière intervention
28 juillet 2019
0
Merci
:)

Le problème, c'est qu'au moment ou je crée la liste, les critères de sélection ne sont pas arrêtés!

Par exemple, je mets dans une liste tous les pays du Monde.
Et après en fonction de critères, j'enlève ceux de l'hémisphère Nord, ou ceux commencant par A ou ceux ayant plus de 6 lettres......


tOKi127
Commenter la réponse de toki127
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Le problème, c'est qu'au moment ou je crée la liste, les critères de sélection ne sont pas arrêtés!

.....
Et après en fonction de critères, j'enlève ceux de l'hémisphère Nord, ou ceux commencant par A ou ceux ayant plus de 6 lettres......


Traduisons donc : ===>>> conception très maladroite

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
234
Date d'inscription
dimanche 18 janvier 2009
Statut
Membre
Dernière intervention
28 juillet 2019
0
Merci
je précise que je me sers du même outil pour garder une fois ceux en A, ou ceux en B, ou les autres, et qu'une fois mon tableau réactualisé avec toutes les données, j'en enlève d'autres, etc...
Je ne vois pas comment faire autrement, car pour faire une sélection parmi un ensemble, on est obligé d'avoir cet ensemble accessible quelque part, non?

tOKi127
Commenter la réponse de toki127
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Fais donc comme tu l'entends, mais sans mon aide, dans ce cas !
Les seules manières orthodoxes et logiques que je connaisse sont les suivantes :
- soit une base de données constituée une fois pour toutes et sur laquelle tu fais des requêtes. Et c'est la méthode la plus "sage"
- soit le remplissage de ta listbox avec expressions conditionnelles (tes critères).
Je ne peux t'accompagner dans l'approche que tu as choisie (contraire à ma "religion").
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
0
Merci
Bonjour,

Une remarque. Personne n'est assez patient pour passer 32 000 items un par un dans une Listbox. Même que je dirais que 30, c'est déjà trop. Tu aurais un intérêt sérieux à faire le ménage avant de remplir ta listbox. Sinon ton visage va servir de cible au champ de tir.
Commenter la réponse de Utilisateur anonyme
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Bonjour, cmarcotte,
Sa démarche tend en fait à :
- remplir une listbox avec tous les articles
puis
- sélectionner certains articles sur la base de critères, à partir de l'ensemble des articles
C'est-à-dire : la lourdeur absolue d'une "approche" qui tendrait à se servir de la listbox comme d'une base de données, mais sans pouvoir bénéficier des requêtes d'une base de données.
Voilà pourquoi je l'abandonne, personnellement.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
0
Merci
Bonjour ucfoutu,


Sa démarche tend en fait à :
- remplir une listbox avec tous les articles
puis
- sélectionner certains articles sur la base de critères, à partir de l'ensemble des articles
C'est-à-dire : la lourdeur absolue d'une "approche" qui tendrait à se servir de la listbox comme d'une base de données, mais sans pouvoir bénéficier des requêtes d'une base de données.
Voilà pourquoi je l'abandonne, personnellement.


Tout à fait d'accord. C'est une démarche illogique. Il voudrait "torturer" ses utilisateurs et il ne ferait pas mieux. Personne ne va accepter de défiler 30000 articles d'une listbox, disons 20 fois, pour obtenir son résultat. Son utilisateur doit être capable de "cerner" une "zone de découpage" avant de commencer, sinon ce sera l'enfer et l'émeute.
Commenter la réponse de Utilisateur anonyme
0
Merci
Bonjour,

Pour continuer de taper sur le clou. J'imagine l'utilisateur qui sait qu'en cliquant sur la flèche, il va devoir regarder défiler un nombre incommensurable de lignes, pour trouver la bonne. Il est déjà "sur le gros nerf" juste à penser qu'il doit choisir 3, 4, 5, 6 ou plus d'articles et que s'il se trompe il va devoir tout reprendre du début. Il se trompe. Il est encore plus "sur le gros nerf" parce qu'il s'est trompé, qu'il doit recommencer et qu'il ne doit surtout pas se tromper une seconde fois. Il se trompe une seconde fois et il prend un café un cigarette pour se remonter le moral...

Comme supplice, cela risque d'être épouvantable.,
Commenter la réponse de Utilisateur anonyme
0
Merci
Bonjour,

Et puis, en partant de l'hypothèse de ucfoutu, que je crois mieux comprendre maintenant, et que le listbox en question ne servirait pas du moins au début, comme instrument de sélection; un simple textox serait sans doute plus approprié, ou même un dictionnary, de la bibliothèque Scripting. Il suffirait de tricher un peu et de mettre des chiffres comme clefs. Une fois une donnée enlevée, on repère le chiffre et on rebâti le dictionnary en conséquence. Mais ce ne serait jamais comme une vraie base de données.

Mais, prendre un listbox, ou tout autre contrôle non prévu à cet usage pour servir de conteneur de données, c'est tout simplement illogique.
Commenter la réponse de Utilisateur anonyme
Messages postés
234
Date d'inscription
dimanche 18 janvier 2009
Statut
Membre
Dernière intervention
28 juillet 2019
0
Merci
Bonjour,

Alors merci bien pour vos conseils! :)

Quelques précisions, il n'y a aucun utilisateur, simplement moi! :)

Je ne parcours pas les 33000 items, j'ai 3 textbox pour faire des choix.

J'ai finalement rebricoler le code pour stocker la totalité des données dans un tableau, puis un 2ème tableau tampon, avant d'afficher le résultat du tri dans une seule listbox.

Merci de votre intérêt et bonne journée

tOKi127
Commenter la réponse de toki127