Copiar celdas, condición en celda superior

Buenas expertos del VB, después de horas en busca de una duda y
no encontrar nada que me funcione he optado por abrir una nueva pregunta.
Bien planteo mi problema lo mejor que pueda para que la se entienda.
Tengo un documento de Excel, que entre otras tiene las hojas data y form.
Hasta
hoy funcionaba seleccionando manualmente un rango en la hoja data, me
pasaba a la hoja form y pulsaba un botón para ejecutar una macro que
lanzaba la hoja form a impresora y al mismo tiempo la guarda en pdf en
una carpeta prefijada en código.
Mi intención es olvidarme de ir copiando los rangos uno a uno para ello necesito:
Comenzar recorriendo la hoja data en la columna “a” siguiendo este patrón
Sitúo
la calda activa en a2 y copio el rango a2:c2, ese rango lo pego en la
fila 6 de la hoja form, volver a la hoja data y comprobar si la
siguiente fila se copiara o no, para ello tengo que ver si la celda a3
es igual a la que esta justo encima (a2 en este caso) si es igual, copio
el rango que le pertenece es decir “a3:c3” este rango ahora lo pegare
en la siguiente fila de la hoja form
Vuelvo a comprobar la siguiente
fila de la hoja data, si la celda a4 es igual a su anterior, si lo es
se repite el proceso que indico anteriormente, si esta ya no es igual
lanzo el resto de mi código que imprime la hoja form, la guarda en pdf y
vacía la hoja preparándola para seguir rellenando, esta vez comenzando
copiando los valores de el rango a4:c4 (que es la siguiente fila
distinta)…. Y asi hasta terminar la hoja data.
Otro problema es
que al pegar los datos de la hoja data en la hoja form, no sirve con que
busque la ultima fila vacía, ya que esta hoja tiene datos en la
cabecera y en el pie, es decir, los datos serán pegados desde la fila 6
hasta la 20, por que si le digo que me pegue en la siguiente fila vacía
me los pega debajo de el pie de pagina (que realmente no es un pie de
pagina, si no que son celdas con datos y formulas….
Llevo una semana
luchando con ello, pero por mas que lo intento no sale nada, espero que
alguien me pueda echar una manito para proseguir, ya que me he quedado
totalmente atascado.
Gracias

1 Respuesta

Respuesta
1

Con gusto te actualizo tu macro, por favor, envíame el archivo con tu macro a [email protected]

En el asunto del correo escribe tu nombre de usuario y el título de esta pregunta, cuando me hayas enviado, avísame en esta pregunta que ya lo enviaste.

Saludos. Dam

Como me has indicado, te he enviado el fichero. Un saludo y gracias, espero tu respuesta impaciente

Te anexo la macro, para que copies las celdas a la hoja vale

Sub copiaceldas()
'copia celdas ab yc
'Por.Dam
Set Ldata = Workbooks("Formato vale2-beta dam")
Set HLdata = Ldata.Worksheets("data")
Set HLvale = Ldata.Worksheets("vale")
HLvale.Range("A6:C20").ClearContents
HLdata.Select
ufila = Range("A" & Rows.Count).End(xlUp).Row
fila = 6
una = 1
For i = 2 To ufila
    If una = 1 Then
        conj = Cells(i, 1)
        una = 2
    End If
    If conj = Cells(i, 1) Then
        HLdata.Range("A" & i & ":C" & i).Copy Destination:= _
        HLvale.Range("A" & fila)
        fila = fila + 1
    Else
        HLvale.Select
        MsgBox "Hoja vale lista para imprimir"
        HLvale.Range("A6:C20").ClearContents
        fila = 6
        HLdata.Range("A" & i & ":C" & i).Copy Destination:= _
        HLvale.Range("A" & fila)
        fila = fila + 1
    End If
    HLdata.Select
    conj = Cells(i, 1)
Next
        HLvale.Select
        MsgBox "Hoja vale lista para imprimir"
End Sub

Solamente remplaza los msgbox por una llamada a tu macro que imprime, pero supongo que antes tienes que llenar algunos datos en la cabecera del vale.

También te regresé tu archivo con la marco, para que veas como funciona.

Realiza tus pruebas.

Saludos. Dam

Podrías

Buenas, en primer lugar te agradezco tu ayuda, pero existe un problema, se para en la primera linea, "Set Ldata = Workbooks("Formato vale2-beta dam")" diciendo "subíndice fuera de intervalo" algo que no te aclare y lo debería de haber dicho, es que utilizo excel 2010... quizá tenga algo que ver.

un saludo

Perdón se me olvidó comentarte.

El nombre de tu archivo se debe llamar así:

Formato vale2-beta dam

O bien cambia en el nombre en la macro por el nombre de tu archivo.

Saludos. Dam

Podrías

puedo cerrar la pregunta.... pero no funciona, he abierto tal cual tu me lo has enviado Y no funciono, revise lo que tu me dices y esta todo ok, pero no va... yo si quieres cierro ya la pregunta, pero supongo que antes debería de ser aclarado el tema, ojo lo digo por decir, por que no se como se hace por sistema aquí en espa web, pero me supongo que sera asi... un saludo y gracias por tu ayuda...

Desde luego, tienes que cerrar la pregunta hasta que funcione.

Esta línea que tienes en la macro, debes cambiarla por el nombre que tienes de archivo

Set Ldata = Workbooks("Formato vale2-beta dam")

Por ejemplo: si tu archiov se llama: vales de material

La línea debe quedar así:

Set Ldata = Workbooks("vales de material")

Si continúa el problema, envíame tu archivo a [email protected] y lo reviso.

En el asunto escribe tu clave de usuario y el título de esta pregunta.

Escríbeme por aquí mismo cuando me hayas enviado el archivo.

Saludos. Dam

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas