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
Rechercher des sujets similaires à "protection feuilles multiples senarios ouverts"