Formulaire avec plusieurs listes déroulantes dépendantes / Fonction IF THEN

Hello,

Svp j'aimerais créer un formulaire avec plusieurs listes déroulantes, je sais faire deux listes dépendantes mais pas plusieurs. Pour vous expliquer le circuit, et en ce qui concerne les deux premières listes (identification du véhicule), je voudrais que lorsque je sélectionne la marque de voiture, la seconde liste me montre les modèles que propose cette marque.

La seconde relation (où il n'y a pas d'interdépendance) , je voudrais que lorsque je sélectionne le produit et la durée (du contrat), le prix s'affiche automatiquement sur la case dédiée. Et ce prix doit être le résultat du modèle + produit + durée. (la feuille "Liste2" explique cette relation d'interdépendance)

En gros : je sélectionne marque -> m'affiche les différents modèle de la marque et sélectionne marque -> sélectionne produit et durée -> m'affiche automatiquement le prix adéquat (qui est renseigné sur le tableau).

Je mets en pièce jointe le fichier sur lequel je travaille. Merci d'avance.

14fichier-auto.xlsm (59.49 Ko)

Bonjour,

Ou là là ! il y a pas mal de choses à modifier dans votre fichier. C'est presque le refaire ..
Puis les macros private ne vont pas dans le module mais bien dans votre userform
3 macros Private Sub UserForm_Initialize() ???
Toutes vos macros dans thisworkbook ne doivent pas se trouver là mais dans l'userform

Déjà un premier point serait de n'avoir qu'une seule feuille Liste.

Donc :
- feuille Liste reprenant L1, L2 et Liste
- feuille Listerenault et Listedacia sur la même feuille.

Votre avis ?

Bonjour Dan,

C'est bon j'ai réglé les problèmes que tu m'a indiqué et regroupé tous les tableaux dans la liste2 (marque, modèle, produit, durée et prix).

Normalement les codes au niveau du userform doivent marcher mais le problème c'est que je ne sais pas comment situer mes tableaux et encore moins comment faire les liens entre le code dans le userform et le code du module 1.

Qu'est-ce que je pourrais modifier stp ?

Les références sont bien dans la feuille L1 ?

Ouii, normalement il y'a tout sur la feuille L1. (par contre j'ai oublié de rename correctement mes tableaux)

Voici déjà une modification par rapport à votre fichier V2

- supprimez votre "sub Ouvre_formulaire" qui se trouve dans l'suerform
- Vider votre module 1 complètement
- une fois le module 1 vidé, collez le code ci-dessous

Sub OuvreFormulaire()
Load Formulaire
Formulaire.Show
End Sub

- Allez ensuite dans votre userform et remplacez le code Private Sub UserForm_Initialize par celui ci-dessous. Il chargera la combo Marque

Private Sub UserForm_Initialize()
Dim c As Range
Dim tablo As Collection
Dim item

Set tablo = New Collection
On Error Resume Next
With Sheets("L1")
    For Each c In .ListObjects("Tableau12").ListColumns(1).DataBodyRange
        tablo.Add c.Value, CStr(c.Value)
    Next c
End With
On Error GoTo 0
For Each item In tablo
    cboMarque.AddItem item
Next item
End Sub

- Ensuite collez le code ci-dessous pour la combo Modele

Private Sub cboMarque_Change()
Dim c As Range
Dim tablo As Collection
Dim item

cboModele.Clear

Set tablo = New Collection
On Error Resume Next
With Sheets("L1")
    For Each c In .ListObjects("Tableau12").ListColumns(2).DataBodyRange
        If c.Offset(0, -1) = cboMarque.Value Then
            tablo.Add c.Value, CStr(c.Value)
        End If
    Next c
End With
On Error GoTo 0
For Each item In tablo
    cboModele.AddItem item
Next item
End Sub

NB : dans les deux codes vous pouvez changer le nom "Tableau12" par ce que vous voulez. Il suffit de modifier le nom dans le gestionnaire de noms du menu Formules et de remplacer Tableau12 par celui que vous aurez choisi

