Liste d'une Combobox en fonction d'une cellule

Bonjour tout le monde !

J'ai pour projet de programmer une série de calculs en fonction de certaines données d'entrée afin d'obtenir un choix de courroie automatique. Cependant à un moment de mon programme je dois, en fonction des résultats des calculs effectués, choisir un diamètre de poulie d'entrée. Il existe 4 types de courroies : Les SPZ, les SPA, les SPB, et les SPC. Pour chaque type de courroie, une liste de diamètres est disponible (sur une feuille excel). J'ai créé un UserForm pour l'entrée de données, et un autre UserForm (nommé "Listes") contenant une Combobox destinée à recueillir la liste des diamètres correspondant au type de courroie choisi.

Ce qui m'amène donc à mon problème :

Dans un premier temps, comment faire pour affecter à cette combobox la liste des valeurs disponible dans ma feuille excel ?

Dans un second temps, comment changer de liste dans la combobox, en fonction d'une cellule (qui elle affiche la désignation du type de courroie) ?

Je vous ajoute le programme que j'ai essayé d'écrire dans l'UserForm "Listes". J'ai défini un nom pour chacune des listes (présentes dans la feuille "Diametre(poulie)"), et j'ai essayé de poser des conditions IF avec comme variable le contenu de la case "C21" de la feuille "CALCUL"

PJ :

J'espère ne pas avoir été trop ambigu, et merci d'avance à tous !

Cordialement,

Warido

Bonjour,

Tout d'abord, la sub d'initialisation d'un UserForm (Usf) se nomme toujours :

Private Sub UserForm_Initialize()

Et ce quelque soit son nom

Ensuite, et comme je ne suis pas adepte de la méthode RowSource, modifie ton code ainsi :

Private Sub UserForm_Initialize()

'on définit un nom pour chacune des 4 listes de la feuille "Diamètre(poulie)", on les nomme "SPZ","SPA","SPB", et "SPC"
Dim Sec As String 'on intègre la variable "section" définissant le type de section choisi
Dim Cel As Range
Sec = Sheets("CALCUL").Range("C21").Value 'on lui attribue la case de la feuille CALCUL dans excel correspondante
For Each Cel In Range(Sec)
    Me.Liste1.AddItem Cel
Next Cel
End Sub

Bon courage

Bonjour Cousinhub,

Un grand merci à toi ! Ça marche parfaitement ! Et désolé si j'utilise des codes qui piquent les yeux, j'ai pas eu de cours de programmation, et ce qui a été fait c'est grâce à l'aide reçue dans les forums...

Enfin, merci encore, et bonne journée !

En fait j'ai encore un autre soucis qui me pose problème :

Dans la feuille "CALCUL" , il y une donnée nommée "Cl" (case C15) qu'il faudrait que je paramètre suivant deux variables: La longueur L (Case 13) et la section (case C21). La condition serait remplie grâce à aux tableaux mettant "L" en fonction de "Cl" des feuilles "SPZ(puissance)", "SPA(puissance)", "SPB(puissance)" et "SPC(puissance)" (lignes 21 et 22 de chaque feuille).

Par exemple : Si j'ai la section SPZ et une longueur L inférieure à 630 ou comprise entre 630 et 740, la case C15 de la feuille CALCUL affichera "0.8". Mais si cette même longueur est supérieur à 3550, Cl sera égal à 1.14.

Pourriez-vous s'il vous plaît m'aider encore un peu, je suis complétement perdu avec la programmation VBA

Cordialement,

Bonjour,

Nul besoin de VBA, cette formule dans la cellule C15 te donnera le résultat :

=INDEX(INDIRECT("'"&$C$21&"(puissance)"&"'!$B$22:$Q$22");EQUIV(CALCUL!C13;INDIRECT("'"&$C$21&"(puissance)"&"'!$B$21:$Q$21");1))

PS, comme tes onglets sont suivis de (puissance), cela nécessite d'adapter la formule comme ci-dessus

Bon courage

PS, avec la formule Indirect, tu pourrais avantageusement remplacer tes formules de recherche dans les autres cellules du dessus.

Bon courage

Oh trop bien ! Un grand merci encore une fois, je vais essayer d'en apprendre plus sur la fonction INDIRECT !

Si j'ai encore un pépin je vous ferai savoir, mais il me reste plus grande chose grâce à vous

Bon, allez une dernière petite question, en rapport avec ce que vous m'avez dit :

Je veux maintenant choisir Po (feuille CALCUL, case C14) en fonction du type de courroie encore (C21) du diamètre d (C19) et de la vitesse d'entrée nd (C4) et tout ça à l'aide d'un des tableaux présents dans les feuilles "SP...(puissance)" (en suivant encore une fois le choix du type de courroie).

J'ai écrit le code suivant dans la case C14 mais il me signale une erreur "#REF!":

=INDEX(INDIRECT("'"&$C$21&"(puissance)"&"'!$B$3:$S$14");EQUIV(CALCUL!C19;INDIRECT("'"&$C$21&"(puissance)"&"'!$B$2:$S$2");1);EQUIV(CALCUL!C4;INDIRECT("'"&$C$21&"(puissance)"&"'!$A$3:$A$14");1))

Est-ce que vous auriez une idée ? ou voyez-vous une erreur que j'aurais faite ?

Merci encore pour votre soutien

Re-,

Tu as juste interverti les lignes et les colonnes

Index(Matrice, Ligne, Colonne)

Regarde la formule :

=INDEX(INDIRECT("'"&$C$21&"(puissance)"&"'!$B$3:$S$14");EQUIV(CALCUL!C4;INDIRECT("'"&$C$21&"(puissance)"&"'!$a$3:$a$14");1);EQUIV(CALCUL!C19;INDIRECT("'"&$C$21&"(puissance)"&"'!$b$2:$s$2");1))

Bon courage

Ah d'accord ! J'ai fait une erreur dans mon raisonnement . Et effectivement ça marche beaucoup mieux là !

Merci beaucoup pour ton aide !

A plus !

Rechercher des sujets similaires à "liste combobox fonction"