Coherence entre liste déroulante

Bonjour,

Alors je travaille pour mon bureau d'étude .

J'ai fait un fichier (pièce jointe), je voudrai pouvoir créer une cohérence de choix. Je m'explique:

Quand je sélectionne dans la colonne A de la feuille "METRE" une désignation colonne A de la feuille "PARAMETRE" je souhaite une cohérence qui renvoie une rubrique de la colonne B de la feuille "PARAMETRE".

De cette manière il ne serait pas possible de sélectionner un niveau "R-2" avec un "Type 2" par exemple.

Mais je souhaite une cohérence également de la colonne B de la feuille METRE" avec la colonne D de la même feuille. De cette manière il ne serait pas possible de choisir un "commun" de la colonne B de la feuille "PARAMETRE" avec "chambre" de la colonne C de la feuille "PARAMETRE".

Afin de comprendre les différents niveaux de cohérence, dans la feuille "PARAMETRE" apparaissent 3 colonnes qu'il faut lire horizontalement, pour un R-2 colonne A le seul équivalent possible se trouve dans la colonne suivante, puis en fonction du choix de la colonne B il n'y a que les choix de la colonne C, j'ai positionné un filtre pour mieux comprendre.

Merci pour votre aide, j'ai voulu essayer avec des listes déroulantes VBA mais je n'ai pas trouvé la commande pour la deuxième action. J'ai trouvé le choix de la première colonne qui renvoi le choix de la deuxième colonne de la feuille "PARAMETRE", mais je n'arrive pas à générer un choix de la deuxième colonne qui proposerait un choix de la troisième colonne de la feuille.

Merci d'avance pour votre aide.

20metre.xlsm (63.13 Ko)

Bonjour,

Une recherche sur les mots-clés "listes en cascade" devrait te ramener une foule d'exemples.

Si tu avais trouvé un début de piste en VBA, pourquoi ne pas l'avoir laissée dans le fichier ? Tu as travaillé avec un UserForm ... c'est ce type de solution que tu recherches ou de "simples" listes de validations dans le cellules conviendraient ?

Peut-on imaginer que les données de la feuille "Parametre" soient systématiquement triées sur 2 niveaux (désignation, puis type de logement) ?

Bonjour,

Une piste avec un ComboBox issu de la barre d'outils "Formulaire" et créé dynamiquement sur les cellules des trois premières colonnes .Il est détruit sur la précédente cellule à chaque changement de cellule et recréé dans la cellule nouvellement sélectionnée et sa liste est chargée en fonction de la colonne par rapport à la cellule de la colonne de gauche.

Code à mettre dans le module de la feuille "METRE" :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim Plage As Range
    Dim Cel As Range
    Dim Dico As Object
    Dim Cle
    Dim Cb As Shape

    On Error Resume Next
    ActiveSheet.Shapes("MonComboBox").Delete
    On Error GoTo 0

    If Target.Count > 1 Then Exit Sub

    Set Dico = CreateObject("Scripting.Dictionary")
    With Worksheets("PARAMETRE"): Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

    Select Case Target.Column
        Case 1
            With Target: Set Cb = ActiveSheet.Shapes.AddFormControl(xlDropDown, .Left, .Top, .Width, .Height): End With
            Cb.Name = "MonComboBox"
            For Each Cel In Plage: Dico(Cel.Value) = Cel.Value: Next Cel

        Case 2
            With Target: Set Cb = ActiveSheet.Shapes.AddFormControl(xlDropDown, .Left, .Top, .Width, .Height): End With
            Cb.Name = "MonComboBox"
            For Each Cel In Plage
                If Cel.Value = Target.Offset(, -1).Value Then Dico(Cel.Offset(, 1).Value) = Cel.Offset(, 1).Value
            Next Cel

        Case 3
            With Target: Set Cb = ActiveSheet.Shapes.AddFormControl(xlDropDown, .Left, .Top, .Width, .Height): End With
            Cb.Name = "MonComboBox"
            For Each Cel In Plage
                If Cel.Offset(, 1).Value = Target.Offset(, -1).Value Then Dico(Cel.Offset(, 2).Value) = Cel.Offset(, 2).Value
            Next Cel

    End Select

    If Not Cb Is Nothing Then

        For Each Cle In Dico.Keys: Cb.ControlFormat.AddItem Dico(Cle): Next Cle
        Cb.OnAction = "Remplir"

    End If

End Sub

Code à mettre dans le module standard :

Sub Remplir()

    Dim Cb As Shape
    Set Cb = ActiveSheet.Shapes(Application.Caller)

    ActiveCell.Value = Cb.ControlFormat.List(Cb.ControlFormat.ListIndex)

End Sub

Bonjour,

Merci pour cette version, mais cela ne correspond pas à ce que je souhaitais.

Je souhaite que lorsque je sélectionne dans un premier ComboBox une donnée, cela motive un choix possible dans un deuxième ComboBox, puis dans le deuxième ComboBox mon choix motive un choix dans une liste possible dans un troisième ComboBox.

Je souhaite jouer la cohérence et interdire certains choix en ne proposant que ce qui est possible dans le deuxième et troisième ComBoBox en fonction du choix du premier. Un choix en cascade.

Je joins un exemple que j'ai repris sur un autre mes projets.

12metre-2.xlsm (65.98 Ko)

Bonjour,

Merci pour cette version, mais cela ne correspond pas à ce que je souhaitais

En disant cela, je présume que tu ne parles que de "design" ... pour le reste, la proposition de Theze fait ce que tu demandes (ou alors nous sommes deux à n'avoir rien compris !) ?

Tant qu'à livrer un fichier (ce qui est une bonne idée, je le confirme ) ... tu aurais pu nettoyer le code de tout ce qui n'était plus utile.

Comme tu as déjà utilisé un objet "dictionary" dans ton code, tu devrais pouvoir t'inspirer de celui de Theze et l'adapter à ta propre situation, non ? Si tu confirmes que la suggestion de Theze fait bien le job, dis-nous si tu veux un coup de main pour adapter à ton UserForm.

Re,

J'avais un peu de temps ... et je commençais à me "rouiller"

On ne sait pas ce qui devrait apparaître dans ta 4e liste ? Je ne me suis occupé que des trois premières.

On ne sait pas bien non plus pourquoi il y a tant de doublons dans tes 3 premières colonnes en feuille "Paramètres". On aurait pu se contenter de moins de 1687 lignes, mais avec des contenus plus significatifs.

J'ai laissé la feuille "Paramètres" affichée: ça fait un peu moins "fichier vide" à l'ouverture

Bonjour

Merci pour ce retour, oui c'est exactement cela qu'il me fallait.

Pour le design t'inquiètes je travaille dessus.

Merci mille fois pour ton aide

Rechercher des sujets similaires à "coherence entre liste deroulante"