XL 2019 UserForm liste déroulante (cascade) avec ajout de données/modification

kinders59

XLDnaute Nouveau
Bonjour tout le monde,

Je suis en train de réaliser un fichier qui sera envoyé à des fournisseurs (qui vont remplir les onglets pour le moment masqués) mais qui sera aussi utilisé par moi et potentiellement dans le futur d'autres personnes de l'entreprise (pour ajouter des données dans les onglets visibles).

J'ai réalisé un UserForm dans mon onglet "Données" qui s'ouvre lorsque je clique sur le bouton "Ajouter des données", dans ce UserForm j'ai plusieurs liste déroulante modifiable et c'est là que je commence déjà à me perdre.

Je voudrais que mes listes déroulantes soit en cascade et donc recherche mes valeurs déjà présentes dans mes différents onglets.

- Pour la première liste déroulante N° Fournisseur je viens rechercher mes données dans la colonne A de l'onglet "Données"

- Pour la seconde liste, le fournisseur dépend du n° fournisseur comme on peut le voir dans la colonne B de l'onglet "Données"

- Pour ma troisième liste, ma matière correspond au fournisseur et se situe dans l'onglet "Matière"

- Enfin ma dernière liste, l'épaisseur dépend du fournisseur et de la matière et se situe dans l'onglet Epaisseur

J'ai réussis dans mes onglets à faire le rapprochement via des formules comme celle-ci (qui me permet de retrouver l'épaisseur en fonction de la matière et du fournisseur) :

=DECALER(Epaisseurs!$A$2;1;EQUIV(Généralités!$B$2&" "&Généralités!$A10;Epaisseurs!$2:$2;0)-1;NBVAL(DECALER(Epaisseurs!$A$2;1;EQUIV(Généralités!$B$2&" "&Généralités!$A10;Epaisseurs!$2:$2;0)-1;100;1));1)
Mais je ne sais pas comment le reproduire en VBA ...

Ensuite vient le plus gros des problèmes j'aimerais pouvoir proposer l'ajout et la modification de données par mon userform

C'est à dire que potentiellement la personne pourrait rentrer toutes les données elle même et cliquer sur le bouton "Ajouter" , dans ce cas :

- Mon numéro de four viendrait s'ajouter à la liste en colonne A dans l'onglet "Données" à la suite des autres bien-sûr

