Bonjour,
J'ai découvert l'option UserInterFaceOnly de la procédure Protect des feuillets. Elle protège le classeur contre toute modification non désirée de l'utilisateur en laissant le champ libre à mes macros de faire les leurs.
Cela n'a l'air de rien, mais protéger les feuillets avec une procédure spécialisée qui protège les feuillets aussi contre les macros, complique horriblement l'analyse du code VBA. Les problèmes d'une telle méthode, ce sont les appels en cascade qui conduisent à mettre la protection dans une sub appelée en secondaire par une autre qui n'a pas besoin encore de protection ; l'exécution du code bloque. La parade que j'utilise face à cela, c'est de multiplier la procédure pour ôter la protection lorsque cela pêche : cela complique beaucoup le code, l'exécution est alourdie et est lente, pire, il est difficile de prévoir où et quand il faut mettre ces rustines!
UserInterFaceOnly facilite la tâche en supprimant toutes ces inélégantes instructions.
Reste que je dois aussi protéger mes onglets (déplacement, suppression, couleur, nom...), aussi le classeur semble ne pas avoir ce genre de paramètre ! Comment faire pour protéger mes classeurs sans utiliser une succession inefficace de procédures pour activer et désactiver la protection lorsque mes macros font des changements?
J'ai découvert l'option UserInterFaceOnly de la procédure Protect des feuillets. Elle protège le classeur contre toute modification non désirée de l'utilisateur en laissant le champ libre à mes macros de faire les leurs.
Cela n'a l'air de rien, mais protéger les feuillets avec une procédure spécialisée qui protège les feuillets aussi contre les macros, complique horriblement l'analyse du code VBA. Les problèmes d'une telle méthode, ce sont les appels en cascade qui conduisent à mettre la protection dans une sub appelée en secondaire par une autre qui n'a pas besoin encore de protection ; l'exécution du code bloque. La parade que j'utilise face à cela, c'est de multiplier la procédure pour ôter la protection lorsque cela pêche : cela complique beaucoup le code, l'exécution est alourdie et est lente, pire, il est difficile de prévoir où et quand il faut mettre ces rustines!
UserInterFaceOnly facilite la tâche en supprimant toutes ces inélégantes instructions.
Reste que je dois aussi protéger mes onglets (déplacement, suppression, couleur, nom...), aussi le classeur semble ne pas avoir ce genre de paramètre ! Comment faire pour protéger mes classeurs sans utiliser une succession inefficace de procédures pour activer et désactiver la protection lorsque mes macros font des changements?