Listbox limité, utilisation tableau

Résolu
toki127 Messages postés 241 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 31 mai 2021 - 12 août 2012 à 10:40
toki127 Messages postés 241 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 31 mai 2021 - 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

16 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 août 2012 à 10:48
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
3
toki127 Messages postés 241 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 31 mai 2021
12 août 2012 à 11:37
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 août 2012 à 11:52
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
0
toki127 Messages postés 241 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 31 mai 2021
12 août 2012 à 12:00
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
toki127 Messages postés 241 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 31 mai 2021
12 août 2012 à 12:06
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 août 2012 à 13:45
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
0
toki127 Messages postés 241 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 31 mai 2021
12 août 2012 à 15:03
:)

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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 août 2012 à 17:04
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
0
toki127 Messages postés 241 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 31 mai 2021
12 août 2012 à 17:27
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 août 2012 à 18:10
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
0
Utilisateur anonyme
12 août 2012 à 18:16
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 août 2012 à 18:31
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
0
Utilisateur anonyme
12 août 2012 à 19:15
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.
0
Utilisateur anonyme
12 août 2012 à 23:59
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.,
0
Utilisateur anonyme
13 août 2012 à 00:15
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.
0
toki127 Messages postés 241 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 31 mai 2021
13 août 2012 à 12:02
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
0
Rejoignez-nous