Congelar fórmulas, borrar datos, copiar fórmula en celda "X", dependiendo de valor

Estoy realizando un trabajo y he visto que realizo el mismo proceso varias con la misma fórmula, y pues no se si esto se puede realizar con macros.

En la hoja Datos tengo varias variables principales que se cambia para realizar diversos procesos, en esta hoja tengo la información del mes y año (para este ejemplo coloque el mes de Marzo), cada vez que esto se cambia esto debe ejecutar una macro que me congele la fórmula de la hoja Liquidación(celda I4:L5), borre toda información que se tenga de la celda(I7:L15) y copie la fórmula que está en la cela(I17:K17) a la celda que corresponde el mes, en este caso es el mes de Marzo(03).

De esta forma se debe ejecutar dependiendo del mes que se selecciona en la hoja Datos.

Espero haber explicado correctamente lo que busco, a la vez adjunto una imagen.

1 respuesta

Respuesta
1

No estoy seguro de haberte entendido.
Prueba esto:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B3")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Set a = Range("H4:H15").Find(Target.Value, LookAt:=xlWhole)
b = a.Row
If Not a Is Nothing Then
Range("I4:L" & b - 1) = Range("I4:L" & b - 1).Value
Range("I17:K17").Select
Selection.Copy
Range("I" & b).Select
ActiveSheet.Paste
Range("I" & b + 1 & ":L15").Value = ""
End If
End If
End Sub

Hola Daniel:

Mes sale el siguiente error, a la vez indicar que cada cuadro corresponde a hojas diferentes soo lo incluí en una sola para que se pueda visualizar.

Voy a explicar un poco más lo que deseo, en la hoja Datos selecciono el mes que quiero trabajar, a ello cada vez que hago esto en la hoja Liquidación me va a quitar toda la fórmula que tiene desde la fila menos -1 del mes que escojo hasta el mes inicial(un ejemplo si selecciono el mes 4, se quitara toda fórmula que tiene desde el mes 3 hasta la 1) y borra toda información que tiene desde el mes 5 hasta el mes 12, y por ultimo copia la fórmula que esta en la fila 17 desde B17:D17(estas celdas son opcional en este ejemplo dado que puede cambiar en la plantilla original)

Espero con esto haber aclarado mi pregunta.

Saludos.

Bueno para evitar conflictos y disgustos de parte de los demás procura ser más claro al momento de dar los datos y si pones un ejemplo en hojas separadas hazlo así.

En fin lo único que tenias que hacer es especificar la hoja y cambiar los rangos deseados.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B3")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Set c = Sheets("Hoja2")
Set a = c.Range("A4:A15").Find(Target.Value, LookAt:=xlWhole)
b = a.Row
If Not a Is Nothing Then
c.Range("B4:D" & b - 1) = c.Range("B4:D" & b - 1).Value
c.Range("B17:D17").Select
Selection.Copy
c.Range("B" & b).Select
ActiveSheet.Paste
c.Range("B" & b + 1 & ":D15").Value = ""
End If
End If
End Sub

Cambia Hoja2 por el nombre que tiene tu hoja donde quieres hacer tus cambios.

Hola Daniel:

Disculpa de antemano el error al realizar la pregunta.

Me sale el siguiente error al ejecutar la macro, me dice que la variable del objeto o bloque with no establecido.

b = a.Row

me señala de amarillo a este parámetro.

Saludos

Solo inviértelas así:

If Not a Is Nothing Then
b = a.Row

O mejor aun úsala así

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B3")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Set c = Sheets("Hoja2")
Set a = c.Range("A4:A15").Find(Target.Value, LookAt:=xlWhole)
If Not a Is Nothing Then
b = a.Row
Sheets("Hoja2").Select
c.Range("B4:D" & b - 1) = c.Range("B4:D" & b - 1).Value
c.Range("B17:D17").Copy
c.Range("B" & b).Select
ActiveSheet.Paste
c.Range("B" & b + 1 & ":D15").Value = ""
End If
End If
End Sub

Hola Daniel:

Adjunto del ejemplo que deseo ejecutar macro:

https://mega.nz/#!CiwyEC5Y 

Espero me puedas ayudar con la solución.

Saludos.

Falta la clave

Ya está

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B3")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Set c = Sheets("LIQUIDACION")
Set a = c.Range("A4:A15").Find(Target.Value, LookAt:=xlWhole)
If Not a Is Nothing Then
b = a.Row
Sheets("LIQUIDACION").Select
c.Range("B4:D" & b - 1) = c.Range("B4:D" & b - 1).Value
c.Range("B17:D17").Copy
c.Range("B" & b).Select
ActiveSheet.Paste
c.Range("B" & b + 1 & ":D15").Value = ""
End If
End If
End Sub

Solo arregla bien tus formulas, recuerda que al copiar y pegar las coordenadas en diferentes lados también se transportan.

Hola Daniel:

E colocado la fórmula, pero al cambiar de mes de 4 a 3, no ejecuta nada.

Explico a más detalle lo que deseo:

Si seleccionó el mes 1: da formato valores no existe información, elimina información desde la celda B5:D15, copia la fórmulas de la celda B17:D17 a la celda  B4:D4

Si seleccionó el mes 2: da formato valores desde la celda B4:D4, elimina información desde la celda B6:D15, copia la fórmulas de la celda B17:D17 a la celda  B5:D5

Si seleccionó el mes 3: da formato valores desde la celda B4:D4, elimina información desde la celda B6:D15, copia la fórmulas de la celda B17:D17 a la celda  B5:D5

.

.

.

.

.

Si seleccionó el mes 11: da formato valores desde la celda B4:D13, elimina información desde la celda B15:D15, copia la fórmulas de la celda B17:D17 a la celda  B14:D14

Si seleccionó el mes 12: da formato valores desde la celda B4:D14, elimina información no existe, copia la fórmulas de la celda B17:D17 a la celda  B15:D15

Esto es lo que haría cada vez que cambie el mes.

ESpero me puedas ayudar.

Saludos.

Hola Daniel:

A la vez indicar que en esa hoja ya cuento con un Worksheet_SelectionChange en relación a otra celda como puedo hacer para tener dos.

Saludos

Te paso una pequeña corrección por lo del mes 12

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B3")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Set c = Sheets("LIQUIDACION")
Set a = c.Range("A:A").Find(Target.Value, LookAt:=xlWhole)
If Not a Is Nothing Then
b = a.Row
Sheets("LIQUIDACION").Select
c.Range("B4:D" & b - 1) = c.Range("B4:D" & b - 1).Value
c.Range("B17:D17").Copy
c.Range("B" & b).Select
ActiveSheet.Paste
c.Range("B" & b + 1 & ":D16").Value = ""
End If
End If
End Sub

Haber en primera necesitas poner en orden tu validación de datos pues si selecionas 01 la macro busca 01 y no 1, segunda quita las fórmulas de los los meses de tu columna A o seguirás teniendo el mismo problema.

Gracias Daniel quedo bien la macro.

A la vez te agradezco por el tiempo y paciencia en entender lo que deseaba para solucionar mi problema.

Saludos.

Descuida, solo califica la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas