Crée un menu en cascade VBA

Bonjour,

Je sollicite de nouveau votre aide,

J'ai un tableau avec Assurance / Profession/ Nom/Prenom/ Ville ...

J'aurais besoin de crée un menu déroulant en cascade ou l'on demanderait à l'utilisateur de sélectionner l'assurance, ensuite la profession et enfin on aurait une liste des personnes correspondant. Je vous ai mit une parti de mon tableau il y a bien entendu plus autre types d'assurance et plusieurs autre professions.

Merci d'avance pour votre aide

Ce forum est une petite pépite merci de nous aider !!

23menuencascade.xlsm (21.59 Ko)

Bonjour,

http://boisgontierjacques.free.fr/pages_site/listes_cascade.htm

Je ne sais si les propositions de ce site fonctionnent sous Excel pour Mac ...

Perso > je ne connais pas les Mac ...

ric

Bonjour

Merci j'ai également la possibilité d'utilisé un windows.

Re-

une proposition (en faisant abstraction de tes macros qui ne sont plus tout à fait utiles je pense)

elle s'appuie ici sur un tableau structuré

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&, plus&

    If Target.Count <> 1 Then Exit Sub
    plus = Target.Row - 1
    If plus = 0 Then Exit Sub

    ReDim choix(1 To nbZones)
    For i = 1 To nbZones
        choix(i) = Range("zone" & i).Offset(plus, 0).Value
        If Not Intersect(Range("zone" & i).Offset(plus, 0), Target) Is Nothing Then
            data = [TabData].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)

    If Target.Count <> 1 Then Exit Sub
    plus = Target.Row - 1
    If plus = 0 Then Exit Sub

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

End Sub
15menuencascade.xlsm (20.94 Ko)

Bonjour Steelson,

Merci pour votre aide, je suis désolé j''ai mal exprimer mon problème. J'aurais besoin d'un code ou l'on a un menu déroulant seulement sur les deux premiere colonne et ensuite que le reste se remplie automatiquement.

De plus j'aurais des cas ou il y aura deux lignes qui peuvent être rempli automatiquement. Dans le cas ou j'ai deux personne qui ont la meme assurance et la meme profession.

Encore merci pour votre aide,

Merci d'avance

Bonjour,

et pourquoi pas un simple filtre automatique ?
eric

Bonjour,

Non ce n'est pas un filtre j'ai besoin d'avoir ce menu déroulant sur toute la colonne A.

Merci par avance pour votre aide

Désolé mais c'est ce que propose un filtre automatique.
Il faudrait peut-être développer un peu plus le besoin réel pour comprendre pourquoi il ne suffit pas dans ton cas.
eric

Edit : j'ai sans doute eu une lecture en diagonale trop rapide...

ok, donc on va combiner menu déroulant et filtre

Bonjour,

Merci beaucoup pour votre aide mais je cherche pas un filtre mais plutôt un tableau où j'aurais une liste déroulante en colonne A et une liste qui depend de A en colonne B.

De plus je souhaite pouvoir afficher une assurance et à la suite juste en dessous une autre assurance. On peut avoir le cas de deux personne ayant la meme profession et la meme assurance.

Je sais pas si je suis bien clair. Du coup il est important de garder la meme idée que mon fichier de depart.

Merci beaucoup pour toute votre aide

Fais un exemple plus complet de ce que tu souhaites avec un exemple de l'affichage final. Parce que là, je ne sais plus quoi faire !

Voila j'ai mit des notes sur le fichier.

Merci pour ton aide

capture d ecran 247

Bonjour c'est seulement une erreur il devrait y avoir seulement des assurance dans cette ligne. C'était juste pour vous montrer le principe.

Non, cela ne colle pas du tout !

Si je mets une assurance à gauche, pourquoi il n'y a qu'une seule ligne à chaque fois en regard des lignes 17 et 18 et pas de la 13

J'avais demandé un fichier exemple pour voir cela.

Bon, je vais te faire une 3ème proposition comme je l'entends.

Bonjour,

je tente de reprendre, mais il y a une impossibilité dans ce que tu demandes :

De plus je souhaite pouvoir afficher une assurance et à la suite juste en dessous une autre assurance. On peut avoir le cas de deux personne ayant la meme profession et la meme assurance.

et si le résultat est multiple à la première sélection ?

Bonjour justement si il y a plusieurs proposition j'ai besoin que toute les proposition se mette à la suite sur une nouvel ligne.

Merci d'avance

Je reste sur ma proposition qui te donne l'ensemble des possibilités selon les critères donnés sur les 3 lignes du haut. S'il fallait le faire dans la réponse même (mélanger critères et résultats) ce serait une complexité du code que je trouve inutile. Mais sinon je laisse la place à quelqu'un d'autre.

On va attendre ric et eriiiic (qui a raison sur le filtre, ce que j'ai utilisé)

Rechercher des sujets similaires à "cree menu cascade vba"