Comment protéger un classeur avec VBA ?
Pour protéger un classeur, vous devez utiliser la méthode PROTECT de VBA. En utilisant cette méthode, vous pouvez utiliser un mot de passe ou même activer la protection du classeur sans mot de passe. Mais il y a une chose que vous devez prendre en compte pour le mot de passe que vous utilisez, c’est SENSIBLE À LA CASSE.
Workbook.Protect "Password"
- Spécifiez le classeur que vous souhaitez protéger.
- Tapez et pointez et sélectionnez la méthode de protection dans la liste ou vous pouvez taper « Protéger ».
- Saisissez le mot de passe que vous souhaitez définir.
- Exécutez le code pour protéger le classeur.
Dans ce didacticiel, nous apprendrons cette méthode de différentes manières et nous apprendrons également à déprotéger un classeur.
Liens utiles : Exécuter une macro – Enregistreur de macros – Visual Basic Editor – Manuel de macros personnelles
Protéger un classeur avec un mot de passe
Vous trouverez ci-dessous le code que vous devez utiliser pour protéger un classeur avec un mot de passe. Dans ce code, vous avez d’abord le nom du classeur et la méthode de protection avec le mot de passe.
Workbooks("Book1").Protect "test123"
Et quand j’exécute ce code, il verrouille le classeur « Book1 ».
Protéger un classeur sans mot de passe
Et si vous souhaitez protéger un classeur sans mot de passe, vous devez ignorer l’argument « Mot de passe », tout comme le code suivant.
Workbooks("Book1").Protect
Si vous essayez de protéger un classeur sans mot de passe qui est déjà protégé par un mot de passe, Excel affichera une boîte de dialogue pour entrer ce mot de passe.
Déprotéger un classeur avec un mot de passe
De la même manière, vous pouvez utiliser la méthode de déprotection pour déprotéger le classeur et le code correspondant ressemblerait à quelque chose ci-dessous.
Workbooks("Book1").Unprotect "test123"
Il y a une chose dont vous devez vous occuper si vous essayez de déprotéger un classeur qui est w
Déprotéger un classeur sans mot de passe
Et si un classeur est protégé sans mot de passe, vous pouvez utiliser la même méthode sans spécifier l’argument du mot de passe.
Protéger tous les classeurs ouverts
Dans le code ci-dessous, nous avons une boucle FOR EACH pour parcourir tous les classeurs ouverts et protéger chaque classeur un par un en utilisant la même méthode de protection.
'variable to use as a workbook
Dim wb As Workbook
'loop through all the open workbooks
For Each wb In Application.Workbooks
'condition to check workbook name
If wb.Name <> "PERSONAL.XLSB" Then
'protect every workbook with a password
wb.Protect "test123"
End If
Next wb
End Sub
Comme j’utilise le classeur de macros personnelles, j’ai utilisé une instruction IF THEN ELSE pour ignorer si le nom du classeur est » personal.xlsb « . Assurez-vous également de vous en occuper.
Protéger un classeur fermé
Vous pouvez également protéger et déprotéger un classeur fermé et enregistré à un emplacement. Regardez le code suivant où j’ai utilisé l’emplacement de mon bureau pour utiliser le fichier « test.xlsx ».
Sub vba_protect_workbook()
'declare varibale to use for the workbook
Dim wb As Workbook
'open the workbook that you want to protect
Set wb = Workbooks.Open("C:UsersDellDesktoptest.xlsx")
'turn off the screen-updating to _
done everything in the backend
Application.ScreenUpdating = False
'protect the workbook
wb.Protect
'close the workbook after protecting
wb.Close SaveChanges = True 'turn off the screen-updating
Application.ScreenUpdating = True
End Sub
Le code ci-dessus a utilisé Workbook.Ouvrez la méthode pour ouvrir le classeur que vous souhaitez protéger, puis désactivez la mise à jour de l’écran pour qu’elle fonctionne dans le backend.
Protéger tous les classeurs fermés d’un dossier
Le code suivant parcourt tous les classeurs qui se trouvent dans le dossier que vous avez spécifié comme chemin. Et puis ouvrez chaque classeur, protégez-le et fermez-le un par un.
Sub vba_protect_all_the_workbooks()
'declare variables
Dim wb As Workbook
Dim myPath As String
Dim myFile As String
Dim myExtension As String
Dim FldrPicker As FileDialog
'optimize macro
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
'specify the folder where workbooks are saved
myPath = "C:UsersDellDesktopfolder"
'jump to reset setting if there's an error
On Error GoTo ResetSettings
'target file fxtension (must include wildcard "*")
myExtension = "*.xls*"
'target path
myFile = Dir(myPath & myExtension)
'Loop through each Excel file in folder
Do While myFile <> ""
'Set variable equal to opened workbook
Set wb = Workbooks.Open(Filename:=myPath & myFile)
'protect workbook
wb.Protect
'Save and Close Workbook
wb.Close SaveChanges:=True
'Get next file name
myFile = Dir
Loop
'Message Box when task is completed
MsgBox "Done!"
'reset setting that were change for optimization
ResetSettings:
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub