Masquer puis remettre des lignes selon liste déroulante

Bonjour à tous,

Etant débutant en VBA (mais vraiment débutant), j'aurai besoin d'un petit conseil !

Par ailleurs, je suis persuadé que la solution n'est pas si compliquée.

J'ai tenté de rédiger un code VBA permettant de masquer des lignes en fonction de la valeur d'une cellule sous forme de liste déroulante.

J'ai plutôt bien débuté. En effet lorsque je sélectionne une valeur, les lignes désirées sont masquées. Néanmoins, c'est là qu'intervient mon problème, lorsque je sélectionne une nouvelle valeur, les lignes précédemment masquées restent telles quelles et je souhaiterai les faire réapparaître et en masquer les autres qui correspondent à la seconde valeur choisie.

Je ne peux malheureusement pas partager mon document, mais voici le code que j'ai entré:

Private Sub Worksheet_Change(ByVal Target As Range)

If [D4] = "ED" Then Rows("162:436").Hidden = True

If [D4] = "France" Then Rows("6:436").Hidden = False

If [D4] = "IF" Then Rows("6:161").Hidden = True

If [D4] = "IF" Then Rows("209:436").Hidden = True

If [D4] = "ME" Then Rows("6:208").Hidden = True

If [D4] = "ME" Then Rows("259:436").Hidden = True

If [D4] = "NE" Then Rows("6:258").Hidden = True

If [D4] = "NE" Then Rows("306:436").Hidden = True

If [D4] = "O" Then Rows("6:305").Hidden = True

If [D4] = "O" Then Rows("348:436").Hidden = True

If [D4] = "RA" Then Rows("6:347").Hidden = True

If [D4] = "RA" Then Rows("392:436").Hidden = True

If [D4] = "SO" Then Rows("6:391").Hidden = True

End Sub

C'est mon premier post! J'espère avoir été clair. Et par rapport à mon niveau, soyez indulgents

Bonne journée

Amaury

Bonjour,

Qu'est-ce tu changes pour que la macro enclenche ? Et quelles sont les cellules concernées par cette modification ?

Car la macro s'exécute quand il y a une modification.

Raja,

Merci ta réponse,

La cellule que je changeais était D4. pour enclencher la macro. Lorsque je change celle-ci, des lignes apparaissent et d'autres disparaissent. j'ai rentré les intervalles à la main même si je reste persuadé qu'il existe une solution pour les automatiser.

J'ai toutefois trouvé une solution (peu orthodoxe sûrement) mais cette dernière fonctionne... voici le code modifié :

Private Sub Worksheet_Change(ByVal Target As Range)

If [D4] = "ED" Then Rows("162:436").Hidden = True

If [D4] = "ED" Then Rows("6:161").Hidden = False

If [D4] = "France" Then Rows("6:436").Hidden = False

If [D4] = "IF" Then Rows("6:161").Hidden = True

If [D4] = "IF" Then Rows("209:436").Hidden = True

If [D4] = "IF" Then Rows("162:208").Hidden = False

If [D4] = "ME" Then Rows("6:208").Hidden = True

If [D4] = "ME" Then Rows("259:436").Hidden = True

If [D4] = "ME" Then Rows("209:258").Hidden = False

If [D4] = "NE" Then Rows("6:258").Hidden = True

If [D4] = "NE" Then Rows("306:436").Hidden = True

If [D4] = "NE" Then Rows("259:305").Hidden = False

If [D4] = "O" Then Rows("6:305").Hidden = True

If [D4] = "O" Then Rows("348:436").Hidden = True

If [D4] = "O" Then Rows("306:347").Hidden = False

If [D4] = "RA" Then Rows("6:347").Hidden = True

If [D4] = "RA" Then Rows("392:436").Hidden = True

If [D4] = "RA" Then Rows("348:391").Hidden = False

If [D4] = "SO" Then Rows("6:391").Hidden = True

If [D4] = "SO" Then Rows("392:436").Hidden = False

End Sub

Re,

Essaye le code suivant :

Private Sub Worksheet_Change(ByVal Target As Range)
    Range("6:436").EntireRow.Hidden = False
    If Not Intersect(Range("D4"), Target) Is Nothing Then
        Select Case Target
            Case "ED":
                Range("162:436").EntireRow.Hidden = True
            Case "IF":
                Range("6:161,209:436").EntireRow.Hidden = True
            Case "ME":
                Range("6:208,259:436").EntireRow.Hidden = True
            Case "NE":
                Range("6:258,306:436").EntireRow.Hidden = True
            Case "O":
                Range("6:305,348:436").EntireRow.Hidden = True
            Case "RA":
                Range("6:347,392:436").EntireRow.Hidden = True
            Case "SO":
                Range("6:391").EntireRow.Hidden = True
        End Select
    End If
End Sub

Raja,

Votre code fonctionne parfaitement,

Je le garde précieusement et vais analyser davantage sa structure qui semble tout de même plus ergonomique que la mienne. Il y a encore de nombreuses fonctions telles que "if not intersect ... is nothing then" que je dois apprendre.

Un grand merci

Bonne continuation

Amaury

Rechercher des sujets similaires à "masquer puis remettre lignes liste deroulante"