Protection feuilles multiples et sénarios ouverts
Bonjour à tous,
Je viens vers vous afin de pouvoir diminuer la taille d'un code macro.
J'ai introduit un code dans ThisWorkbook pour pouvoir verrouiller toutes mes feuilles d'un classeur et cela en laissant plusieurs possibilités de modifications malgré cette protection.
Dim A As Integer
For A = 1 To Sheets.Count
Sheets(A).Protect Password:="test", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True
Next A
'Ligne de code pour verouiller et cacher une feuille
Worksheets("ZONE").Visible = xlSheetVeryHidden
End Sub
Cela ne fonctionne pas, il protège le fichier, mais ne libère les possibilités de modifications que sur la première feuille.
Alors j'ai modifié ce code comme ci-dessous et cela fonctionne.
Pourriez-vous m'expliquer comment écrire ce code en plus court.
Merci d'avance.
Option Explicit
Private Sub Workbook_Open()
'Dim A As Integer
'For A = 1 To Sheets.Count
Sheets("JANVIER").Protect Password:="test", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True
Sheets("FEVRIER").Protect Password:="test", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True
Sheets("MARS").Protect Password:="test", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True
Sheets("AVRIL").Protect Password:="test", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True
Sheets("MAI").Protect Password:="test", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True
Sheets("JUIN").Protect Password:="test", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True
Sheets("JUILLET").Protect Password:="test", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True
Sheets("AOUT").Protect Password:="test", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True
Sheets("SEPTEMBRE").Protect Password:="test", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True
Sheets("OCTOBRE").Protect Password:="test", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True
Sheets("NOVEMBRE").Protect Password:="test", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True
Sheets("DECEMBRE").Protect Password:="test", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True
'Next A
Worksheets("ZONE").Visible = xlSheetVeryHidden
End Sub
Bonjour,
Il y a peut-être plus simple.
Voici un exemple. A toi de compléter la ligne array pour protéger autant de feuilles nommées que tu le souhaites.
Private Sub Workbook_Open()
Dim Mois, a%, i%
Mois = Array("Janvier", "Février", "Mars")
For a = 1 To Sheets.Count
For i = 0 To UBound(Mois)
If Sheets(a).Name = Mois(i) Then
Sheets(a).Protect Password:="test", UserInterfaceOnly:=True, DrawingObjects:=True, _
Contents:=True, Scenarios:=True, AllowFiltering:=True, AllowFormattingCells:=True, _
AllowFormattingColumns:=True
End If
Next i
Next a
Worksheets("ZONE").Visible = xlSheetVeryHidden
End Sub
Cordialement,
Bonjour,
à tester,
mois = Array("JANVIER", "FÉVRIER", "MARS", "AVRIL", "MAI", "JUIN", "JUILLET", "AOÛT", "SEPTEMBRE", "OCTOBRE", "NOVEMBRE", "DÉCEMBRE")
For i = LBound(mois) To UBound(mois)
Sheets(mois(i)).Protect Password:="test", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True
Next i
Bonjour,
Une autre proposition.
Cdlt.
Option Explicit
Private Sub Workbook_Open()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
Select Case ws.Name
Case "ZONE"
ws.Visible = 2
Case Else
ws.Protect Password:="test", _
UserInterfaceOnly:=True, _
AllowFiltering:=True, _
AllowFormattingCells:=True, _
AllowFormattingColumns:=True
End Select
Next ws
End Sub