Contenu TextBox en fonction d'une Combobox
Bonjour à tous,
Je peine devant un problème qui ne doit pas être compliqué, mais mon niveau actuel ne me permet pas de trouver une solution.
Aussi je me permets de solliciter votre aide.
J'ai créé un formulaire Userform. Celui-ci contient une Combobox (nommée "ComboBoxnom") devant faire référence à une colonne d'un tableau (cette colonne est nommée "PRODUITS"). En fonction de ce qui est choisi dans la Combobox, je désire que les TextBox de cette même Userform s'adaptent pour m'afficher le contenu de cellules présents dans d'autres colonnes de ce même tableau .
Voici le code utilisé :
Private Sub ComboBoxnom_Change()
Dim Ligne As Long
Ligne = Application.Match(Me.ComboBoxnom.Value, PRODUITS, 0)
Me.TextRECOMMANDATIONS.Text = Application.Index([D:D], Ligne, 1)
Me.Textingredient_1.Text = Application.Index([E:E], Ligne, 1)
Me.TextDOSAGE_1.Text = Application.Index([F:F], Ligne, 1)
Me.Textingredient_2.Text = Application.Index([G:G], Ligne, 1)
Me.TextDOSAGE_2.Text = Application.Index([H:H], Ligne, 1)
Me.Textingredient_3.Text = Application.Index([I:I], Ligne, 1)
Me.TextDOSAGE_3.Text = Application.Index([J:J], Ligne, 1)
Me.Textingredient_4.Text = Application.Index([K:K], Ligne, 1)
Me.TextDOSAGE_4.Text = Application.Index([L:L], Ligne, 1)
Me.Textingredient_5.Text = Application.Index([M:M], Ligne, 1)
Me.TextDOSAGE_5.Text = Application.Index([N:N], Ligne, 1)
Me.Textingredient_6.Text = Application.Index([O:O], Ligne, 1)
Me.TextDOSAGE_6.Text = Application.Index([P:P], Ligne, 1)
Me.Textingredient_7.Text = Application.Index([Q:Q], Ligne, 1)
Me.TextDOSAGE_7.Text = Application.Index([R:R], Ligne, 1)
Me.Textingredient_8.Text = Application.Index([S:S], Ligne, 1)
Me.TextDOSAGE_8.Text = Application.Index([T:T], Ligne, 1)
Me.Textingredient_9.Text = Application.Index([U:U], Ligne, 1)
Me.TextDOSAGE_9.Text = Application.Index([V:V], Ligne, 1)
Me.Textingredient_10.Text = Application.Index([W:W], Ligne, 1)
Me.TextDOSAGE_10.Text = Application.Index([X:X], Ligne, 1)
Me.Textingredient_11.Text = Application.Index([Y:Y], Ligne, 1)
Me.TextDOSAGE_11.Text = Application.Index([Z:Z], Ligne, 1)
Me.Textingredient_12.Text = Application.Index([AA:AA], Ligne, 1)
Me.TextDOSAGE_12.Text = Application.Index([AB:AB], Ligne, 1)
Me.Textingredient_13.Text = Application.Index([AC:AC], Ligne, 1)
Me.TextDOSAGE_13.Text = Application.Index([AD:AD], Ligne, 1)
Me.Textingredient_14.Text = Application.Index([AE:AE], Ligne, 1)
Me.TextDOSAGE_14.Text = Application.Index([AF:AF], Ligne, 1)
Me.Textingredient_15.Text = Application.Index([AG:AG], Ligne, 1)
Me.TextDOSAGE_15.Text = Application.Index([AH:AH], Ligne, 1)
End Sub
Tout va très bien quand le tableau est sur la feuille dans laquelle j'exécute mon Formulaire Userform. Sauf que maintenant, je souhaite que ma Combobox et mes Textbox fassent référence à un tableau qui se situe sur une autre feuille nommée "Mes Produits". Et là je ne sais pas comment adapter mon code.
Une petite idée svp ? Merci d'avance pour votre aide
Bonjour
Tu devrais joindre ton fichier...
Bye !
Alors voici mon fichier si cela peut aider.
Le problème se situe dans la feuille "gestion produit".
Le bouton "+" appelle mon formulaire. J'en profite pour vous dire que le Formulaire n'apparaît que la seconde fois qu'on utlise le bouton "+". La protection de la feuille semble bloquer l'apparition de mon formulaire. Si vous avez une solution pour ça aussi, je suis preneur...
Dans le formulaire :
- La partie orange doit me faire apparaître les bons ingrédients en fonction du mon choix de produit dans la combobox .... mais les ingrédients et produits sont rangés dans ma feuille "Mes produits".
La partie bleu doit me permettre de faire apparaître des listes modifiables mais là aussi les données sont sur une autre feuille qui se nomme "Gestion Ingrédients"
j'ai laissé vide le mot de protection du fichier.
J'espère que je suis clair, et surtout que quelqu'un voudra bien prendre quelques instants pour m'aider.
Bien à vous
Je crois avoir trouvé la solution pour mon formulaire. En tous cas ça fonctionne pour la liaison Combobos et Textbox avec données provenant d'une autre feuille.
Voici le code (qui est très répétitif et qu'il y a surement moyen de raccourcir) :
Private Sub ComboBoxnom_Change()
Dim plage_NOM As Range
Set plage_NOM = Sheets("Mes produits").Range("A:A")
Dim plage_R As Range
Set plage_R = Sheets("Mes produits").Range("D:D")
Dim plage_Ing1 As Range
Set plage_Ing1 = Sheets("Mes produits").Range("E:E")
Dim plage_Dos1 As Range
Set plage_Dos1 = Sheets("Mes produits").Range("F:F")
Dim plage_Ing2 As Range
Set plage_Ing2 = Sheets("Mes produits").Range("G:G")
Dim plage_Dos2 As Range
Set plage_Dos2 = Sheets("Mes produits").Range("H:H")
Dim plage_Ing3 As Range
Set plage_Ing3 = Sheets("Mes produits").Range("I:I")
Dim plage_Dos3 As Range
Set plage_Dos3 = Sheets("Mes produits").Range("J:J")
Dim plage_Ing4 As Range
Set plage_Ing4 = Sheets("Mes produits").Range("K:K")
Dim plage_Dos4 As Range
Set plage_Dos4 = Sheets("Mes produits").Range("L:L")
Dim plage_Ing5 As Range
Set plage_Ing5 = Sheets("Mes produits").Range("M:M")
Dim plage_Dos5 As Range
Set plage_Dos5 = Sheets("Mes produits").Range("N:N")
Dim plage_Ing6 As Range
Set plage_Ing6 = Sheets("Mes produits").Range("O:O")
Dim plage_Dos6 As Range
Set plage_Dos6 = Sheets("Mes produits").Range("P:P")
Dim plage_Ing7 As Range
Set plage_Ing7 = Sheets("Mes produits").Range("Q:Q")
Dim plage_Dos7 As Range
Set plage_Dos7 = Sheets("Mes produits").Range("R:R")
Dim plage_Ing8 As Range
Set plage_Ing8 = Sheets("Mes produits").Range("S:S")
Dim plage_Dos8 As Range
Set plage_Dos8 = Sheets("Mes produits").Range("T:T")
Dim plage_Ing9 As Range
Set plage_Ing9 = Sheets("Mes produits").Range("U:U")
Dim plage_Dos9 As Range
Set plage_Dos9 = Sheets("Mes produits").Range("V:V")
Dim plage_Ing10 As Range
Set plage_Ing10 = Sheets("Mes produits").Range("W:W")
Dim plage_Dos10 As Range
Set plage_Dos10 = Sheets("Mes produits").Range("X:X")
Dim plage_Ing11 As Range
Set plage_Ing11 = Sheets("Mes produits").Range("Y:Y")
Dim plage_Dos11 As Range
Set plage_Dos11 = Sheets("Mes produits").Range("Z:Z")
Dim plage_Ing12 As Range
Set plage_Ing12 = Sheets("Mes produits").Range("AA:AA")
Dim plage_Dos12 As Range
Set plage_Dos12 = Sheets("Mes produits").Range("AB:AB")
Dim plage_Ing13 As Range
Set plage_Ing13 = Sheets("Mes produits").Range("AC:AC")
Dim plage_Dos13 As Range
Set plage_Dos13 = Sheets("Mes produits").Range("AD:AD")
Dim plage_Ing14 As Range
Set plage_Ing14 = Sheets("Mes produits").Range("AE:AE")
Dim plage_Dos14 As Range
Set plage_Dos14 = Sheets("Mes produits").Range("AF:AF")
Dim plage_Ing15 As Range
Set plage_Ing15 = Sheets("Mes produits").Range("AG:AG")
Dim plage_Dos15 As Range
Set plage_Dos15 = Sheets("Mes produits").Range("AH:AH")
Dim Ligne As Long
Ligne = Application.Match(Me.ComboBoxnom.Value, plage_NOM, 0)
Me.TextRECOMMANDATIONS.Text = Application.Index(plage_R, Ligne, 1)
Me.Textingredient_1.Text = Application.Index(plage_Ing1, Ligne, 1)
Me.TextDOSAGE_1.Text = Application.Index(plage_Dos1, Ligne, 1)
Me.Textingredient_2.Text = Application.Index(plage_Ing2, Ligne, 1)
Me.TextDOSAGE_2.Text = Application.Index(plage_Dos2, Ligne, 1)
Me.Textingredient_3.Text = Application.Index(plage_Ing3, Ligne, 1)
Me.TextDOSAGE_3.Text = Application.Index(plage_Dos3, Ligne, 1)
Me.Textingredient_4.Text = Application.Index(plage_Ing4, Ligne, 1)
Me.TextDOSAGE_4.Text = Application.Index(plage_Dos4, Ligne, 1)
Me.Textingredient_5.Text = Application.Index(plage_Ing5, Ligne, 1)
Me.TextDOSAGE_5.Text = Application.Index(plage_Dos5, Ligne, 1)
Me.Textingredient_6.Text = Application.Index(plage_Ing6, Ligne, 1)
Me.TextDOSAGE_6.Text = Application.Index(plage_Dos6, Ligne, 1)
Me.Textingredient_7.Text = Application.Index(plage_Ing7, Ligne, 1)
Me.TextDOSAGE_7.Text = Application.Index(plage_Dos7, Ligne, 1)
Me.Textingredient_8.Text = Application.Index(plage_Ing8, Ligne, 1)
Me.TextDOSAGE_8.Text = Application.Index(plage_Dos8, Ligne, 1)
Me.Textingredient_9.Text = Application.Index(plage_Ing9, Ligne, 1)
Me.TextDOSAGE_9.Text = Application.Index(plage_Dos9, Ligne, 1)
Me.Textingredient_10.Text = Application.Index(plage_Ing10, Ligne, 1)
Me.TextDOSAGE_10.Text = Application.Index(plage_Dos10, Ligne, 1)
Me.Textingredient_11.Text = Application.Index(plage_Ing11, Ligne, 1)
Me.TextDOSAGE_11.Text = Application.Index(plage_Dos11, Ligne, 1)
Me.Textingredient_12.Text = Application.Index(plage_Ing12, Ligne, 1)
Me.TextDOSAGE_12.Text = Application.Index(plage_Dos12, Ligne, 1)
Me.Textingredient_13.Text = Application.Index(plage_Ing13, Ligne, 1)
Me.TextDOSAGE_13.Text = Application.Index(plage_Dos13, Ligne, 1)
Me.Textingredient_14.Text = Application.Index(plage_Ing14, Ligne, 1)
Me.TextDOSAGE_14.Text = Application.Index(plage_Dos14, Ligne, 1)
Me.Textingredient_15.Text = Application.Index(plage_Ing15, Ligne, 1)
Me.TextDOSAGE_15.Text = Application.Index(plage_Dos15, Ligne, 1)
End Sub
Je vais tester si cela fonctionne pour les listbox, mais il n'y a pas de raison.
En revanche je suis toujours preneur pour l'ouverture de mon formulaire qui semble être bloqué par la protection de la feuille.
Merci d'avance
Bon à priori c'est plus complexe pour une zone de liste modifiable dans un Userform ...
Du coup je viens bien de l'aide s'il vous plaît.
Comment alimenter une zone de liste modifiable avec le contenu de cellules d'une autre feuille ?
Merci d'avance
Bon alors pour la comboBox la solution est par ici :
https://www.excel-downloads.com/threads/besoin-daide-pour-listbox-excel-vba-365.20040096/
Reste juste le problème de mon formulaire userform qui refuse de s'ouvrir , mais comme ce n'est pas le sujet du départ, je ferme cette discussion, je veux dire ce monologue ...