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 ...

Rechercher des sujets similaires à "contenu textbox fonction combobox"