Alimenter un combobox par une liste filtrée suivant les résultats d'autres combobox

fgehin

XLDnaute Junior
Bonjour,

Je souhaite alimenter la liste d'un combobox qui s'appelle "code_produit_1" suivant les résultats de 2 combobox "categorie_article_1" et "genre_1".
J'ai une base de données qui contient des colonnes nommées "nature_du_produit", "genre" et nom_du_produit".

Mes 3 combobox se situent dans un userform. J'initialise les combobox "categorie_article_1" et "genre_1" par 2 listes. Je récupère les valeurs sélectionnées dans des variables publiques "categoriearticle1" et "genre1".

Je voudrais maintenant filtrer ma BDD (colonne "nature_du_produit" filtrée par le critère "categoriearticle1" et colonne "genre" filtrée par le critère "genre1") et récupérer les données filtrées dans une liste qui vienne alimenter le combobox "code_produit_1".

Quelqu'un pourrait-il m'aider ?...

Merci beaucoup d'avance pour votre aide.

Faustine
 

fgehin

XLDnaute Junior
Merci Dranreb, mais finalement je préfère que ça ne fonctionne pas en cas de manque d'information, ça forcera les utilisateurs à remplir tous les champs...

J'ai par contre effectué quelques modifications (renommage de contrôles tel que recommandé, modification de GarnirChamps() pour inclure les tailles et upload de la dernière version de ma BDD) et je me retrouve avec une run-time error '9' Subscript out of range dans GarnirChamps(), au niveau de la ligne 'TSpl = Split(VLgn(1, c), vbLf). L'événement survient dans beaucoup de sélection de nom d'article (mais pas dans tous les cas).

Une idée du pourquoi ?...

Merci beaucoup d'avance

Faustine
 

Pièces jointes

  • Devis Forum v8.xlsm
    851.6 KB · Affichages: 43

Dranreb

XLDnaute Barbatruc
For C = 43 To 54 Step 2 alors qu'on ne récupère que 51 colonnes dans la procédures précédentes !… Bien qu'on en définisse 64 vides dans celle d'avant.
Bon le classement des noms de tissus dans la liste ne vous intéresse pas, si je comprends bien ?
 
Dernière édition:

fgehin

XLDnaute Junior
ah oui, petit oubli, ça marche maintenant !

Si je vois bien comment récupérer le nom du tissu et la taille (par les contenu des CBx correspondants), je me demande comment récupérer le prix final contenu dans TPrixTiss(N). Cad, comment lui faire enregistrer la valeur qui correspond à la recherche tu tissus dans les colonnes de tissu ?
 

fgehin

XLDnaute Junior
Merci (et désolée pour les questions de béotienne...).

Je m'attaque maintenant aux options.

J'ai réalisé une 1ère étape consistant à créer d'autres CBxliées, grâce à une nouvelle plage de données dans une autre feuille de la BDD. Ceci me permet de lier les CBx 1 (liste des options possibles) et 2 (liste des choix possibles pour chaque option) et de récupérer le prix de l'option dans un label.

J'ai déjà un (petit) problème à ce stade : j'ai en réalité 5 CBxliées qui contiennent les mêmes informations (on peut choisir jusqu'à 5 options, mais les listes d'options sont identiques les unes les autres). Je peux bien sûr créer autant de sub séparées que d'options (comme je l'ai déjà fait pour CL1 et CL2), mais est-il possible de décorreller les résultats de ces CBx d'options, tout en conservant le facilité et la puissance de tous les modules relatifs aux CBx liés ?

L'étape n° 2 serait de remplir les CBx 1 non de la liste entière d'options, mais de la liste d'options relative au modèle qui a été choisi (cette liste se trouve dans la BDD principale, en colonne 55. Est-ce possible ? Ou faut-il procéder autrement ?

Merci encore d'avance pour votre aide.

Bien cordialement,

Faustine
 

Pièces jointes

  • Devis Forum v9.xlsm
    395.6 KB · Affichages: 51

Dranreb

XLDnaute Barbatruc
Non, je n'aime pas du tout la répétition 5 fois d'une ComboBox.
je vous ai dit réunissez plutôt les options possibles pour le produit dans une ListBox à sélections multiples.
Il ne restera qu'à sélectionner celles qu'on voudra retenir.

Je sens qu'un Dictionary ne va pas tarder à faire son entrée.
Vous devriez d'ores et déjà cocher la référence Microsof Scripting Runtime.

Oh, vous pourriez quand même me répondre quelque chose à propos du classement des noms de tissus dans la liste.
 

fgehin