- Mon fournisseur s'ajouterait dans la colonne B dans l'onglet "Données" à la suite des autres (en sachant qu'il doit être à côté de son numéro de four)

- Ainsi que dans l'onglet "Matière" sur la ligne 2 à la suite des autres : S'il s'agit d'un nouveau fournisseur

- Ma matière viendrait s'ajouter dans l'onglet "Matière" elle doit s'ajouter sous le fournisseur associé

- Dans mon onglet "Epaisseur" si nous avons un nouveau fournisseur, il doit être ajouté ligne 2 avec sa matière associée (par exemple : j'ai rempli dans le formulaire Fournisseur : G et matière : Compact) alors en ligne 2 à la fin de ceux déjà présent j'ai "G Compact" qui s'ajoute, et en dessous j'ai mon épaisseur qui vient s'ajouter aussi par rapport à ce que j'ai ajouté dans mon UserForm.

Bien évidemment, j'aimerais qu'il soit possible d'ajouter une donnée que sur un paramètre, par exemple :

Je souhaite ajouter la matière Bambou sur mon fournisseur B et avec une épaisseur de 20 (car la matière n'est pas encore présente)

Du coup, je sélectionne mon numéro de four qui va s'associer au fournisseur B j'ai donc mes deux premières combobox qui sont existantes, ensuite dans matière je rentre "Bambou" et dans épaisseur "20"

Du coup, lorsque je click sur "Ajouter"

- J'ai ma matière "Bambou" qui vient s'ajouter sous la colonne du fournisseur B dans l'onglet "Matière"

- J'ai la création d'une colonne "B Bambou" et l'ajout de l'épaisseur 20 dans mon onglet "Epaisseurs"

Si maintenant je souhaite n'ajouter qu'une épaisseur avec un fournisseur et une matière déjà présente alors je sélectionne dans mon userform les bonnes données pour :

- N° Fournisseur / Fournisseur / Matière

Puis je rentre moi même une épaisseur dans le cadre : Epaisseur

Alors dans l'onglet Epaisseur vient s'ajouter sous le bon fournisseur/matière (présent en ligne 2) ma nouvelle épaisseur.

Je ne sais pas si je suis assez compréhensible dans mon besoin, je maitrise encore assez mal le UserForm et donc je ne suis même pas sûr que ce que je veux faire et possible alors voilà je jette une bouteille à la mer afin d'avoir de l'aide et savoir si quelqu'un sera m'aider

Bonne journée à tous et merci d'avance !!
 

Pièces jointes

  • Userform-Aide.xlsm
    70.1 KB · Affichages: 74

Dranreb

XLDnaute Barbatruc
Bonjour.
J'aurais une solution par modules de service tout faits si vos 4 valeurs de ComboBox devaient alimenter un tableau Excel de 4 colonnes, une pour chaque. Il n'y aurait alors besoin de rien d'autre car cet outils fabrique dynamiquement pour les ComboBox qu'on lui confie les listes classées et sans doublon, en fonction de tout ce qui existe dans la base à consulter/mettre à jour, et aussi en fonction de ce qui a déjà été saisi dans certaines. L'outil est disponible sous forme de complément xlam mais on peut aussi implanter les modules de service dans le projet VBA du classeur utilisateur.
 
Dernière édition:

kinders59

XLDnaute Nouveau
Bonjour.
J'aurais une solution par modules de service tout faits si vos 4 valeurs de ComboBox devaient alimenter un tableau Excel de 4 colonnes, une pour chaque. Il n'y aurait alors besoin de rien d'autre car cet outils fabrique dynamiquement pour les ComboBox qu'on lui confie les listes classées et sans doublon, en fonction de tout ce qui existe dans la base à consulter/mettre à jour, et aussi en fonction de ce qui a déjà été saisi dans certaines. L'outil est disponible sous forme de complément xlam mais on peut aussi implanter les modules de service dans le projet VBA du classeur utilisateur.
Bonjour Dranreb,

Le problème c'est que j'ai du mal à me dire que ça sera faisable sur mon fichier au vue de comment je fais pour les onglets masqués, avec les recherches etc. Tu peux les afficher de ton côté si tu veux, pour voir de quoi je parle et comment fonctionne le fichier de manière générale :)

Car j'avoue que j'ai du mal à comprendre comment fonctionne ta solution haha
 

Dranreb

XLDnaute Barbatruc
J'ai regardé les autres onglets mais n'ai justement rien compris à la façon dont tout ça est lié.
Ma solution ne s'applique pas aux tables disparates où ce qui est contenu dans un ensemble est en dessous de lui spécifié en titre. Elle ne s'applique qu'aux chose liées de parce qu'elles figurent simultanément sur la même ligne d'un tableau. Mais plusieurs tableaux de ce genre peuvent être géré en même temps, mais ce n'est pas forcément simple, en particulier si une certaine ComboBox doit pouvoir taper dans plusieurs tableaux, car ce n'est pas possible au même instant. Mais bases Fournisseur, Clients, Articles, etc. et lignes de commandes, tout ça ça peut se gérer.
 
Dernière édition:

kinders59

XLDnaute Nouveau
Bonsoir à vous tous,


et de 1
bonne continuation
Bonjour jcf6464 Apparemment nous n'avons pas le droit de faire de demande ailleurs ? Mon problème est légitime et je cherche vraiment de l'aide, je ne pense pas causé du tord à qui que ce soit de faire une demande similaire ailleurs ? Je n'ai pas notifié que c'était urgent ou mit de pression à qui que ce soit, je souhaite juste avoir le plus de chance de mon côté de trouver une réponse à ma problématique ;) mais bon apparemment il est plus facile d'afficher mon post ailleurs que de me demander en mp pourquoi j'ai fait cela. Je trouve cela triste, si on ne peut se renseigner ailleurs ..
 

kinders59

XLDnaute Nouveau
J'ai regardé les autres onglets mais n'ai justement rien compris à la façon dont tout ça est lié.
Ma solution ne s'applique pas aux tables disparates où ce qui est contenu dans un ensemble est en dessous de lui spécifié en titre. Elle ne s'applique qu'aux chose liées de parce qu'elles figurent simultanément sur la même ligne d'un tableau. Mais plusieurs tableaux de ce genre peuvent être géré en même temps, mais ce n'est pas forcément simple, en particulier si une certaine ComboBox doit pouvoir taper dans plusieurs tableaux, car ce n'est pas possible au même instant. Mais bases Fournisseur, Clients, Articles, etc. et lignes de commandes, tout ça ça peut se gérer.
Hello Dranreb,

Pour répondre à ta question si tu regardes toujours ce post (et désolé du retard),

Je vais essayer d'expliquer le fonctionnement du fichier,
Dans mon onglet "Généralités" la personne qui va recevoir le fichier va remplir le champ : N° Fournisseur c'est alors qu'automatiquement le nom du fournisseur apparaît (une sorte de vérification pour dire que le fournisseur est bien connu de notre côté et qu'il n'y a pas eu d'erreur d'entrée)
Suite à cela automatiquement grâce au nom du fournisseur nous avons les matières qui lui sont assimilées et qui se trouvent dans l'onglet "Matière", le fournisseur choisit donc sa matière (onglet "Généralités") et automatiquement le filtre vient se faire sur les épaisseurs qu'ils proposent et qui sont déjà présentes dans l'onglet "Epaisseurs" (Sachant que chaque fournisseur à sa propre épaisseur sur une matière précise j'ai du obligatoirement dans mon onglet épaisseur faire une ligne contenant "Nom + Matière" afin de pouvoir baser ma liste de recherche sur ces deux critères)

