XL 2013 Lignes de résultats surnuméraires dans une ListBox

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

kiko_23

XLDnaute Junior
Bonjour à tous,

Ayant été promptement aidé et éduqué hier sur un problème de tri, je me résous à vous soumettre un autre petit soucis qui m'ennuie depuis un moment, quelque chose me dit que pour les membres du forum cela devrait être une évidence :

Dans le fichier joint, un formulaire contenant une ComboBox permettant de chercher les occurrences d'un terme dans la feuille "table" et de les afficher dans une ListBox.
Mon problème : la ListBox affiche sous les résultats un nombre de lignes vides et sélectionnables dont je n'arrive pas à déterminer l'origine.

Merci d'avance pour votre aide et votre sagacité !
 

Pièces jointes

L'objet ComboBoxLiées peut apporter une aide précieuse pour ma mise à jour d'un tableau, avec Ajout, Modification. Suppression. Dans ce cas les ComboBox servent autant de champs de saisie d'éléments nouveaux que d'outil pour retrouver de l'existant.
Je comprends, non seulement ce que tu veux dire mais aussi le fait que par ailleurs j'ai probablement construit une usine à gaz et maladroitement réinventé la roue pour mon système d'ajout, modification et suppression des entrées de mon tableau source. Ça me peine un peu (euphémisme) vu que j'en étais au stade où tout était fonctionnel et ne me restait plus que ce problème de lignes vides, j'ai l'impression d'avoir ouvert une boite de Pandore avec mon "petit soucis" 😓
 
Je comprends, non seulement ce que tu veux dire mais aussi le fait que par ailleurs j'ai probablement construit une usine à gaz et maladroitement réinventé la roue pour mon système d'ajout, modification et suppression des entrées de mon tableau source. Ça me peine un peu (euphémisme) vu que j'en étais au stade où tout était fonctionnel et ne me restait plus que ce problème de lignes vides, j'ai l'impression d'avoir ouvert une boite de Pandore avec mon "petit soucis" 😓
Je vois que ça rigole, vous avez bien raison 😅 ... Mais du coup je vais revenir avec des questions parce que l'implémentation des combobox liées en lieu et place du système précédent avance bien mais me pose un ou deux autres "petits soucis". Je reviens vite vers vous comme ils disent !

Encore un grand merci à tous pour votre aide, votre patience et votre disponibilité.
 
L'objet ComboBoxLiées peut apporter une aide précieuse pour ma mise à jour d'un tableau, avec Ajout, Modification. Suppression. Dans ce cas les ComboBox servent autant de champs de saisie d'éléments nouveaux que d'outil pour retrouver de l'existant.
Alors voilà, en premier lieu, lorsque je multiplie les ComboBox je me retrouve avec certaines qui deviennent provisoirement des TextBoxs jusqu'à ce qu'un choix dans une des autres Combobox ait été effectué. Comme toutes les ComboBox et appels de chargement sont strictement similaires, j'avoue que je reste pour le moins interdit devant cet artefact.

Au cas où cela ne vous évoque rien spontanément je joins un fichier exemple présentant ce problème sur la ComboBox_theme .

Par ailleurs, je ne sais pas comment présélectionner une valeur dans ce système de ComboBox liées. Lorsque que je charge le formulaire de modification d'une entrée du tableau source, j'ai besoin que certaines ComboBox se prépositionnent sur la valeur ad hoc et précédemment j'utilisais une ligne du type :

ComboBox.Value = Worksheets("xxx").Cells(x, y).Value

Mais cela me retourne maintenant une run time error 1004.
Auriez-vous dans votre hotte et pour ma plus grande joie un indice à me donner sur ce sujet ?
 

Pièces jointes

Dernière édition:
Non, les ComboBox ne se transforment pas en TextBox. Mais il y a une limite au nombre de lignes de la liste au delà duquel son affichage n'est plus proposé. Dans ce cas votre réaction ainsi encouragée consiste à taper d'abord un début. Cependant si ça ne vous dérange pas de naviquer dans une liste bien trop longue vous pouvez forcer son affichage par Alt+Flèche bas. Pour élargir cette taille maximale vous pouvez augmenter la propriété ListRows de la ComboBox et affecter une limite encore supérieure à la propriété CLs.LMaxDropBtn juste avant 1ère actualisation.
Il existe aussi un objet ControlsAssociés pour le reste des informations de la lignes qui n'ont pas à participer à la recherche d'une ligne.
Vous auriez intérêt à faire subir à votre plage une commande Mettre sous forme de tableau. Ça permettrai de spécifier les intitulés de colonnes au lieu des numéros aux CLs.Add et CAs.Add.
 
Non, les ComboBox ne se transforment pas en TextBox. Mais il y a une limite au nombre de lignes de la liste au delà duquel son affichage n'est plus proposé. Dans ce cas votre réaction ainsi encouragée consiste à taper d'abord un début. Cependant si ça ne vous dérange pas de naviquer dans une liste bien trop longue vous pouvez forcer son affichage par Alt+Flèche bas. Pour élargir cette taille maximale vous pouvez augmenter la propriété ListRows de la ComboBox et affecter une limite encore supérieure à la propriété CLs.LMaxDropBtn juste avant 1ère actualisation.
Il existe aussi un objet ControlsAssociés pour le reste des informations de la lignes qui n'ont pas à participer à la recherche d'une ligne.
Vous auriez intérêt à faire subir à votre plage une commande Mettre sous forme de tableau. Ça permettrai de spécifier les intitulés de colonnes au lieu des numéros aux CLs.Add et CAs.Add.

