Te anexo el código para desproteger la hoja, bloquear las celdas modificadas y volver proteger la hoja para que no se pueden modificar los datos.
Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
clave = "abc"
'
If Not Intersect(Target, Range("A:E, G:G")) Is Nothing Then
ActiveSheet.Unprotect clave
Application.ScreenUpdating = False
Application.EnableEvents = False
'
For Each c In Target
Range("H2:I2").Copy Cells(c.Row, "H")
Next
'
u = Range("A" & Rows.Count).End(xlUp).Row
With ActiveWorkbook.Worksheets("Hoja1").Sort
.SortFields.Clear
.SortFields.Add Key:=Range("B2:B" & u), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("D2:D" & u), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("E2:E" & u), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("A1:I" & u)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'
an1 = Cells(2, "B")
an2 = Cells(2, "D")
an3 = Cells(2, "E")
con = 0
For i = 2 To u
If an1 = Cells(i, "B") And _
an2 = Cells(i, "D") And _
an3 = Cells(i, "E") Then
con = con + 1
Else
con = 1
End If
Cells(i, "F") = con
an1 = Cells(i, "B")
an2 = Cells(i, "D")
an3 = Cells(i, "E")
Next
'
With ActiveWorkbook.Worksheets("Hoja1").Sort
.SortFields.Clear
.SortFields.Add Key:=Range("A2:A" & u), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("A1:I" & u)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'
If Not Intersect(Target, Range("G:G")) Is Nothing Then
Range("A" & Target.Row & ":I" & Target.Row).Locked = True
End If
'
ActiveSheet.Protect clave, 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
'
Application.EnableEvents = True
End If
End Sub
También te envié el archivo para que lo pruebes, solamente cuando cambias el dato de la columna G se protegen las celdas de las columnas A a la I.
yo necesito ayuda en una macro que al momento de guardar con un boton me habilite algunas celdas para guardar y cuando guarde me limpie las celdas , bueno el me esta guardando el problemas es que no me esta limpiando las celdas por que la hoja esta protegida de solo lectura - Manuel Laurencio
Cual es el código que tienes? Porque en tu caso deberías:1. Desproteger2. Borrar3. Volver a protegerSalu2PD: en caso que no te funcione haz una nueva pregunta porque en los comentarios solo se puede escribir "texto plano" sin ningun tipo de formatos, fórmulas, ni nada - Anónimo
Comentario borrado por el autor - Apoorva Goaswami