Macro à simplifier
Invité
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
Invité
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+
Invité
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+
Invité
Bonsoir galopin01
Oui c'est une autre possibilité ça marche très bien aussi.
Merci bien pour ta réponse bonne soirée