Tout sur le Mode Protect UserInterfaceOnly True
Bonsoir Willy
Oui Très Bonne Question et tu as raison, l'aide est assez mal documentée et les exemples sont inexistants...
Voici le code :
Sub ProtectionSaufMacro()
ActiveSheet.Protect UserInterfaceOnly:=True
End Sub
Que l'on peut aussi écrire comme ceci :
Sub ProtectionSaufMacro()
ActiveSheet.Protect , , , , True
End Sub
Remarque IMPORTANTE de l'aide :
Si vous appliquez la méthode Protect et que l'argument UserInterfaceOnly a la valeur True dans une feuille de calcul et que vous enregistrez le classeur, l'intégralité du classeur (et pas uniquement l'interface) sera protégée lors de la réouverture du classeur. Pour déprotéger la feuille de calcul mais activer à nouveau la protection de l'interface utilisateur après l'ouverture du classeur, vous devez à nouveau appliquer la méthode Protect avec l'argument UserInterfaceOnly affecté de la valeur True.
Par conséquent j'en conclus qu'il est impératif de lancer le code à l'ouverture du fichier par l'évènementielle de ThisWorkBook Workbook_Open()
Puisque tu veux des infos sur cette procédure voici l'intégralité d'un poste de Frédérique Sigonneau, qui lui même reprenait Laurent Longre :
Bonsoir,
Protège ta feuille par macro, en utilisant la méthode Protect avec le
paramètre UserInterfaceOnly à True. Ce paramètre autorise les
modifications *par du code VBA* de cellules protégées.
Ce paramètre doit être réinitialisé à chaque ouverture du classeur.
Utilise le donc dans la procédure Workbook_Open de ton classeur :
Worksheets("Feui1").Protect Password:="zaza", UserInterfaceOnly:=True
FS
PS. Ci-dessous, extraits de l'aide de LL au sujet de ce paramètre :
[Copie]
L'aide sur ce paramètre est très mal formulée. Elle ne devrait pas dire:
"Cet argument a la valeur True pour protéger l'interface utilisateur,
mais pas les macros. Si cet argument n'est pas spécifié, la protection
s'applique à la fois aux macros et à l'interface utilisateur." Mais
plutôt quelque-chose comme: "Cet argument a la valeur True pour protéger
la feuille des actions effectuées par l'utilisateur, mais pas de celles
qui sont effectuées par macro. Si cet argument n'est pas spécifié, la
protection s'applique à la fois aux manipulations effectuées par
l'utilisateur et par des macros."
Autrement dit, par exemple, après :
Feuil1.Protect UserInterfaceOnly:=True
L'utilisateur ne pourra pas saisir une nouvelle valeur dans la cellule
A1 de Feuil1 si celle-ci est verrouillée. En revanche, une macro pourra
modifier la valeur de cette cellule (Feuil1.Range("A1") = 5, par
exemple) qu'elle soit verrouillée ou non, et sans déclencher de message
d'erreur ou d'avertissement.
Ca peut être très utile par exemple dans le cas d'un classeur avec des
feuilles protégées vis-à-vis de l'utilisateur, où toutes les
manipulations sont réservées à des procédures VBA.
D'autre part, UserInterfaceOnly permet également de protéger les
feuilles tout en autorisant sur ces feuilles les manipulations par
l'utilisateur de filtres, TCD ou symboles du plan (propriétés
EnableAutoFilter, EnablePivotTable et EnableOutlining des feuilles de
calcul). Il permet également d'interdire ou autoriser la sélection de
cellules verrouillées (EnableSelection).
**********
- Protection de toutes les feuilles du classeur :
Private Sub Workbook_Open()
Dim Wksht As Worksheet
For Each Wksht In Me.Worksheets
Wksht.Protect UserInterfaceOnly:=True
Next Wksht
End Sub
- Protection uniquement des feuilles "Tata", "Toto" et "Tutu" :
Private Sub Workbook_Open()
Dim Wksht As Worksheet
For Each Wksht In Me.Worksheets(Array("Toto", "Tata", "Tutu"))
Wksht.Protect UserInterfaceOnly:=True
Next Wksht
End Sub
[Fin copie]
Voilà comme çà c'est une lacune de l'aide comblée, mais attention tout de même car certains codes sont refusés quand même, donc il faut bien tester... (Par Exemple l'instruction "AddComment" est refusée)
Bonne Nuit
@+Thierry