Je veux empêcher les autres de modifier le contenu des cellules de ma feuille Excel à l'aide de VBA. Est-il possible de faire cela?
Vous pouvez d'abord choisir les cellules que vous ne souhaitez pas protéger (pour être modifiables par l'utilisateur) en définissant leur statut verrouillé sur False:
Worksheets("Sheet1").Range("B2:C3").Locked = False
Ensuite, vous pouvez protéger la feuille et toutes les autres cellules seront protégées. Le code pour ce faire et toujours autoriser votre code VBA à modifier les cellules est:
Worksheets("Sheet1").Protect UserInterfaceOnly:=True
ou
Call Worksheets("Sheet1").Protect(UserInterfaceOnly:=True)
Essayez d'utiliser le Worksheet.Protect
méthode, comme ceci:
Sub ProtectActiveSheet()
Dim ws As Worksheet
Set ws = ActiveSheet
ws.Protect DrawingObjects:=True, Contents:=True, _
Scenarios:=True, Password="SamplePassword"
End Sub
Vous devez toutefois vous préoccuper d'inclure le mot de passe dans votre code VBA. Vous n'avez pas nécessairement besoin d'un mot de passe si vous essayez seulement de mettre en place une barrière simple qui empêche un utilisateur de faire de petites erreurs comme la suppression de formules, etc.
De plus, si vous voulez voir comment faire certaines choses dans VBA dans Excel, essayez d'enregistrer une macro et de regarder le code qu'elle génère. C'est un bon moyen de démarrer dans VBA.
Disons par exemple dans un cas, si vous souhaitez verrouiller des cellules de la plage A1 à I50, le code ci-dessous est le suivant:
Worksheets("Enter your sheet name").Range("A1:I50").Locked = True
ActiveSheet.Protect Password:="Enter your Password"
Dans un autre cas, si vous avez déjà une feuille protégée, suivez le code ci-dessous:
ActiveSheet.Unprotect Password:="Enter your Password"
Worksheets("Enter your sheet name").Range("A1:I50").Locked = True
ActiveSheet.Protect Password:="Enter your Password"
Sub LockCells()
Range("A1:A1").Select
Selection.Locked = True
Selection.FormulaHidden = False
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= False, AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
End Sub
Vous pouvez également le faire au niveau de la feuille de calcul capturée dans l'événement de modification de la feuille de calcul. Si cela répond mieux à vos besoins. Permet un verrouillage dynamique basé sur des valeurs, des critères, etc.
Private Sub Worksheet_Change(ByVal Target As Range)
'set your criteria here
If Target.Column = 1 Then
'must disable events if you change the sheet as it will
'continually trigger the change event
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
MsgBox "You cannot do that!"
End If
End Sub