Accueil | Ce site | CV | Excel | Livre dor | Macros XL4 | Modèles | VBA
Ces deux procédures, contenues dans le module MOutils, apportent une grande sécurité aux applications développées sous Excel avec VBA. Elles empêchent lutilisateur de modifier un document Excel sans passer par les menus et/ou les zones de dialogue de lapplication (cf. exemple).
Chaque traitement devant modifier un classeur Excel commence par le lancement de Deprotege, qui ôte la protection de toutes les feuilles du classeur et se termine par celui de Protege qui la rétablit avant que lutilisateur ne récupère la main.
Cela évite la perte de données, ou la modification accidentelle de formule(s).
Voici le code permettant de protéger lensemble des feuilles dun classeur :
Sub Protege() Dim f as Worksheet For Each f In ActiveWorkbook.Worksheets f.Protect "Toto", True, True, True Next End Sub
Le code est très simple, on définit une variable, f, comme étant un objet Worksheet (feuille de calcul). Puis on lutilise pour parcourir la collection des objets Worksheet du classeur actif, à laide dune boucle For Each Next. Pour la structure du code, se reporter si nécessaire à létude de cette boucle.
Protect est une méthode de lobjet Worksheet. Le premier argument "Toto" représente le mot de passe, indiqué ici en clair. Les 3 arguments suivants correspondent aux éléments que lon peut protéger au sein dune feuille (figure 1).
Fig. 1 - Le dialogue permettant de protéger une feuille.
Si lon veut éviter que le mot de passe (Toto dans lexemple) soit clairement lisible en examinant le code, on peut protéger laccès au code VBA, ou stocker le mot de passe utilisé pour protéger les feuilles en utilisant un nom pour le stocker (figure 2).
Fig. 2 - Utilisation dun nom, MotPasse, pour stocker le mot de passe servant à protéger les feuilles
Voici une variante (ProtegeBis) du code qui va lire le mot de passe, en utilisant le nom tel quil est défini dans la figure 2 :
Sub ProtegeBis() Dim f as Worksheet For Each f In ActiveWorkbook.Worksheets f.Protect ThisWorkbook.Sheets("Feuil1").Evaluate("MotPasse"), True, True, True Next End Sub
On utilise ici la méthode Evaluate pour récupérer la chaîne de caractères correspondant au nom MotPasse.
Comme pour la procédure Protege, 2 variantes sont proposées ici. Deprotege utilise un mot de passe indiqué en clair dans le code VBA, tandis que DeprotegeBis utilise un nom.
Sub Deprotege() Dim f as Worksheet For Each f In ActiveWorkbook.Worksheets f.Unprotect "Toto" Next End Sub
Contrairement à la méthode Protect, Unprotect na quun argument, le mot de passe. Il nest pas possible dagir seulement sur le contenu, les objets ou les scénarios (figure 1). La déprotection est globale.
Sub DeprotegeBis() Dim f as Worksheet For Each f In ActiveWorkbook.Worksheets f.Unprotect ThisWorkbook.Sheets("Feuil1").Evaluate("MotPasse") Next End Sub