Pour les autres onglets, il s'agit surtout de formule donc rien de grave, ça vient rechercher surtout mon onglet "Généralités" ou alors des formules présentes dans l'onglet "Données" mais qui n'ont pas de rapport avec mes tableaux.

Le soucis que j'ai c'est que si je souhaite faire un seul et unique tableau pour toutes mes données :
- N° Fournisseur
- Nom Fournisseur (associé au N°)
- Matière (associé au Fournisseur)
- Epaisseur (associé à la matière et au fournisseur)

Je ne sais pas trop comment le réaliser c'est pour cela que j'ai tout décomposé :/

J'espère que j'ai réussis à mieux t'expliquer mon fichier et son fonctionnement ;)

PS : Pour le post sur ce forum ainsi que sur l'autre encore une fois je ne cherche pas à faire perdre du temps aux personnes, si j'obtiens une réponse je clôturerais les deux sujets en montrant la réponse que j'ai obtenu, encore une fois sur une précédente demande sur l'autre forum je n'ai obtenu aucune réponse après 1 semaine de demande je me suis donc tourné ici pour une nouvelle demande. Si cela déplaît j'en suis désolé et je peux clôturer l'un des deux posts au besoin.

Merci d'avance et bonne journée.
 

kinders59

XLDnaute Nouveau
J'ai déjà commencé à faire du code pour le bouton "Ajouter" du UserForm :
VB:
Private Sub CommandButton2_Click()