En principe vous devriez pas avoir de prix dans la feuille F1 si c'est la feuille Liste que vous allez compléter en cliquant sur le bouton Entree dans l'userform

Faites déjà un test pour vérifier si cela fonctionne bien comme vous voulez

Bonjour

Bonjour à tous

Un essai à tester.

Bye !

Bonjour

Ci joint ma solution

A+ François

Bonjour le fil, bonjour le forum,

À la ramasse... Tant pis, j'envoie quand même... Code Full Comment.

16ronnie-ep-v01.xlsm (43.02 Ko)

Merci les amis, je pense que Thau a répondu à la question.

Dan et François, vos solutions marchent parfaitement bien au niveau de la première partie, pour la seconde je vais garder celle de Thau. Merci d'avoir pris le temps de me répondre.

Bonjour,

La dernière vous m'aviez aidé à faire un formulaire avec plusieurs listes déroulantes et j'avais gardé le fichier de ThauThème au-dessus.

Maintenant, j'ai voulu ajouter une autre liste déroutante au processus, j'ai plutôt bien réussi à le faire mais j'ai un problème avec les doublons qui s'affichent (la meme valeur plusieurs fois) dans la combobox durée (cboDuree) et celle des cylindrées (cboCyl). Qu'est-ce que je dois modifier pour n'avoir qu'une seule valeur ?

Voici mon fichier, et merci d'avance.

1ronnie-ep-v01.xlsm (48.67 Ko)

Bonjour

Dans le code Private Sub cboDuree_Change(), votre ligne IF n'est pas correct. Remplacez là par ceci

If TV(I, 1) = Me.cboMarque.Value And TV(I, 2) = Me.cboModele.Value And TV(I, 3) = Me.cboProduit.Value And TV(I, 4) = Me.cboDuree.Value Then Me.cboCyl.AddItem TV(I, 5)

Juste en dessous de Private Sub cboDuree_Change, ajoutez

Dim i as integer
cboCyl.Clear

Cordialement

Hello Dan,

J'ai inséré le code et ca marche bien au niveau de la combox Cylindrée, mais j'ai toujours des doublons au niveau de la combobox durée (lorsque je sélectionne Box Optimal comme produit).

Voici le fichier modifié (j'ai oublié de le mettre en pièce jointe) :

7ronnie-ep-v01.xlsm (43.45 Ko)

re

En attendant le retour de Thautheme qui proposera surement autre chose, essayez ceci :

1. Dans la première sub --> intialize, déplacer -> Dim D As Object et placez la ligne juste avant Private Sub userform_initialize

2. Remplacez le code ci-dessous :

Private Sub cboProduit_Change() 'au changement dans la ComboBox
Dim I As Integer 'déclare la variable I (Incrément)

cboDuree.Clear 'effacer les donnees de la combo cboduree
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    'si la donnée ligne I colonne 1 de tv est égale à la marque de cboMarque
    'et si la donnée ligne I colonne 2 de tv est égale au modèle de cboModele
    'et si la donnée ligne I colonne 3 de tv est égale au produit de cboProduit
    'ajoute la donnée ligne I colonne 4 de TV (la durée) à cboDuree
    If TV(I, 1) = Me.cboMarque.Value And TV(I, 2) = Me.cboModele.Value And TV(I, 3) = Me.cboProduit Then
        If Not D.exists(TV(I, 4)) Then Me.cboDuree.AddItem TV(I, 4): D(TV(I, 4)) = ""
    End If
Next I 'prochaine ligne de la boucle
End Sub

Bonsoir le fil, bonsoir le forum,

Je ne proposerai rien de plus ayant horreur des fils à rallonge ou plus tu en donnes, plus on t'en demande. Le code étant full comment il me semble assez aisé de rajouter une combobox dans la cagade (heu pardon, dans la cascade voulais-je dire...) en étant un tant soit peu précautionneux et attentif...

Merci Dan, ca marche parfaitement bien. Pas besoin de modifier quoique ce soit de plus.

Merci beaucoup !

Rechercher des sujets similaires à "formulaire listes deroulantes dependantes fonction then"