XLDnaute Junior
oui mais je ne vois pas comment une listbox à sélection multiple peut faire le job :
  • je dois pouvoir sélectionner 1 à 5 options : par exemple, je peux vouloir sélectionner une option broderie, ET une option manche courte, ET une option coloris de parement
  • pour chacune de ces options, il va falloir que je précise le choix réalisé sur l'option :
    • pour la broderie : de quel type il s'agit
    • pour l'option de manche : la longueur de la manche
    • pour le parement : le coloris choisi
  • (le choix final étant parfois déterminant pour le prix)
comment faire rentrer toutes ces combinaisons de possibilités dans une listbox à choix multiple ?

J'ai déjà coché la référence Microsof Scripting Runtime pour autre chose...

Enfin, pour le classement des noms de tissus (que je n'avais pas vu, désolée !), je ne comprends pas en quoi consiste ce classement, qu'apporte-t-il ?
 

Dranreb

XLDnaute Barbatruc
On pourrait imaginer que la sélection d'une option provoque un balayage des options sélectionnées et la demande de précision nécessaire si elle manque.
Mais peut être vaut il mieux s'orienter vers une ListBox à sélection unique et des contrôles pour modifier celle sélectionnée
Ou encore une ListBox panier dans laquelle vous empilez les options désirées que vous aurez choisies au moyen d'un seul jeu de contrôles.
Le classement apporte surtout une homogénéité par rapport aux listes des CBx prise en charge par CL
il permet de repérer plus facilement un nom de tissu dans la mesure où ils se retouvent ensembles dans la liste par ordre alphabétique. En cas de frappe des 1ers caractères la liste est positionné sur tous ceux qui commencent comme tapé.
 

fgehin

XLDnaute Junior
Allez, va pour le classement !

Pour les options, je ne comprends tjs pas pourquoi on ne peut pas faire avec des combobox comme pour le reste. Qu'apportent les listbox, à sélection unique ou multiple ?

Dans tous les cas, cela réglera-t-il le problème de la répétition (on veut pouvoir sélectionner plusieurs options différentes sur la base d'une même liste d'options) ?

Enfin et surtout, comment faire pour que la liste d'options disponibles correspondent à celle issue de la sélection du produit et non à la liste entière ?
 

Dranreb

XLDnaute Barbatruc
Déjà ce serait assez difficile de ne proposer que les options qui n'ont pas déjà été retenues. Alors que si elles sont toutes dans une liste le problème ne se pose pas, chacune y est une fois stigmatisée comme retenue ou pas.

Une ListBox sert à montrer plusieurs lignes. Donc plusieurs options différentes possiblement retenues.

C'est là qu'entre en scène le Dictionary. On y loge toutes les options pour pouvoir ne ressortir que celles dont les clés figurent dans la cellule du produit séparés par des espaces ou des vbLf, voire les deux grâce au
Split(Replace(VLgn(1, 55), vbLf, " "))
Il me vient une idée: derrière le code clé, et une désignation, dans les lignes de la bibliothèque d'options, pourraient figurer jusqu'à 3 ou 4 textes à placer dans des Label devant des TextBox de saisie affichées seulement s'il y a lieu derrière le Label de désignation de l'option en cours de décision. Enfin c'est du moins peut être une idée à creuser… Mais c'est probablement plus compliqué parce que pour bien faire il faudrait aussi qu'elle indique des règles de majoration du prix en fonction des quantités saisies. Si toutefois ce sont toujours des quantités…
Mais vous savez quoi ? Je commence vaguement à me demander … si je suis bien à la retraite !
La passion d'un ancien métier a peut être quand même quelques limites…
 
Dernière édition:

fgehin

XLDnaute Junior
Merci Dranred pour tout, je comprends que tout ceci dépasse largement le petit coup de main sur un forum :).

Je pense que je vais me débrouiller avec les CBx liées et répéter le code 5 fois, même si c'est inélégant du point de vue du langage.

J'ai un doute sur la pertinence des list box - surtout sur leur lisibilité (certaines options sont attachées à plus de 30 choix possibles) - et c'est clairement tout un champ que je ne maîtrise pas.

Y a-t-il juste un moyen simple de récupérer la liste des options relatives à chaque modèle pour alimenter le 1er CBx des 5 CBx liés ?

Merci encore pour tout... je sais que c'est beaucoup !

Bien cordialement,

Faustine
 

Dranreb

XLDnaute Barbatruc
Bonjour
Il ne me semble pas possible de limiter les options proposées par combinaison de plusieurs colonnes pour chaque produit.
Il faudrait déjà que ces options puissent être regroupées par familles uniques et que chaque produit n'ait qu'une seule famille d'options. Et vous allez forcément me dire que ça ne convient pas.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 311
Membres
102 860
dernier inscrit
fredo67