Y eso es exactamente lo que hace la macro.
Quizás no sepas cómo trabaja Excel el bloqueo. De modo predeterminado todas las celdas van bloqueadas, que se hace efectivo cuando proteges la hoja.
Por lo tanto si aún no estás trabajando con hoja protegida quizás no te diste cuenta que todas tus celdas ya están bloqueadas.
Lo primero que debes hacer entonces (con hoja desprotegida) es seleccionar el rango donde quieras permitir el ingreso de datos. Supongamos que sea col A:J y la col M para ingresar el criterio, a partir de fila 3. Con esta selección vas al menú Formato de Celdas y desde la pestaña Protección le quitas el tilde a la opción de bloqueo.
Ahora debes proteger la hoja.
Y ahora ya podrás trabajar en ese rango hasta que en col M ingreses un SI.
NOTA: Como no comentas nada acerca de cuál será tu col donde coloques el SI te comenté que debes ajustar estas referencias. Donde digo M, J o fila 3 debes ajustar a tu caso o aclararlo.
PD) La instrucción de bloqueo respeta la fila de la celda donde colocaste SI
Range("A" & Target.Row & ":J" & Target.Row).Locked = True
No mencionaste nada acerca del NO ... pero si necesitas que se desbloquee, entonces tu macro quedaría así (PARA LAS REFERENCIAS DE MI EJEMPLO):
Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
'solo controla contenido en col M a partir de fila 3 (AJUSTAR)
If Target.Column <> 13 Or Target.Row < 3 Then Exit Sub
'solo se ejecuta si el valor ingresado es "SI"
If UCase(Target.Value) = "SI" Then
'bloquea un rango de la fila activa -- AJUSTAR RANGO
ActiveSheet.Unprotect 'COLOCAR CLAVE
Range("A" & Target.Row & ":J" & Target.Row).Locked = True
ActiveSheet.Protect
ElseIf UCase(Target.Value) = "NO" Then
ActiveSheet.Unprotect 'COLOCAR CLAVE
Range("A" & Target.Row & ":J" & Target.Row).Locked = False
ActiveSheet.Protect
End If
End Sub
Sirve para cualquier modo en que ingreses el texto (si, SI, sI, Si)
Sdos y si el tema quedó resuelto no olvides valorar la respuesta.
Elsa