Besoin d'aide pour verrouiller une gamme sélectionnée de cellules en utilisant VBA

J'ai besoin d'aide pour verrouiller une gamme spécifique de cellules en fonction de la sélection de la valeur de la list à partir d'une autre cellule.

Pour être spécifique, j'ai créé une list de validation des données pour les colonnes N5 à N36, lors de la sélection de la valeur "Exist" de la cellule N5, je souhaite verrouiller cette ligne spécifique O5 à U5.

c'est-à-dire "Exist" dans N6 verrouillera O6 à U6 et ainsi de suite.

De même pour les autres rangées jusqu'à N36.

Et si l'user sélectionne "Ne existe pas", alors je voudrais que ces cellules restnt déverrouillées et modifiables comme l'état ci-dessus.

J'ai essayé des macros de différents forums en utilisant ma connaissance de base de l'utilisation de macros, mais la plupart de celles-ci verrouillent la feuille entière.

Code J'ai essayé:

Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("N5:N36")) Is Nothing Then ActiveSheet.Unprotect If Target.Value = "Exist" Then Range("O" & Target.Column & ":U" & Target.Column).Select Selection.Locked = False Else Range("O" & Target.Column & ":U" & Target.Column).Select Selection.Locked = True End If End If ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub 

J'apprécierais votre aide rapide.

Merci d'avance.

Est-ce ce que vous essayez ( essayé et testé )? Voir aussi CE . Il vaut la peine d'être lu.

 Private Sub Worksheet_Change(ByVal Target As Range) Dim rw As Long Dim sPass As Ssortingng '~~> Password sPass = "BlahBLah" On Error GoTo Whoa '~~> For excel 2003 use .Count instead of .CountLarge '~~> In case of multiple cells were changed If Target.Cells.CountLarge > 1 Then Exit Sub Application.EnableEvents = False If Not Intersect(Target, Range("N5:N36")) Is Nothing Then If UCase(Trim(Target.Value)) = "EXIST" Then rw = Target.Row With ActiveSheet .Unprotect sPass .Cells.Locked = False .Range("O" & rw & ":U" & rw).Locked = True .Protect Password:= sPass , DrawingObjects:=True, _ Contents:=True, Scenarios:=True End With End If End If Letscontinue: Application.EnableEvents = True Exit Sub Whoa: MsgBox Err.Description Resume Letscontinue End Sub 

vous pourriez faire quelque chose comme ceci:

 Sub LockCells() 'unprotect the sheet ActiveSheet.Unprotect 'unlock all cells Cells.Locked = False Cells.FormulaHidden = False Dim cell As Range 'find all cells that need to be locked For Each cell In Range("N5:N36") If cell = "Exist" Then Range("O" & cell.Row & ":U" & cell.Row).Locked = True Range("O" & cell.Row & ":U" & cell.Row).FormulaHidden = True End If Next cell 'protect the sheet ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub