Validation de données avec liste en cascade

Bonjour à tous,

Je souhaiterais avoir de l'aide sur le problème suivant :

J'aimerais lier une liste déroulante de choix en colonne C avec une liste de validation de données en colonne B.

Quand un choix est fait en colonne B, automatiquement une liste déroulante est créée en colonne C si on a plus d'une occurrence qui correspond au choix effectué dans la liste de validation.

Merci d'avance.

23listecascade.xlsx (10.68 Ko)

Salut !

Je n'ai pas bien fait le lien entre ton fichier et le problème exposé.

A toutes fins utiles ... 2 fichiers avec macro ci-joint si cela peut t'inspirer !

autre version vite fait ... sans macro

https://www.cjoint.com/c/EDmvmQh66ZD

Bonsoir Steelson,

J'ai créé une deuxième liste nommée "TT".

J'ai ajouté une liste de validation de données dans la colonne C de la feuille "BDD".

Mais les valeurs de la deuxième liste de correspondent souvent pas aux valeurs choisies dans la colonne B "BDD" !

Je pense que la formule de la deuxième plage fait défaut :

=DECALER(listes!$b$2;EQUIV(bdd!$b2;listes!$a:$a;0)-1;;EQUIV(bdd!$b2;listes!$a:$a;1)-EQUIV(bdd!$b2;listes!$a:$a;0)+1)

petite correction ...

=DECALER(Listes!$B$1;EQUIV(BDD!$B2;Listes!$A:$A;0)-1;;EQUIV(BDD!$B2;Listes!$A:$A;1)-EQUIV(BDD!$B2;Listes!$A:$A;0)+1)

Bonjour Steelson,

Ca fonctionne. Merci.

Suelement j'ai un souci pour avoir les valeurs d'un ligne sur trois colonne dans la deuxieme liste de validation de données.

J'ai essayé ceci :

=DECALER(Listes!$D$1;EQUIV(BDD!$B2;Listes!$A:$A;0)-1;;EQUIV(BDD!$B2;Listes!$A:$A;1)-EQUIV(BDD!$B2;Listes!$A:$A;0)+1;-3)

En ajoutant -3 j'ai eu par exemple :

15

K

1A

au lieu de :

15 k 1A

Hé oui, dans ta définition de "machine" tu as pris 3 colonnes (-3), je ne pense pas que ce soit possible.

Pour obtenir le résultat escompté, ajoute une colonne E dans l'onglet "Listes" et comprenant la concaténation des colonnes B, C et D

=Tableau3[[#Cette ligne];[Capacité]]&" "&Tableau3[[#Cette ligne];[Unité]]&" - "&Tableau3[[#Cette ligne];[Marque]]

Bonsoir Steelson,

Ok !

Je vais essayé cette solution.

Bonjour,

Ca fonctione merci.

Un petit souci :

En voulant sélectionner la première ligne de la deuxième liste en colonne C, au changement de la liste en colonne B, j'ai utilisé ce code :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 2 And Target.Count = 1 And Target <> "" Then
    ' Sélection de la premiere ligne dans la deuxieme liste
        Target.Offset(0, 1) = Sheets("listes").Range("TT").Item(1)
    Else
        Exit Sub
    End If
End Sub

Mais j'ai une erreur d’exécution sur cette ligne :

Target.Offset(0, 1) = Sheets("listes").Range("TT").Item(1)

Bonjour,

Personnellement je ne peux pas répondre ...

  • qu'est que la plage TT ? je ne l'ai pas trouvée dans ton fichier exemple pris plus haut dns les posts
  • Range.Item(1) renvoie la cellule supérieure gauche de la plage ; est-ce bien ce qui est recherché ?

Au fait, si c'est la colonne T, il manque un ":"

Range("T:T")

Bonjour,

Steelson a écrit :

Range.Item(1) renvoie la cellule supérieure gauche de la plage ; est-ce bien ce qui est recherché ?

Effectivement, j'aimerais sélectionner la première cellule de ma plage.

Un nouvel exemple en pièce jointe

machinesn'est pas défini nulle part !

Même avec Machine, ça donne la même erreur !

Target.Offset(0, 1) = Sheets("Listes").Range("Machine").Item(1)

Curieux en effet !

Proposition :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim C As Object
    If Target.Column = 2 And Target.Count = 1 And Target <> "" Then

        Set C = Sheets("listes").Columns("A").Find(Target.Value, Sheets("listes").Range("A1").End(xlDown), xlValues, xlWhole)
        If Not C Is Nothing Then
            Target.Offset(0, 1) = C.Offset(0, 4).Value
        End If

    Else
        Exit Sub
    End If
End Sub

Bonjour,

Merci pour le code.

Rechercher des sujets similaires à "validation donnees liste cascade"