Avec un déclencheur comme une case à cocher, je souhaite protéger mon carnet de travail. J'ai essayé Excel 2003:
thisworkbook.protect("password",true,true)
thisworkbook.unprotect("password")
Ça ne fonctionne pas. Aucune suggestion?
Je suis d'accord avec @Richard Morgan ... ce que vous faites devrait fonctionner, donc plus d'informations peuvent être nécessaires.
Microsoft a des suggestions sur les options pour protéger vos feuilles de calcul Excel 2003 .
Voici un peu plus d'infos ...
À partir des fichiers d’aide (méthode Protect):
expression.Protect(Password, Structure, Windows)
expression Obligatoire. Une expression qui retourne un objet Workbook.
Variable optionnelle du mot de passe. Chaîne spécifiant un mot de passe sensible à la casse pour la feuille de calcul ou le classeur. Si cet argument est omis, vous pouvez déprotéger la feuille de calcul ou le classeur sans utiliser de mot de passe. Sinon, vous devez spécifier le mot de passe pour déprotéger la feuille de calcul ou le classeur. Si vous oubliez le mot de passe, vous ne pouvez pas déprotéger la feuille de calcul ou le classeur. C'est une bonne idée de conserver une liste de vos mots de passe et des noms de documents correspondants dans un endroit sûr.
Variante optionnelle de structure. True pour protéger la structure du classeur (la position relative des feuilles). La valeur par défaut est False.
Variante facultative de Windows. True pour protéger les fenêtres du classeur. Si cet argument est omis, les fenêtres ne sont pas protégées.
ActiveWorkbook.Protect Password:="password", Structure:=True, Windows:=True
Si vous voulez travailler au niveau de la feuille de calcul, j'ai utilisé quelque chose de similaire il y a des années lorsque j'avais besoin de protéger/déprotéger:
Sub ProtectSheet()
ActiveSheet.Protect "password", True, True
End Sub
Sub UnProtectSheet()
ActiveSheet.Unprotect "password"
End Sub
Sub protectAll()
Dim myCount
Dim i
myCount = Application.Sheets.Count
Sheets(1).Select
For i = 1 To myCount
ActiveSheet.Protect "password", true, true
If i = myCount Then
End
End If
ActiveSheet.Next.Select
Next i
End Sub
Pour verrouiller tout le classeur depuis son ouverture, l'option Thisworkbook.password
peut être utilisée dans VBA.
Si vous souhaitez protéger les feuilles de calcul, vous devez d'abord verrouiller les cellules avec l'option Thisworkbook.sheets.cells.locked = True
, puis utiliser l'option Thisworkbook.sheets.protect password:="pwd"
.
Recherchez principalement ces mots clés: Thisworkbook.password
ou Thisworkbook.Sheets.Cells.Locked
dans votre exemple de code, vous devez supprimer les crochets, car il ne s'agit pas d'une tâche fonctionnelle; aussi pour des raisons documentaires, je vous suggère d'utiliser la notation :=
(voir exemple de code ci-dessous)
Application.Thisworkbook
fait référence au livre contenant le code VBA, pas nécessairement le livre contenant les données, alors soyez prudent.Exprimez la feuille sur laquelle vous travaillez en tant qu'objet de feuille et transmettez-la avec une variable logique au sous-objet suivant:
Sub SetProtectionMode(MySheet As Worksheet, ProtectionMode As Boolean)
If ProtectionMode Then
MySheet.Protect DrawingObjects:=True, Contents:=True, _
AllowSorting:=True, AllowFiltering:=True
Else
MySheet.Unprotect
End If
End Sub
Dans la méthode .Protect
, vous pouvez définir ce que vous souhaitez autoriser/interdire. Ce bloc de code activera/désactivera la protection - sans mot de passe dans cet exemple, vous pouvez l'ajouter en tant que paramètre ou codé en dur dans le Sub. Quoi qu'il en soit, quelque part, le PW sera codé en dur. Si vous ne le souhaitez pas, appelez simplement la fenêtre Protection Dialog et laissez l’utilisateur décider quoi faire:
Application.Dialogs(xlDialogProtectDocument).Show
J'espère que cela pourra aider
Bonne chance - MikeD