Listes déroulantes avec condition

Je veux créer des listes déroulantes qui soient fonction des résultats des deux colonnes précédentes.

Exemple :

Liste déroulante de la colonne AListe déroulante de la colonne BListe déroulante de la colonne C
PantalonBonne tailleSi A = Pantalon & B = Bonne taille -> Liste déroulante 1
ChemisePetitSi A = Pantalon & B = Petit -> Liste déroulante 2
RobeGrandSi A = Pantalon & B = Grand -> Liste déroulante 3
Jupe Si A = Chemise & B = Bonne taille -> Liste déroulante 4
Pull Si A = Chemise & B = Petit -> Liste déroulante 5
Si A = Chemise & B = Grand -> Liste déroulante 6
Si A = Robe & B = Bonne taille -> Liste déroulante 7
Si A = Robe & B = Bonne taille -> Liste déroulante 8
Si A = Robe & B = Bonne taille -> Liste déroulante 9
Si A = Jupe & B = Bonne taille -> Liste déroulante 10
Si A = Jupe & B = Bonne taille -> Liste déroulante 11
Si A = Jupe & B = Bonne taille -> Liste déroulante 12
Si A = pull & B = Bonne taille -> Liste déroulante 13
Si A = pull & B = Bonne taille -> Liste déroulante 14
Si A = pull & B = Bonne taille -> Liste déroulante 15

Merci d'avance pour votre aide

Bonjour,

C'est jouable avec des zones nommées comme il faut, un ou deux aménagements, les fonctions indirect() et substitue().

M'enfin sans le fichier...

Bonjour

Bonjour à tous

Un essai à tester. Te convient-il ?

20essai-v1.xlsm (24.44 Ko)
Option Explicit

Dim tabloA, tabloB, tablo1, tablo2, tablo3, tablo4, tablo5, tablo6, tablo7
Dim tablo8, tablo9, tablo10, tablo11, tablo12, tablo13, tablo14, tablo15
Dim i&, j&, col&, liste, sformula
Dim iA&, iB&

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Or Target.Address = "$B$1" Then
        Application.EnableEvents = False
        Range("C1").Validation.Delete
        Range("C1").ClearContents
    End If
    Application.EnableEvents = True
    End
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Address <> "$C$1" Then Exit Sub
Target.Validation.Delete
        tabloA = Range("G2:G" & Range("G" & Rows.Count).End(xlUp).Row)
        tabloB = Range("I2:I" & Range("I" & Rows.Count).End(xlUp).Row)

        For i = 1 To UBound(tabloA, 1)
            If tabloA(i, 1) = Range("A1") Then
                Exit For
            End If
        Next i

        For j = 1 To UBound(tabloB, 1)
            If tabloB(j, 1) = Range("B1") Then
                Exit For
            End If
        Next j

        Set liste = Range("liste" & (i - 1) * UBound(tabloB, 1) + j)
        For i = 1 To liste.Count
             sformula = sformula & "," & liste(i)
        Next i

        Target.Validation.Delete
        Target.Validation.Add Type:=xlValidateList, Formula1:=sformula
End Sub

Bye !

Bonjour,

Puisque Gmb a eu le courage de fabriquer un fichier, voilà une version sans aucune macro, basée sur les données qu'il a rentrées.

autant de tableaux structurés qu'il faut, nommés sur cette structure :

image

Puis formule pour la validation des données :

=INDIRECT(""&$A$1&"_"&SUBSTITUE($B$1;" ";"_")&"")

Bonjour les amis,

Je vous remercie infiniment pour vos efforts, sauf que mon niveau ne me permet pas de vous suivre..., c'est trop compliqué pour moi :(

Ce que je souhaite faire est : mettre une liste déroulante dans la colonne G de la feuille "ECHECS A ANALYSER" en fonction de la BDD où il y a toutes les possibilités (très explicite à mon sens).

Encore merci pour votre aide !

10macro-a-tester.xlsx (40.28 Ko)

Bonjour,

Je te laisse voir avec gmb ou d'autres, puisque ma solution n'avait pas l'air de convenir.

@Joyeux Noel : ce n'est pas du tout ce que j'ai dit :(

Je n'ai pas su appliquer vos solutions sur mon fichier

@gmp : tu veux bien m'aider stp ? :(

Bonjour

Bonjour à tous

Nouvelle version.

Option Explicit

Dim tabloA, tabloB, liste As Range
Dim i&, j&, ln&, sformula$

Private Sub Worksheet_Change(ByVal Target As Range)
    ln = Target.Row
    If Target.Address = "$E$" & ln Or Target.Address = "$F$" & ln Then
        Application.EnableEvents = False
        Range("G" & ln).Validation.Delete
        Range("G" & ln).ClearContents
    End If
    Application.EnableEvents = True
    End
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("G2:G751")) Is Nothing Then
        Target.Validation.Delete
        With Sheets("BDD")
            tabloA = .Range("A3:A" & .Range("A2").End(xlDown).Row)
            tabloB = .Range("A12:A" & .Range("A11").End(xlDown).Row)
        End With

        ln = Target.Row
        For i = 1 To UBound(tabloA, 1)
            If tabloA(i, 1) = Range("E" & ln) Then
                Exit For
            End If
        Next i

        For j = 1 To UBound(tabloB, 1)
            If tabloB(j, 1) = Range("F" & ln) Then
                Exit For
            End If
        Next j

        On Error GoTo fin
        Set liste = Sheets("BDD").Range("liste" & (i - 1) * UBound(tabloB, 1) + j)
        For i = 1 To liste.Count
            If liste(i) <> "" Then
                sformula = sformula & "," & liste(i)
            End If
        Next i

        Target.Validation.Delete
        Target.Validation.Add Type:=xlValidateList, Formula1:=sformula
    End If
fin:
End Sub

Bye !

Bonjour,

Tu y étais presque. Je t'avais dit (capture d'écran à l'appui) que les tableaux étaient à nommer suivant le nommage de tes critères. C'est cette étape qui te manquait (et que j'ai à nouveau fait dans le fichier ci-joint).

Nouvelle formule pour la validation des données :

=INDIRECT(""&SUBSTITUE($E2;" ";"_")&"_"&SUBSTITUE($F2;" ";"_")&"")

Tu as juste à te mettre sur ta cellule G2, à écrire cette formule dans la validation des données, à étendre ça sur ta colonne (ou mieux, mettre ton tableau échecs à analyser sous forme de tableau structuré), et c'est tout bon, tes listes déroulantes s'adaptent de partout (déjà mis en place dans le fichier ci-joint).

24essai.xlsx (40.22 Ko)

Mille mercis !

Tu me sauves :)

Ni plus ni moins que gmb, qui t'a développé un programme personnalisé 😉

Bonsoir,

Petite question d'ordre général ici.

À quel moment pensez-vous qu'il est préférable de faire une macro plutôt que d'utiliser les outils natifs d'Excel ?

Pour quelque chose comme ceci, j'ai l'impression que c'est beaucoup plus facile de faire ça sans macro. Mais je n'arrive pas à savoir si c'est parce que j'ai bien poncé les formules avant de me lancer dans le VBA, et que je maîtrise beaucoup moins le VBA du coup.

Bonjour JoyeuxNoel

Je ne saurais te répondre car, pour ma part, je ne suis pas très fort en formules. En revanche, les macros me passionnent : j'en fais juste pour le plaisir. Tant mieux si elles rendent service à quelqu'un, c'est gratifiant.

Mais qu'il ait oublié de dire bonjour ou merci ne me touche guère s'il m'offre une occasion de me régaler...!

Bye !

Rechercher des sujets similaires à "listes deroulantes condition"