.01.03.17
Buenas tardes, Jordi
Acabo de regresar de mis vacaciones, período en el que cursaste tu consulta.
Si aún te sirviese, aquí te envío el código que desarrollé para que haga lo que solicitaste:
Para que funcione, activa el editor de Visual Basic (presiona Alt+F11) y en el panel de la izquierda busca la hoja donde quieres que esto ocurra. Da doble click sobre ella. (otra forma de llegar a este punto es hacer click derecho sobre la solapa de esta hoja y elegir la opción "Ver Código)
Allí pega el siguiente procedimiento de VBA:
Private Sub Worksheet_Change(ByVal Target As Range)
'---- Variables modificables ----
'=== JORDI, modifica estos datos de acuerdo a tu proyecto:
ColumnaClave = "E" 'Columna donde ingresar el código
LaClave = "ELCODIGO" 'Código que ingresado en la columna clave que dispara la desprotección de las celdas
PassProtec = "CORTES" ' Clave para proteger la hoja
ColsAdesbl = Array("D", "G", "H", "I", "K") ' columnas donde permitir ingreso de datos.
ConMensaje = True 'con True muestra mensaje de celdas habilitadas. Con FALSE no lo muestra
'---- fin Variables
'
'---- inicio de rutina:
'
LaFila = Target.Row
If Target.Column = Range(ColumnaClave & "1").Column Then
If Target.Value = LaClave Then
ElMensaje = ""
ActiveSheet.Unprotect PassProtec
'Cells.Locked = True
Range(ColumnaClave & LaFila).Locked = False
For LaCelda = 0 To UBound(ColsAdesbl)
Range(ColsAdesbl(LaCelda) & LaFila).Locked = False
ElMensaje = ElMensaje & IIf(LaCelda = UBound(ColsAdesbl), " y ", IIf(LaCelda = LBound(ColsAdesbl), "", ", ")) & ColsAdesbl(LaCelda) & LaFila
Next
Range(ColsAdesbl(LBound(ColsAdesbl)) & LaFila).Select
ActiveSheet.Protect PassProtec
ElMensaje = "De acuerdo a lo ingresado en la celda " & ColumnaClave & LaFila & " (" & Range(ColumnaClave & LaFila) & ")" & Chr(10) & "se han habilitado para la carga de datos las celdas: " & Chr(10) & ElMensaje
TipoMens = vbInformation
ElTitulo = "CELDAS HABILITADAS"
If ConMensaje Then MsgBox ElMensaje, TipoMens, ElTitulo
End If
ElseIf Target.Column = Range(ColsAdesbl(UBound(ColsAdesbl)) & LaFila).Column Then
If Len(Target) > 0 Then
ActiveSheet.Unprotect PassProtec
For LaCelda = 0 To UBound(ColsAdesbl)
Range(ColsAdesbl(LaCelda) & LaFila).Locked = True
ElMensaje = ElMensaje & IIf(LaCelda = UBound(ColsAdesbl), " y ", IIf(LaCelda = LBound(ColsAdesbl), "", ", ")) & ColsAdesbl(LaCelda) & LaFila
Next
Range(ColumnaClave & LaFila).Select
ActiveSheet.Protect PassProtec
ElMensaje = "Completada la carga " & ",han sido bloquedas las celdas: " & Chr(10) & ElMensaje
TipoMens = vbInformation
ElTitulo = "CELDAS BLOQUEADAS"
If ConMensaje Then MsgBox ElMensaje, TipoMens, ElTitulo
End If
End If
End Sub
Como suelo hacer, al inicio del código te dejo como variables aquellos datos que podrías necesitar modificar, por ejemplo las claves para que haga los que pedías.
.