Liste déroulante dynamique en cascade

Bonjour à tous,

Je suis en train d'élaborer un outils sur Excel et j'ai quelques conseils à vous demander :

L'idée en gros c'est de demander à des personnes d'aller relever des prix dans des supermarchés (bien évidemment c'est un exemple).

Dans un premier temps, il faut élaborer une liste de course. Cette liste de course ne peut comporter des articles impossibles. Par exemple, dans le tableau 1 en gris, une base de donnée regroupe toutes les combinaisons possibles.

On peut acheter des bananes en vrac sur place mais pas à emporter, on ne peut pas acheter des petits pois autrement qu'en conserve,...

puis les différents TCD et le tableau 3 en orange, me permettent de construire sur la plage A21:G32 ma liste de course via des listes déroulante en utilisant les fonctions =INDIRECT et =DECALER.

Sur la colonne mode de livraison (E22), on indique comment retirer l'article même si cela est impossible (via la base de donnée du tableau 1). Pour Vérifier que je n'ai pas fait d'erreur de saisie, la macro Qgénération vérifie l’existence de ma liste de course dans la bdd tableau 1 puis indique dans quelle quantité cela est disponible.

Si cela existe, la quantité est inscrite, si cela n'existe pas la case est laissé vide et reste en rouge (mise en forme conditionnelle)

Le système fonctionne sans problème, mais il a deux inconvénients :

  • 1 - si je rajoute une référence ex : Type Liquide, Désignation eau, Contenant en bouteille,... il faut que j'apporte des modifications manuellement à mes tableaux et TCD
  • 2 - comme je ne sais pas mieux faire que 3 liste déroulante dynamique successive (pour le type, la désignation et le type de contenant), des qu'il y a une nouvelle entrée (mode de livraison, provenance, ou encore d'autres...) je suis obligé de passer par cette technique de macro qui vérifie quand même la possibilité de ma liste de course.

En gros, ça fonctionne, mais ce n'est pas très dynamique et souple, si de nouvelles informations arrivent, il faut reconstruire une partie des tableaux,...

Donc je viens chercher quelques conseils et pistes de résolutions, comment de votre côté vous auriez élaboré les choses? Y a t'il deux ou trois astuces qui me permettrait d'avoir un outil plus fluide? (sans devoir tout recommencer à zéro).

Si vous n'avez pas d'idées, peut-être en aurez vous pour mon second problème:

Boucle dans une boucle

Bonjour

Le conseil que je te donnerais serait de mettre chaque tableau dans une feuille différente. Ainsi, si tu dois ajouter des lignes ou des colonnes à l'un d'entre eux, les autres ne seront pas affectés...

Bye !

Bonsoir famarech et le forum

Voici une idée avec un formulaire de saisie.

j'ai copié le tableau1 (liste des produits disponibles ) dans la feuille que j'ai nommée "Liste"

J'ai effacé toutes les autres données de ta feuille1 que j'ai renommée "Cde".

La liste de course est maintenant en B4:G13.

En cliquant sur "Générer les quantités" un formulaire de saisie permet de sélectionner la (ou les)commande(s).

En cliquant sur "Valider" les saisies sont transposées dans la liste de course.

En cliquant sur "Autre commande" on saisit une nouvelle commande.

Le tableau1 dans l'onglet "Liste" est modifiable à volonté.

A découvrir.

cdt

henri

10famarech-test1.xlsm (31.38 Ko)

Rebonsoir

Une autre version avec la quantité commandée interdite si supérieure au stock disponible.

Cdt

Henri

Merci beaucoup AFEH

Ta proposition est très intéressante, il va me falloir un peu de temps pour décortiquer et comprendre le code.

Je reviendrais surement te voir pour te poser des questions.

encore Merci

Bonsoir famarech et le forum

Voici une idée avec un formulaire de saisie.

j'ai copié le tableau1 (liste des produits disponibles ) dans la feuille que j'ai nommée "Liste"

J'ai effacé toutes les autres données de ta feuille1 que j'ai renommée "Cde".

La liste de course est maintenant en B4:G13.

En cliquant sur "Générer les quantités" un formulaire de saisie permet de sélectionner la (ou les)commande(s).

