Macro à simplifier

Bonsoir, à toutes et à tous

J’utilise le code ci-dessous qui pour but, c’est de masquer des lignes en fonction d’une cellule dans une autre feuille et ce code fonctionne bien mais je le trouve un peu lourd.

Je souhaiterai de l’aide pour améliorer ce code, le rendre plus simple si cela est possible.

Merci de votre collaboration.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = True

 If Sheets("Feuil3").Range("G31").Value = "" Then
       With ActiveSheet
        .Unprotect Password:="tito"
        .Rows("41:46").Hidden = True
        .Rows("92:97").Hidden = True
       End With
             ActiveSheet.Protect Password:="tito"
    Exit Sub
    Else
       With ActiveSheet
        .Unprotect Password:="tito"
        .Rows("41:46").Hidden = False
        .Rows("92:97").Hidden = False
       End With
            ActiveSheet.Protect Password:="tito"        
    End If

Application.ScreenUpdating = True
End Sub

Bonjour Chindou

1) Je changerais d’événement "Change" plutôt que "SelectionChange"

2) voici une possibilité expliquée

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Flg As Boolean
  Application.ScreenUpdating = False
  ' Valeur du flag
  Flg = Sheets("Feuil3").Range("G31").Value = ""
  '
  With ActiveSheet
    .Unprotect Password:="tito"
    .Rows("41:46").Hidden = Flg
    .Rows("92:97").Hidden = Flg
    .Protect Password:="tito"
  End With
  Application.ScreenUpdating = True
End Sub

A+

Bonjour BrunoM45,

Je te remercie pour ta réponse.

J'ai essayé ça fonctionne bien

Bonjour,

Autre possibilité :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Y
ActiveSheet.Protect Password:="tito", UserInterfaceonly:=True
Application.ScreenUpdating = False
Y = Sheets("Feuil3").Range("G31") = ""
Rows("41:46").Hidden = Y
Rows("92:97").Hidden = Y
End Sub

A+

Bonsoir galopin01

Oui c'est une autre possibilité ça marche très bien aussi.

Merci bien pour ta réponse bonne soirée

Rechercher des sujets similaires à "macro simplifier"