Consulter les parametres de Worksheet.Protect
Bonjour,
Imaginons un fichier Excel, avec des feuilles dont certaines sont protégées, d'autres non,
et parmi les feuilles protégées, elles ne le sont pas toutes de la même manière
par exemple, une feuille ne permet pas le tri, mais permet le redimensionnement des colonnes
une autres feuilles permet le tri mais pas l’insertion de colonnes,....
voilà donc des protections de feuilles vraiment sur mesure en fonction de chaque besoin.
et bien sur, ce n'est pas moi qui ai créez le fichier, et je ne sais pas à l'avance comment chaque feuille est protégée
comment consulter simplement la manière dont est protégé chaque feuille?
Est-il possible "d'extraire/consulter" la fonction Worksheet.Protect de chaque feuille pour connaitre l'état de chacun de ses paramètres (si il sont false ou true)
le but étant d'obtenir quelque chose du genre : (pour chaque feuille)
With Sheets("Feuil1")
.Protect Password:=mdp, Scenarios:=False, AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, _
AllowInsertingColumns:=False, AllowInsertingRows:=False, AllowInsertingHyperlinks:=False, AllowSorting:=True, AllowFiltering:=True, _
AllowUsingPivotTables:=True
.EnableSelection = xlNoRestrictions
End With
l'idée c'est vraiment de savoir comment chaque feuille est protégée sans même enlever la protection, juste en "questionnant" le fichier.
au cas où et pour relancer le topic, j'ai mis un petit fichier si cela peut aider à mieux comprendre
je vous remercie d'avance
Hello,
Il me semble que lorsque tu enlèves la protection manuellement et que tu l'as remet il te propose les derniers paramètres
R@g
C'est vrai,
mais quand il y a plus d'une vingtaines de feuilles, c'est un peu long
et puis il faut prendre un papier, pour savoir que cette feuille est protégée comme-ci, et l'autre comme-ça,...
je suis un peu feignant (donc intelligent)
il n'y a vraiment pas moyen d'obtenir ces infos en une seule fois pour toutes les feuilles rapidement?
Hello,
Quelques exemples, à faire pour tous les parametres et une boucle sur toutes els feuilles
If Sheets(1).ProtectDrawingObjects = true Then MsgBox "DrawingObjects ok "
If Sheets(1).ProtectContents = True Then MsgBox "Contents ok"
If Sheets(1).ProtectScenarios = True Then MsgBox "Scenarios ok"
If Sheets(1).Protection.AllowFormattingCells = False Then MsgBox "AllowFormattingCells ok"
R@g
ah oui voilà, pas bête du tout... ça va marcher
je vais écrire ça, le tester, et je te redit
Eriic
peux-tu m'expliquer où trouver ces informations?
Sinon j'ai écrit ce code :
un peu lourd quand même et avec un petit défaut que je compte bien résoudre en comptant le nombre de feuille avant de lancer l'interrogation
Sub test_protect()
'Macro permettant de tester la protection de chaque feuille du classeur
'd'abord créer une feuille qui récolte le résultat
Sheets.Add After:=ActiveSheet
Sheets("Feuil8").Select
Sheets("Feuil8").Move Before:=Sheets(1)
Sheets("Feuil8").Name = "Resultat"
Range("A1").Select
'création d'un petit tableau
Range("A2").Value = "DrawingObjects"
Range("A3").Value = "Contents"
Range("A4").Value = "Scenarios"
Range("A5").Value = "AllowFormattingCells"
Range("A6").Value = "AllowFormattingColumns"
Range("A7").Value = "AllowFormattingRows"
Range("A8").Value = "AllowInsertingColumns"
Range("A9").Value = "AllowInsertingRows"
Range("A10").Value = "AllowInsertingHyperlinks"
Range("A11").Value = "AllowDeletingColumns"
Range("A12").Value = "AllowDeletingRows"
Range("A13").Value = "AllowSorting"
Range("A14").Value = "AllowFiltering"
Range("A15").Value = "AllowUsingPivotTables"
Dim i As Integer
Dim j As Integer
Dim namesheet As String
j = ActiveWorkbook.Sheets.Count 'compte le nombre de feuille
'boucle qui pour chaque feuille test la nature de la protection
For i = 1 To j
Sheets("Resultat").Cells(1, i + 1).Value = Sheets(i).Name
'créer le titre de la colonne
If Sheets(i).ProtectDrawingObjects = True Then
Sheets("Resultat").Cells(2, i + 1).Value = "True"
Else: Sheets("Resultat").Cells(2, i + 1).Value = "False"
End If
If Sheets(i).ProtectContents = True Then
Sheets("Resultat").Cells(3, i + 1).Value = "True"
Else: Sheets("Resultat").Cells(3, i + 1).Value = "False"
End If
If Sheets(i).ProtectScenarios = True Then
Sheets("Resultat").Cells(4, i + 1).Value = "True"
Else: Sheets("Resultat").Cells(4, i + 1).Value = "False"
End If
If Sheets(i).Protection.AllowFormattingCells = True Then
Sheets("Resultat").Cells(5, i + 1).Value = "True"
Else: Sheets("Resultat").Cells(5, i + 1).Value = "False"
End If
If Sheets(i).Protection.AllowFormattingColumns = True Then
Sheets("Resultat").Cells(6, i + 1).Value = "True"
Else: Sheets("Resultat").Cells(6, i + 1).Value = "False"
End If
If Sheets(i).Protection.AllowFormattingRows = True Then
Sheets("Resultat").Cells(7, i + 1).Value = "True"
Else: Sheets("Resultat").Cells(7, i + 1).Value = "False"
End If
If Sheets(i).Protection.AllowInsertingColumns = True Then
Sheets("Resultat").Cells(8, i + 1).Value = "True"
Else: Sheets("Resultat").Cells(8, i + 1).Value = "False"
End If
If Sheets(i).Protection.AllowInsertingRows = True Then
Sheets("Resultat").Cells(9, i + 1).Value = "True"
Else: Sheets("Resultat").Cells(9, i + 1).Value = "False"
End If
If Sheets(i).Protection.AllowInsertingHyperlinks = True Then
Sheets("Resultat").Cells(10, i + 1).Value = "True"
Else: Sheets("Resultat").Cells(10, i + 1).Value = "False"
End If
If Sheets(i).Protection.AllowDeletingColumns = True Then
Sheets("Resultat").Cells(11, i + 1).Value = "True"
Else: Sheets("Resultat").Cells(11, i + 1).Value = "False"
End If
If Sheets(i).Protection.AllowDeletingRows = True Then
Sheets("Resultat").Cells(12, i + 1).Value = "True"
Else: Sheets("Resultat").Cells(12, i + 1).Value = "False"
End If
If Sheets(i).Protection.AllowSorting = True Then
Sheets("Resultat").Cells(13, i + 1).Value = "True"
Else: Sheets("Resultat").Cells(13, i + 1).Value = "False"
End If
If Sheets(i).Protection.AllowFiltering = True Then
Sheets("Resultat").Cells(14, i + 1).Value = "True"
Else: Sheets("Resultat").Cells(14, i + 1).Value = "False"
End If
If Sheets(i).Protection.AllowUsingPivotTables = True Then
Sheets("Resultat").Cells(15, i + 1).Value = "True"
Else: Sheets("Resultat").Cells(15, i + 1).Value = "False"
End If
Next i
End Sub
Voilà, si quelqu'un à mieux... je suis preneur
PS : plutôt que d'écrire :
If Sheets(i).ProtectScenarios = True Then
Sheets("Resultat").Cells(4, i + 1).Value = "True"
Else: Sheets("Resultat").Cells(4, i + 1).Value = "False"
End If
tu peux simplifier avec :
Sheets("Resultat").Cells(4, i + 1).Value = Sheets(i).ProtectScenarios