Como realizar una macro para pegar datos en otra h

Hola, ojala me puedan ayudar con lo siguiente: tengo un libro con tres hojas: "cheques", "vencimientos", "caja". En la hoja "vencimientos" tengo los cheques ordenados por fecha de vencimiento desde la fila 2 a la 60, lo que quiero hacer es que cuando en la celda k2 escriba "cobrado", la macro pase el contenido de las celdas e2 y h2 a la hoja "caja" en la columna b y c respectivamente, pero como también en la hoja caja se ingresan datos manualmente (gastos, retiros efectivo, etc) debería buscar la primer fila vacía. Después deberían acreditarse las fila 3, 4, 5 hasta la 60 de la hoja vencimientos. Siempre que en la columna que de la respectiva fila este la condición de "cobrado"
Desde ya gracias por tu valioso tiempo. Gustavo

1 respuesta

1
Respuesta de
Hola:
Te respondo la primera parte de tu consulta, la 2da no la entendí.
Entrá al Editor (presionando juntas Alt y F11), seleccioná con doble clic el objeto HOJA (vencimientos) del panel a tu izquierda y copiá la siguiente rutina:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$K$2" And Target.Value = "cobrado" Then
libre = Sheets("caja").Range("B65536").End(xlUp).Row + 1
'pasar datos de las celdas e y h a hoja caja, col B y C
Target.Offset(0, -6).Copy Destination:=Sheets("caja").Cells(libre, 2)
Target.Offset(0, -3).Copy Destination:=Sheets("caja").Cells(libre, 3)
End If
End Sub
Espero que con esto ya puedas terminarla, sino enviame más aclaraciones para la 2da parte.
Sdos
Elsa
http://aplicaexcel.galeon.com/macros.htm
Elsamatilde, antes que nada gracias por tu tiempo, la macro funciona perfecto. Lo que no se entendió de mi consulta es que la hoja vencimientos tiene 60 filas. Entonces por ejemplo se acredita el cheque que está en la fila 15, pongo "cobrado" en "k15" y debería pasar el contenido de las celdas "e15" y "h15" a la hoja caja en las columnas b y c. Entonces, puntualmente ¿qué debería modificar en esta macro para no tener que escribir 60 macros?. Es posible esto.
Atentamente, Gustavo
En ese caso reemplazá la línea que evalúa si estás en K2, por alguna de estas:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 11 And Target.Value = "cobrado" Then  'actúa sobre la col K

'sigue a partir de libre = ......
También es posible asignar un rango de ejecución:
Private Sub Worksheet_Change(ByVal Target As Range)
rgo = "K2:K62"
If Intersect(Target, Range(rgo)) Is Nothing Then Exit Sub
'es decir que si no está en el rango finaliza la rutina
if target.value = "cobrado" then
'siguen tus instrucciones a partir de libre = .....
Sdos
Elsa
http://aplicaexcel.galeon.com/manuales.htm
Elsa soy un pesado, jaja. Ahora la macro funciona para toda la hoja vencimientos como yo quería pero en las columnas e y h tengo funciones y cuando la macro se ejecuta me copia la función en la hoja caja y lo que yo quiero es que copie es el resultado de esa función.
Nuevamente gracias por tu tiempo y perdón por la ignorancia.
Gustavo
Si, es importante aclarar bien las características del copiado, no es lo mismo pegar que hacer pegado especial.
En ese caso separá la línea de cada COPY DESTINATION:=...
Por estas otras 2:
Target. Offset(0, -6).Copy
Sheets("caja").Cells(libre, 2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Lo mismo para la otra celda
Sdos
Elsa
PD) Importante promoción en manuales durante este mes:
http://aplicaexcel.galeon.com/manuales.htm
Elsa Matilde excelente lo tuyo, gracias por tu aporte rápido y desinteresado. Estuve semanas combinando funciones para poder hacer lo que quería y no lo logré. Si hubiera hecho correctamente la consulta la primera vez en medio día me lo solucionabas.
Nuevamente muchas gracias.
Atentamente, Gustavo
Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje
¿No es la respuesta que estabas buscando? Puedes explorar otras preguntas del tema Microsoft Excel o hacer tu propia pregunta: