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 SubRaja,
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