Desbloquear celdas especificas en excel

Tengo un documento en el cual mediante la inserción de un código numérico en una celda específica que este entre E5:E42 se rellenan automáticamente las celdas D5:D42, está separado por filas. También cuando insertas un código que este entre C5:C42 se rellenan automáticamente F5:F42, G5:G42, H5:H42, I5:I42 y K5:K42, también está separado por filas.

El documento Excel funciona entre A1 y M42. Tiene protegidas las celdas D5:D42, F5:F42, G5:G42, H5:H42, I5:I42 y K5:K42 estas celdas tienen la siguiente formula, que va variando según la celda que selecciones:

 =SI.ERROR(BUSCARV(E5;datos!A1:B78;2;FALSO);"").

La pregunta es la siguiente:

Necesito que mediante la inserción de un código especifico en la celda E5, me desproteja las celdas D5, G5, H5, I5 y K5 para poder escribir un texto sobre ellas y que cuando acabe de escribir en ellas, estas vuelvan a quedar bloqueadas, lo tendré que hacer para cada fila individualmente para que no se desproteja todo el documento a la vez.

El documento se genera cada día de nuevo para no perder las formulas.

Respuesta
1

.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.

.

La pregunta no admite más respuestas

Más respuestas relacionadas