Liste dépendantes mères-filles

Hello les excelliens,

Je sèche sur un problème qui m'avait l'air simple de prime abord :

Dans le fichier ci-joint, comment faire pour que les validation de données (En jaune) dépendent les unes des autres ?

Par exemple si je sélectionne TESLA dans Marque, je ne souhaite voir que "model 3";"model S" dans la liste suivante. Ensuite, si je sélectionne "Model S", je ne souhaite voir que "Blanche";"Noire"...etc.

C'est un fichier exemple, le fichier sur lequel je travaille fait des milliers de lignes et une vingtaine de colonne.

Je connais la méthode avec Indirect(nomdeliste) mais dans ce cas là ça ne me parait pas adapté : Il faudrait que je créé une liste pour chaque choix possible...Ingérable.

J'ai voulu utiliser des filtres de TCD pour remplacer les validations de données mais contrairement à ce que je pensais les listes qui apparaissent dans les filtres ne changent pas avec le choix "parent".

Si l'un de vous sait faire par VBA ou autre...

Merci !

Bonjour,

Une proposition avec des segments.

Cordialement.

Navré mais je suis sur excel 2010 et j'ai un message d'erreur comme quoi les segments ne sont pas pris en charge..

Merci quand même !

Bonjour

cf PJ

Boisgontier

Génial !

Vraiment, merci bcp.

Je vais devoir adapter le code à mon fichier, serait-il possible de m'expliquer les grandes étapes, le raisonnement global ?

Malheureusement, le code n'est pas adaptable.

La seule chose que l'on puisse faire, c'est déplacer la zone de saisie.

Boisgontier

Bonjour à tous ...

Une proposition (au tout départ inspirée des travaux de Jacques Boisgontier très certainement !)

Const nbZones = 5

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim data() As Variant
Dim choix() As Variant
Dim dico As Object
Dim i&, iData&, iZone&

    If Target.Count <> 1 Then Exit Sub
    ReDim choix(1 To nbZones)
    For i = 1 To nbZones
        choix(i) = Range("zone" & i).Value
        If Not Intersect(Range("zone" & i), Target) Is Nothing Then
            data = [Tableau1].Value
            Set dico = CreateObject("Scripting.Dictionary")
            For iData = 1 To UBound(data)
                flag = True
                If i > 1 Then
                    For iZone = 1 To i - 1
                        If choix(iZone) <> CStr(data(iData, iZone)) Then flag = False
                    Next
                End If
                If flag Then dico(CStr(data(iData, i))) = ""
            Next iData
            If dico.Count > 0 Then
                Target.Validation.Delete
                Target.Validation.Add xlValidateList, Formula1:=Join(dico.keys, ",")
            End If
            Exit For
        End If
    Next i
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    For i = 1 To nbZones
        If Not Intersect(Range("zone" & i), Target) Is Nothing Then
            If i < nbZones Then
                Application.EnableEvents = False
                For iZone = i + 1 To nbZones
                    With Range("zone" & iZone)
                        .Value = ""
                        .Validation.Delete
                    End With
                Next
                Application.EnableEvents = True
            End If
            Exit For
        End If
    Next
End Sub

Le tableau et les zones sont nommées

J'ai pu adapter le code à mon fichier (et un peu mon fichier au code) en modifiant la zone des listes, le nom du tableau et la variable nombre de niveau.

J'suis super content.

Grand merci à tous !

bonjour

sans VBA , listes triées alphabetiquement

petit code de RAZ

33appro.xlsm (69.11 Ko)

cordialement

Avec cette version, les les menus déroulants peuvent être placés n'importe où.

Boisgontier

Rechercher des sujets similaires à "liste dependantes meres filles"