If ComboBox4.Value = "" Then
MsgBox "Veuillez rentrer/choisir un n° fournisseur"
Else
If ComboBox1.Value = "" Then
MsgBox "Veuillez rentrer/choisir un fournisseur"
Else
Dim ligne As Integer
If MsgBox("Confirmez-vous l'ajout des données ?", vbYesNo, "confirmation") = vbYes Then
Worksheets("Données").Select
ligne = Sheets("Données").Range("A1048576").End(xlUp).Row + 1
Column = Sheets("Matière").Range("A2").End(xlToRight).Column + 1
Cells(ligne, 1) = ComboBox4.Value
Cells(ligne, 2) = ComboBox1.Value
Worksheets("Matière").Cells(2, Column) = ComboBox1.Value
Unload UserForm1
UserForm1.Show
Else
End If
End If
End If
End Sub

J'arrive donc à ajouter mon numéro de fournisseur et mon nom dans les bonnes colonnes au bon endroit (sur mon onglet "Données" ainsi que "Matière" pour le nom du fournisseur).
Par contre, je tombe dans ma première impasse si je souhaite ajouter plusieurs matière pour un même fournisseur je ne sais pas comment lui indiquer la colonne de manière dynamique (car mon nombre de ligne n'est jamais le même entre chaque colonne 😞 ) je continues mes recherches
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Voici deux classeurs qui vous montrent comment est réalisé un UserForm qui utilise ça.
Remarque le second utilise le complément xlam, donc vous ne pourrez pas le faire tourner sans l'avoir installé depuis la ressource
Mais sa programmation convient s'il n'y a que des ComboBox liées sans aucun contrôle associé.
 

Pièces jointes

  • CLsCAsContacts.xlsm
    161.7 KB · Affichages: 97
  • TempP4.xlsm
    31.8 KB · Affichages: 67
Dernière édition:

kinders59

XLDnaute Nouveau
Bonjour.
Voici deux classeurs qui vous montrent comment est réalisé un UserForm qui utilise ça.
Remarque le second utilise le complément xlam, donc vous ne pourrez pas le faire tourner sans l'avoir installé depuis la ressource
Mais sa programmation convient s'il n'y a que des ComboBox liées sans aucun contrôle associé.
Je vais étudier le fichier voir si je serais capable de faire un seul tableau mais comme je peux avoir plusieurs matière et plusieurs épaisseur par matière je ne sais pas trop comment le faire je dois être franc :/
Merci à toi !
 

kinders59

XLDnaute Nouveau
Dans la Sub UserForm_Initialize vous pouvez confier autant de ComboBox qu'il faut au CLs, il se débrouillera déjà tout seul.
Le truc c'est surtout que je ne sais pas comment faire mon tableau où la combobox va venir chercher les informations, car dans ma base de données j'ai plusieurs matière pour un même fournisseur et au sein même de chaque matière j'ai plusieurs épaisseurs. Du coup ça multiplie les lignes si je procède par tableau le risque n'est-il pas d'avoir des doublons dans ma ComboBox au final ? Je ne sais pas trop comment procéder juste pour ça 😅
 

kinders59

XLDnaute Nouveau
Non, il n'y a jamais de doublon dans les listes dynamiques préparées par un ComboBoxLiées lors de l'exécution de sa méthode Actualiser, et révisées automatiquement lors d'un choix, et elles sont toujours classées.
Je crois que je suis perdu haha

Du coup si j'ai :
N° FourFourMatièreEpaisseur
20000ABois16
20000ABois20
20000ABois8

Dans ma combobox j'aurais un seul fournisseur, une seule matière et trois épaisseurs ?
 

Dranreb

XLDnaute Barbatruc
Oui c'est cela.
Il se peut même que le fournisseur et la matière soient affichés d'office s'il n'y que ceux là dans la base. Encore qu'il faudrait peut être cliquer dessus pour les figer si on a l'intention d'ajouter une nouvelle épaisseur …
 

Discussions similaires

Réponses
1
Affichages
68
Compte Supprimé 979
C
Réponses
9
Affichages
331

Statistiques des forums

Discussions
311 540
Messages
2 080 525
Membres
101 234
dernier inscrit
Layani89