En cliquant sur "Valider" les saisies sont transposées dans la liste de course.

En cliquant sur "Autre commande" on saisit une nouvelle commande.

Le tableau1 dans l'onglet "Liste" est modifiable à volonté.

A découvrir.

cdt

henri

J'ai bien tout regardé, mais évidemment j'ai encore des difficultés à reproduire ce que tu as fait sur mon vrai fichier. (oui en réalité je ne gère pas des tomate et des carottes... )

si tu as encore un peu de temps, peux-tu jeter un oeil au fichier joint pour me dire là où j'ai fait des erreurs.

Si j'ai bien tout compris, si je doit rajouter une colonne dans ma base de données, il suffit de rajouter une combobox5 dans les différentes macro...?

merci d'avance

Bonjour famarech,

Bien entendu avec cette nouvelle base de données, il faut adapter.

J'ai ajouté un Combobox6 (Type de tâche) au formulaire et une nouvelle colonne G (Type de tâche) dans FSGénérateur.

J'ai modifié la macro pour effacer les données (colonnes de A à H)

Voici la nouvelle version en PJ.

A voir si ça convient.

Cdt

Henri

Merci AFEH,

mais j'ai encore des difficultés...

Private Sub combobox1_Change()
Set Mondico = CreateObject("Scripting.Dictionary")
  For Each c In Range("Ligne_Physique") 'le problème viens d'ici
    If c = Me.ComboBox1 Then Mondico(c.Offset(, 1).Value) = c.Offset(, 1).Value
  Next c
  Me.ComboBox2.List = Mondico.items
  Me.ComboBox2.ListIndex = -1
  Me.ComboBox3.ListIndex = -1
  Me.ComboBox4.ListIndex = -1
  Me.ComboBox5.ListIndex = -1
End Sub

Je souhaite quand même comprendre un minimum ce que je fait et donc ce que tu as fait. J'essaie de ré-écrire ton code, mais j'ai toujours le même problème.

"La méthode 'Range' de l'objet '_Global' à échoué

as tu une idée de ce qui m'échappe?

J'ai ajouté un Combobox6 (Type de tâche) au formulaire et une nouvelle colonne G (Type de tâche) dans FSGénérateur.

Pas nécessaire, le type de tâche est indépendant et n'as aucune influence sur le code temps.

'ai modifié la macro pour effacer les données (colonnes de A à H)

Le problème de ta macro, c'est que lorsqu'on clique deux fois d'affilés sur le bouton (par erreur par exemple), même les titres disparaissent...

je préfère rester sur ma macro un peu plus rustique.

Bonjour Famarech,

"La méthode 'Range' de l'objet '_Global' à échoué

Dans Gestionnaire des noms, j'avais créé le nouveau nom "Ligne_Physique" avec la formule;

=DECALER(ListeTachePossible!$A$2;;;NBVAL(ListeTachePossible!$A:$A)-1)

Puis le code suivant, il faut dire Then TextBox1........

Private Sub ComboBox5_Change()
    For Each c In Range("Ligne_Physique")
    If c = Me.ComboBox1 And c.Offset(, 1) = ComboBox2 And c.Offset(, 2) = Me.ComboBox3 And c.Offset(, 3) = Me.ComboBox4 And c.Offset(, 4) = Me.ComboBox5 Then TextBox1 = c.Offset(, 6).Value
   Next c
End Sub

En PJ le fichier corrigé en retour.

Cdt

Henri

Ben c'est parfait, vraiment!

J'ai bien compris d'où venais mes erreurs.

Maintenant, si je rajoute une nouvelle ligne dans ListeTachePossible, tout s'automatise tout seul c'est impeccable.

Si je doit à l'avenir rajouter une colonne pour une nouvelle information importante, j'ai juste à rajouter une combobox et les quelques lignes de codes nécessaires. Je suis complètement autonome.

J'ai vraiment un bel outil en main !!!

Un grand merci AFEH.

Merci pour ce retour.

Bon courage en attendant la fin du confinement

Cdt

Henri

Rechercher des sujets similaires à "liste deroulante dynamique cascade"