web-dev-qa-db-fra.com

Comment verrouiller les données d'une cellule dans Excel à l'aide de vba

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?

15
raam

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)
27
Lance Roberts

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.

3
Ben McCormack

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"
2
Milan Sheth
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
0
krusaint

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
0
Fink