Masquer plusieurs lignes en fontion de conditions

Fermé
Maud - 4 mars 2016 à 16:40
Mike-31 Messages postés 18318 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 26 avril 2024 - 4 mars 2016 à 17:34
Bonjour,

Je voudrais qu'en fonction du nombre d'enfants sélectionné dans ma cellule D13 un certain nombre de lignes en dessous soit caché : par exemple
- si j'ai 3 enfants, les lignes 17 à 21 doivent être cachées
- si j'ai 4 enfants, les lignes 18 à 21 doivent être cachées
- si j'ai 5 enfants, je dois avoir les lignes 19 à 21 soient cachées

J'ai essayé de faire ce code:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$13" Then
Select Case Range("D13")
Case 1
Rows("15:21").EntireRow.Hidden = True
Case 2
Rows("16:21").EntireRow.Hidden = True
Case 3
Rows("17:21").EntireRow.Hidden = True
Case 4
Rows("18:21").EntireRow.Hidden = True
Case 5
Rows("19:21").EntireRow.Hidden = True
Case 6
Rows("20:21").EntireRow.Hidden = True
Case 7
Rows("21:21").EntireRow.Hidden = True
End Select
End If
End Sub

Mais elle ne se déclenche pas tout le temps. Est-ce que c'est parce que j'ai un menu déroulant pour sélectionner le nombre d'enfant en D13? Ou Est-ce qu'il y a une erreur dans ma macro?
Je vous remercie par avance de votre aide
Maud
A voir également:

2 réponses

L'utilisation ici de Worksheet_Change est mauvaise. Worksheet_Change permet d'agir lorsque la sélection d'une cellule change. Il faut utiliser Worksheet_SelectionChange, qui lui agit lors d'un changement de valeur d'une cellule.
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Target.Address = "$D$13" Then 
Select Case Range("D13") 
Case 1 
Rows("15:21").EntireRow.Hidden = True 
Case 2 
Rows("16:21").EntireRow.Hidden = True 
Case 3 
Rows("17:21").EntireRow.Hidden = True 
Case 4 
Rows("18:21").EntireRow.Hidden = True 
Case 5 
Rows("19:21").EntireRow.Hidden = True 
Case 6 
Rows("20:21").EntireRow.Hidden = True 
Case 7 
Rows("21:21").EntireRow.Hidden = True 
End Select 
End If 
End Sub 
0
Mike-31 Messages postés 18318 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 26 avril 2024 5 078
Modifié par Mike-31 le 4/03/2016 à 17:41
Bonjour,

pour ma part comme la ligne 21 est fixe j'aurais écrit ce code

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim x, c As String
x = 14 + [$D$13].Value
c = 21
If Target.Address = "$D$13" Then
Cells.EntireRow.Hidden = False
If [$D$13] > 0 Then Rows(x & ":" & c).EntireRow.Hidden = True
End If
End Sub

A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0