Bonjour et merci pour cette réponse nocturne Dranreb ! Effectivement je n'avais pas réalisé qu'en tapant dans la textbox cela faisait apparaitre des propositions, je vais considérer la chose (même si pour l'instant j'ai suivi votre conseil et augmenté à la volée le .ListRows).

En revanche, pour ce qui est de la seconde partie de votre message qui doit répondre à mon problème de présélection, aussi bien sur ce que je devrais faire de l'objet ControlsAssociés que s'agissant de "(...) faire subir à votre plage une commande Mettre sous forme de tableau" et "(...) spécifier les intitulés de colonnes au lieu des numéros aux CLs.Add et CAs.Add", j'ai bien peur de ne pas saisir la marche à suivre et que cela dépasse mon niveau de compétence actuel.

Je suis confus d'être aussi peu aguerri, mais je suis obligé de vous solliciter à nouveau pour m'éclairer un peu plus.
 
D'habitude les plages de ce genre on les met sous forme de tableau.
Insérez devant une ligne, mettez-y des intitulés de colonnes, puis sélectionnez tout et commande Mettre sous forme de tableau, menu Accueil, groupe Styles. Ça coiffera la plage d'un objet ListObject avec lequel peuvent travailler mes objets ComboBoxLiées et ControlsAssociés
Ce dernier objet est un complément pour d'autres contrôles que les ComboBox servant à l'identification de la ligne. Il peut assumer le reste de la mise à jour d'une ligne pour des TextBox, ComboBox, CheckBox, Frame contenant des OptionButton, Label et Image
 
Merci beaucoup !

N'ayant jusqu'ici pas encore travaillé avec ListObject dans ce premier véritable projet sur Excel, il va hélas falloir me parler comme à un enfant de 4 ans 😌

J'ai suivi votre procédure et coiffé mon tableau avec des intitulés, mais dois-je tout de même déclarer quelque par ce ListObject ? Et quelle syntaxe devrais-je employer pour ma pré-selection d'un valeur dans une ComboBox ?
 

Pièces jointes

Non, il n'y a rien d'autre à faire, sauf à l'instruction CLs.Plage table il n'y a rien d'autre à ajouter: si on spécifie juste un Worksheet il assume son ListObjects(1) et vous pouvez spécifier les intitulés au lieu des numéros de colonnes.
Mais nom d'une pipe pourquoi un Multipage ?? je suis sûr que c'est inutile pour gérer toute la mise à jour d'un seul tableau, mais complet, lui !
 
Non, il n'y a rien d'autre à faire, sauf à l'instruction CLs.Plage table il n'y a rien d'autre à ajouter: si on spécifie juste un Worksheet il assume son ListObjects(1)
Mais nom d'une pipe pourquoi un Multipage ?? je suis sûr que c'est inutile pour gérer toute la mise à jour d'un seul tableau, mais complet, lui !

Je vais relire votre message jusqu'à ce que la lumière se fasse dans mon cerveau embrumé.

Pour ce qui est du Multipage, c'est parce que sur la version finale, le formulaire de recherche a une seconde partie dédiée à la recherche libre d'un terme ou d'un identifiant. A un stade précédent du développement il m'était apparu plus pratique de les séparer. Ceci étant mes formulaires d'ajout et de modification seront eux aussi multipages pour des raisons de clarté et de dimension, le nombre de champs à renseigner étant de 32 avec la possibilité d'entrer sur certains des textes relativement longs.
 
Non, il n'y a rien d'autre à faire, sauf à l'instruction CLs.Plage table il n'y a rien d'autre à ajouter: si on spécifie juste un Worksheet il assume son ListObjects(1) et vous pouvez spécifier les intitulés au lieu des numéros de colonnes.
Mais nom d'une pipe pourquoi un Multipage ?? je suis sûr que c'est inutile pour gérer toute la mise à jour d'un seul tableau, mais complet, lui !
Donc, en admettant - avec une bonne dose d'optimisme - que je vous suive, une instruction du type suivant devrait me permettre la présélection ?

Me.ComboBox_categorie.Value = Worksheet("table").ListObjects(1).DataBodyRange(2, 2).Value
 
32 colonnes ça va ! C'est raisonnable. mettez les toutes dans votre tableau.
Prévoyez des CAs Add pour ces contrôles. Ça sera certes un assez grand UserForm avec une Image probablement …

Je vous confirme que les 32 vont bien dans le même tableau, celui de mon fichier exemple n'a cette dimension que pour les tests, et effectivement il y a bien des previews d'images dans mon userform, mais pour l'instant ça ce sont les parties qui fonctionnent bien, ouf il y en a !
 
Je dois louper un truc parce que ça ne marche pas, avec Worksheet("table")... j'ai un "sub or function not defined" et avec Sheets("table")... c'est un "Type mismatch"

Peut-être cela a t'il un rapport avec l'instruction CLs.Plage table parce que je ne vois pas ce que j'aurai peut-être du modifier à cet endroit.
 

Pièces jointes

Je dois louper un truc parce que ça ne marche pas, avec Worksheet("table")... j'ai un "sub or function not defined" et avec Sheets("table")... c'est un "Type mismatch"

Peut-être cela a t'il un rapport avec l'instruction CLs.Plage table parce que je ne vois pas ce que j'aurai peut-être du modifier à cet endroit.

Alors, avec ActiveWorkbook.Worksheets("table") j'arrive bien à récupérer la valeur mais j'ai un "type mismatch" sur Parent.CBM_Change Me
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour