Re: Ma Macro se bloque quand ma feuille est protégée => UserInterFaceOnly !
Bonjour Archi, Roland, le Forum
La méthode Protect avec l'argument UserInterfaceOnly avec True, signifie (entre autre) que les macros (certaines instructions, pas toutes) peuvent s'exécuter, alors que le user ne peut faire les mêmes actions manuellement.
En conséquence, ce genre de méthode ne peut se paramétrer qu'au moment de la Protection de la Feuille. Sous entendu => Pas au moment du Run de la macro.
De plus, ce genre de méthode est "volatile", c'est à dire qu'il faut la ré-initialiser à chaque utilisation du classeur. En effet une fois le classeur fermé, l'argument UserInterfaceOnly se "volatilise".
En conclusion, il faut faire exécuter le code de paramétrage de Protection d'une (ou plusieurs) feuille(s) avec une macro évènementielle.
L'évènement WorkBook_Open semble bien convenir.
Pour rédiger une macro évènementielle, il faut l'écrire dans le Private Module de "ThisWorkBook". Pour ce faire :
1) Ouvrir VBE (Editeur Visual Basic) => Menu / Outils / Macro / Visual Basic Editor.. Ou raccourci clavier ALT + F11
2) Dans VBE ouvrir la fenêtre Explorateur de Projets => Menu / Affichage / Explorateur de Projets Ou raccourci clavier CTRL + R
3) Dans cet explorateur, expendre le "VBProjet(LeClasseurEnQuestion)"
4) Dans ce Projet expendre "Microsoft Excel Objects"
5) Double click sur "ThisWorkBook"
...à partir de là nous sommes dans le Private Module de "ThisWorkBook"
Ensuite une macro évènementielle qui se déclenchera à chaque ouverture du classeur se rédige comme suit :
Private Sub Workbook_Open()
MsgBox "Bonjour je suis le classeur " & ThisWorkbook.Name
End Sub
Ce code te dira bonjour à chaque ouverture en se présentant avec le nom du classeur... ;-) (sympa, non !! lol)
Voilà, donc dans ton cas, il faut écrire ceci en ajustant le nom de "TaFeuille" :
Private Sub Workbook_Open()
Sheets("TaFeuille").Protect UserInterfaceOnly:=True
End Sub
Avec ce code, ta macro "Tri_Classement" ci-dessus pourra fonctionner, alors que le User ne pourra pas modifier la Feuille en question.
Mise En Garde
Toutefois, si la protection des Macros est Haute, ou si le User les désactive, la protection n'aura pas lieu. Par conséquence il est aussi primordiale de procéder également à la protection de cette feuille manuellement (Menu / Outils / Protection) à ne faire qu'une fois.
Remarque Pour Mot de Passe
Si une protection par PassWord est nécessaire, alors il faudra modifier le code de WorkBook_Open également, voici comment le code se présente :
Private Sub Workbook_Open()
Sheets("TaFeuille").Protect Password:="TOTO", UserInterfaceOnly:=True
End Sub
Attention : veiller à synchroniser le Passworld rentré manuellement (Menu / Outils / Protection) avec celui du code. (Case Sensitive !)
Voilà, je pense que tout est clair maintenant !
Bon Dimanche à Tous et Toutes
@+Thierry