XL 2010 Masquer les lignes en fonction du résultat d'une liste déroulante

Titi456

XLDnaute Junior
Bonjour,

Je souhaiterais pouvoir masquer les lignes ne correspondant pas au résultat de ma liste déroulante (cellule A1).

Exemple 1: Si cellule A1 = 8, j'aimerais que les lignes 5 à 8 et 10 à 13 soient masquées automatiquement.
Exemple 2: Si cellule A1 = 10, j'aimerais que les lignes 5 à 9 et 11 à 13 soient masquées automatiquement.

Pouvez-vous m'aider?

Mes meilleures salutations,

Thierry
 

Pièces jointes

  • Test1.xlsx
    10.4 KB · Affichages: 2
Solution
Utilisez le paramètre UserInterfaceOnly :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Me.Protect Password:=".", UserInterfaceOnly:=True
If Range("A1") = "" Then Rows("5:13").Hidden = False: Exit Sub
For Each c In Range("A5:A13")
    c.EntireRow.Hidden = c <> Range("A1")
Next
End Sub

Titi456

XLDnaute Junior
Bonjour Fanfan38,

Merci beaucoup pour votre aide. Votre code fonctionne parfaitement bien; le seul bémol c'est qu'il ne réaffiche pas toutes les lignes quand je vide la cellule A1 mais il est vrai que je ne l'avais pas mentionné dans ma demande initiale.

Mes meilleures salutations et bon début de semaine.

Thierry
 

job75

XLDnaute Barbatruc
Bonjour Titi456, fanfan38,

Ce code est plus simple :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
If Range("A1") = "" Then Rows("5:13").Hidden = False: Exit Sub
For Each c In Range("A5:A13")
    c.EntireRow.Hidden = c <> Range("A1")
Next
End Sub
Comme il y a peu de lignes il est inutile de tester Target.

A+
 

Pièces jointes

  • Test1.xlsm
    16.2 KB · Affichages: 1

Titi456

XLDnaute Junior
Bonjour Titi456, fanfan38,

Ce code est plus simple :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
If Range("A1") = "" Then Rows("5:13").Hidden = False: Exit Sub
For Each c In Range("A5:A13")
    c.EntireRow.Hidden = c <> Range("A1")
Next
End Sub
Comme il y a peu de lignes il est inutile de tester Target.

A+
Bonjour Job75,

Effectivement votre code est plus simple et je vous en remercie.
Je souhaiterais juste y ajouter un verrouillage de la feuille mais je suis pas fichu d'y arriver 😞.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect Password:="."
Dim c As Range
If Range("A1") = "" Then Rows("5:24").Hidden = False: Exit Sub
For Each c In Range("A5:A24")
    c.EntireRow.Hidden = c <> Range("A1")
Next
ActiveSheet.Protect Password:="."
End Sub

Mes meilleures salutations,

Thierry
 

job75

XLDnaute Barbatruc
Utilisez le paramètre UserInterfaceOnly :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Me.Protect Password:=".", UserInterfaceOnly:=True
If Range("A1") = "" Then Rows("5:13").Hidden = False: Exit Sub
For Each c In Range("A5:A13")
    c.EntireRow.Hidden = c <> Range("A1")
Next
End Sub
 

Pièces jointes

  • Test1.xlsm
    16.7 KB · Affichages: 3

Titi456

XLDnaute Junior
Utilisez le paramètre UserInterfaceOnly :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Me.Protect Password:=".", UserInterfaceOnly:=True
If Range("A1") = "" Then Rows("5:13").Hidden = False: Exit Sub
For Each c In Range("A5:A13")
    c.EntireRow.Hidden = c <> Range("A1")
Next
End Sub
Re bonjour,

C'est parfait! Merci à vous deux pour votre aide.

Mes meilleures salutations,

Thierry
 

Discussions similaires

Statistiques des forums

Discussions
313 197
Messages
2 096 115
Membres
106 501
dernier inscrit
axtion