Macro de copia secuencial de una hoja a otra ?

Como ejemplo en hoja2 copio datos en amarillo B12:E13, B15:E16, B28:E39 y B41:E52

A hoja1 B12:E13.

Los botones con macro creada con la grabadora que es lo único se hacer.

Pues bien lo que necesito es un solo botón que cada vez que lo ejecute copie y pegue en orden uno a uno, o sea ejecuto macro copia hoja2 B12:E13 y pega datos en hoja1 B12:E13, ejecuto de nuevo la macro copia hoja2 B15:E16 y pega datos en hoja1 B12:E13 y así sucesivamente hasta la última copia pego.

Al finalizar la última copia pego que la macro se inicie desde 0 o sea al principio.

Espero haberme explicado bien.

Adjunto libro.

https://www.dropbox.com/s/fyc4bsxrb4m1llq/COPIAR.xlsm?dl=0

Salud2…

2 Respuestas

Respuesta
1

No es esto lo que pido, la macro que mandas tal cual esta la ejecuto y copia el cuarto grupo de la hoja2.

Y lo que pido es que cada vez que la active la macro copie por orden los grupos de hoja2, tal cual esta en la macro segun lo poco que entiendo

 For i = 1 To 4

¿Es difícil lo que pido?

Respuesta
1

Te anexo la macro para copiar los 4 rangos

Sub Copiar_Todo()
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    fila = 2
    For i = 1 To 4
        h2.Range("B" & fila & ":E" & fila + 11).Copy h1.Range("B2")
        fila = fila + 13
    Next
End Sub

.

.

Entonces no estoy entendiendo lo que solicitas.

Si quieres los 4 grupos, entonces bastaría copiar toda la hoja.

Lo que dice tu explicación y lo que contienen tus macros son diferentes.

Podrías explicar nuevamente qué necesitas paso a paso y con gusto te colaboro.

Los 4 grupos el rango y los 4 botones, es el ejemplo para explicarme.

Lo intento de nuevo.

Los cuatro bones cada uno copia un grupo de la hoja2 a la hoja 1 en orden según numero de botón de macro, ¿creo qué esto esta claro?

Pues lo que necesito simplemente es un único botón, que le ejecuto una vez pues copia pego el grupo 1 de hoja2 ahoja1, le ejecuto segunda vez pues copia pego el grupo 2 de hoja2 ahoja1, le ejecuto tercera vez pues copia pego el grupo 3 de hoja2 ahoja1, le ejecuto cuarta vez pues copia pego el grupo 4 de hoja2 ahoja1 y cuando ya no hay más grupos empezaría por el primer grupo, ¿creo qué esto también esta claro?

Los 4 grupos y rango son ejemplos en la realidad son mucho más grupos y diferente rango.

Un Saludo.

Sigo sin entender.

Me queda claro copias y pegas. Pero no estás explicando exactamente qué rango copiar y en dónde pegar.

En tu explicación pusiste esto:

B12:E13

Y tu macro dice esto:

Range("B2:E13").Select
    Selection. Copy

No sé si lo aprecies, pero uno dice B12 y el otro dice B2.


Tus 4 macros pegan en en la hoja1 en la celda B2

Sub COPIAR1()
    Range("B2:E13").Select
    Selection.Copy
    Sheets("Hoja1").Select
    Range("B2").Select
    ActiveSheet.Paste
    Sheets("Hoja2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
End Sub
Sub COPIAR2()
    Range("B15:E26").Select
    Selection.Copy
    Sheets("Hoja1").Select
    Range("B2").Select
    ActiveSheet.Paste
    Sheets("Hoja2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
End Sub
Sub COPIAR3()
    Range("B28:E39").Select
    Selection.Copy
    Sheets("Hoja1").Select
    Range("B2").Select
    ActiveSheet.Paste
    Sheets("Hoja2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
End Sub
Sub COPIAR4()
    Range("B41:E52").Select
    Selection.Copy
    Sheets("Hoja1").Select
    Range("B2").Select
    ActiveSheet.Paste
    Sheets("Hoja2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("J1").Select
End Sub

Entonces copias, pero no está claro cuál rango a copiar, cuál es el patrón para identificar que es un grupo, y lo que está menos claro es, en dónde se pega. En tus macros dice que se pega en la celda B2, obviamente si pegas el grupo1 en B2 y luego el grupo2 lo pegas nuevamente en la celda B2, pues el segundo grupo va a sobreescribir sobre el grupo1.

Me preguntas:

pero no está claro cuál rango a copiar ¿?

Hombre amigo el rango que copia en la macro esta claro de hoja 1

Range("B2:E13")

Range("B15:E26")

Range("B28:E39")

Range("B41:E52")

 2º

 cuál es el patrón para identificar que es un grupo, y lo que está menos claro es, en dónde se pega Si miras un poco nada mas, los grupos de hoja 2 son todos iguales 4 de celdas en fila y 12 de celdas en columna con la separación de una fila de un grupo de otro y en hoja 1 donde se pega es idéntico. 

De paso si miras cada grupo es totalmente diferente en el contenido de sus valores.

 Ademas vale mas una imagen que mil palabras, soloo….. tienes que ejecutar los botones de las macros 1,2,3 y 4 y veras que cada macro o botón copia y pega en grupo por orden en hoja 1.

 Solo es ejecutar las macros una a una y mirar que copia y pega, se ve super claro, son simples macros con grabadora que es lo único que medio se hacer.

Estos cuatro botones o macros lo mismo que hace es sustituirlas por un solo botón.

Cada vez que se ejecute el único botón copia y pega un grupo por orden.

 Saludos.   

Eso hace la primera macro que te envié copia el grupo1 y pega en B2, copia grupo2 y pega en B2, copia grupo3 y pega en B2, copia grupo4 y pega en B2.

Si ejecutas la macro, obviamente solamente verás el último grupo pegado, el grupo4.

Tal parece que me estás regañando y sólo intento ayudar, si me dices en dónde quieres pegar cada grupo, con gusto actualizo la macro.

Si tus 4 macros están bien, entonces otra opción es

Sub todo()

call macro1

call macro2

call macro3

call macro4

end sub


Listo, ya tienes en un solo botón la ejecución de las 4.

Tengo el libro delante con tu macro y la ejecuto

Sub Copiar_Todo()
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    fila = 2
    For i = 1 To 4
        h2.Range("B" & fila & ":E" & fila + 11).Copy h1.Range("B2")
        fila = fila + 13
    Next
End Sub

Y tantas veces le del al bnoton, solo graba el grupo cuatro rango B41:E52, como trate de decirte anteriormente así lo indica tu macro, más fácil hazlo tu y veras, es fácil de comprobar los grupos son valores diferentes.

Y lo que me dices de mi macro antes de preguntar ya lo intente

Sub todoMIA()
Call COPIAR1
Call COPIAR2
Call COPIAR3
Call COPIAR4
Call COPIAR5
End Sub

Y esto no me vale, lo que hace es copiar y pegar de tirón todas.

Y repito una vez más que cada vez que ejecute la macro copie pegue un grupo.

Ejecuto macro copia pego grupo1

Ejecuto de nuevo macro copia pego grupo2

Ejecuto de nuevo macro copia pego grupo3

Ejecuto de nuevo macro copia pego grupo4

Ejecuto de nuevo ya no hay más grupos después del 4 pues a copiar pegar el grupo1

Donde pega los grupos pues en Hoja1

A ver si de esta me explico ya jiji…. Quizás es que yo lo veo tan claro lo que explico y otra cosa es que se me entienda.

Un Saludo.

Una cosa es clara.

Copia y pega.

Pero en ningún momento explicas en dónde pegar.

Mi macro copia y pega los 4 rangos, pero los 4 los pega en el mismo rango, por eso solamente ves el último.

Para ti es muy claro. Pero yo sigo sin entender en dónde pegar.

O me estás jugando una broma.

Bueno he re leído el post y ya sé dónde está el lio, aquí:

En tu explicación pusiste esto:

B12:E13

Y tu macro dice esto:

Range("B2:E13").Select

    Selection. Copy

No sé si lo aprecies, pero uno dice B12 y el otro dice B2.

Claro yo me desgañito en explicar los mismo una y otra vez jaja…. dando por hecho que ves desde el primer momento lo que hace mi macro con grabadora pegar en B2:E13 Hoja1

Y releo esto de Nuevo:

Obviamente si pegas el grupo1 en B2 y luego el grupo2 lo pegas nuevamente en la celda B2, pues el segundo grupo va a sobrescribir sobre el grupo1.

Quizás a aquí no respondí claro tu gran duda, Si va a sobrescribir y así es y será porque a mí lo que me importa es que se refleje en hoja 1 siempre el último grupo copiado de hoja 2.

Pufff creo que de esta ya esta quitado el enredo jeje...

Saludos.

Entonces no es necesario copiar todos los grupos, solamente el último

Y cuando pregunto exactamente en dónde lo pego, no me refiero a la hoja, eso me queda claro, lo quieres en la hoja1, ¿pero en cuál celda en la B2?

Si lo anterior es correcto, la siguiente macro copia el último grupo de la hoja2 en la celda B2 de la hoja1, no importa cuántos grupos tengas, no importa cuántas filas tenga el último grupo, siempre va a buscar el último grupo, lo copiará y lo pegará en la celda B2 de la hoja1

E spero que ahora sí me leas.

Sub Copiar_Ultimo_Grupo()
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    u2 = h2.Range("B" & Rows.Count).End(xlUp).Row
    u1 = h2.Range("B" & u2).End(xlUp).Row
    h2.Range("B" & u1 & ":E" & u2 + 1).Copy h1.Range("B2")
End Sub

sal u dos

Puff. No me imaginaba llegar a este punto de que no me explique y no me entiendas.

Bueno la penúltima coge el libro nuevo desde el mismo enlace de antes.

Abre libro.

Veras los botones COPIAR 1,2,3,4 Y 5 en Hoja2.

Ejecutalos en orden, primero el botón COPIAR 1, ¿ya esta hecho? Pues estará su copia en hoja 1.

Ahora ejecutas el botón COPIAR 2, ¿ya esta hecho? Pues estará su copia en hoja 1.

Ahora ejecutas el botón COPIAR 3, ¿ya esta hecho? Pues estará su copia en hoja 1.

Ahora ejecutas el botón COPIAR 4, ¿ya esta hecho? Pues estará su copia en hoja 1.

Ahora ejecutas el botón COPIAR 5, ¿ya esta hecho? Pues estará su copia en hoja 1.

El botón Borrar si quieres es para cada vez que ejecutes una de las macros en orden borrar el contenido de la copia en Hoja1, esto no lo lo quiero en la macro final de borrar nada.

Tu macro es Botón Foro, ¿ejecutala y que hace? Copiar el ultimo grupo.

Bueno pues si ves y miras el punto1º eso es lo que quiero que haga la macro en un solo botón, cada vez que se ejecute la macro copiar un grupo por orden y no el ultimo del grupo.

Ya no se como explicarlo de verdedad.

Un Saludo.

Responde esta pregunta:

¿Lo pego en la hoja1 pero en cuál celda?

por favor simplemente ejecuta mis macros una a una y ves donde se pega, Ves lo que hacen, yo se supone que no tengo ni idea y cuando me dan una macro trato de entenderla.

Ya hice eso.

Y las 4 macros van y pegan en la celda B2

Sheets("Hoja1").Select
    Range("B2").Select
    ActiveSheet. Paste

borrón y cuenta nueva.

Tal vez el archivo que subiste es otro.

Sube otro archivo, olvídate de todas las macros, de las tuyas de las mías.

Dime qué tienes en la hoja2 y qué esperas de resultado en la hoja1

Ultimo intento .

Lo que hace mis macros (olvidate de el botón borrar) son 5 botones en un solo botón.

Cada vez que de a ese único botón copiara una sola vez en orden de 1º a 5º los grupos.

Si ejecuto el único botón solicitado una vez, copiara el grupo uno y lo veré en hoja 1, lo ejecuto por segunda vez copiara el grupo dos y lo veré en hoja 1,etc...

No me preguntes más donde copia y donde pega, por que solo con mirar lo que hacen los botones de uno en uno lo ves.

https://www.dropbox.com/s/gfl580xhwqq0q3i/COPIAR%20PARA%20FORO.xlsm?dl=0 

Un Saludo.

Te anexo la macro. Necesito poner en la celda A1 de la hoja2 el número del siguiente grupo a copiar. Puedes cambiar en la macro "A1" por la celda donde quieras poner el contador.

Sub Macro_Unica()
'Por Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    celda = "A1"
    '
    grupo = Val(h2.Range(celda).Value)
    u = Range("B" & Rows.Count).End(xlUp).Row
    cuantos = WorksheetFunction.CountBlank(Range("B2:B" & u)) + 1
    Select Case grupo
        Case Is > cuantos, "", 1, 0: n = 1
        Case Else: n = grupo
    End Select
    ini = 2
    vez = 1
    For i = 2 To u + 1
        If Cells(i, "B") = "" Then
            If vez = n Then
                fin = i - 1
                Exit For
            Else
                vez = vez + 1
                ini = i + 1
            End If
        End If
    Next
    '
    h2.Range("B" & ini & ":E" & fin).Copy h1.Range("B2")
    If n + 1 > cuantos Then sig = 1 Else sig = n + 1
    h2.Range(celda).Value = sig
End Sub

Cada que presiones el botón, la macro calculará el siguiente grupo a copiar. Cuando llega al último grupo, empezará con el primer grupo.


Sal u dos. Dante Amor. No olvides valorar.

Por fin se consiguió puffff.

Ultima pregunta, para ajustar el copia pego al libro real, lo único que me parece ver claro es el pegar en hoja 1

WorksheetFunction.CountBlank(Range("B2:B" & u)

Pero para cambiar el rango de la copia de hoja 2 no me aclaro, para ajustarlo a C2:I21 o C2:I23 o D5:G19

Saludos...

Te pongo un ejemplo por si el rango estuviera en la columna D a G

Sub Macro_Unica()
'Por Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    celda = "A1"
    '
    grupo = Val(h2.Range(celda).Value)
    u = h2.Range("D" & Rows.Count).End(xlUp).Row
    cuantos = WorksheetFunction.CountBlank(h2.Range("D2:D" & u)) + 1
    Select Case grupo
        Case Is > cuantos, "", 1, 0: n = 1
        Case Else: n = grupo
    End Select
    ini = 2
    vez = 1
    For i = 2 To u + 1
        If Cells(i, "D") = "" Then
            If vez = n Then
                fin = i - 1
                Exit For
            Else
                vez = vez + 1
                ini = i + 1
            End If
        End If
    Next
    '
    h2.Range("D" & ini & ":G" & fin).Copy h1.Range("B2")
    If n + 1 > cuantos Then sig = 1 Else sig = n + 1
    h2.Range(celda).Value = sig
End Sub

Nota: Para que funcione, debe haber un espacio entre grupo y grupo.

Sal u dos. No olvides valorar la respuesta.

Mira pongo la macro así:

Sub Copiar_Pegar()
'Por Dante Amor
    Set h1 = Sheets("Resultados")
    Set h2 = Sheets("Resultados 2")
    celda = "A1"
    '
    grupo = Val(h2.Range(celda).Value)
    u = Range("B" & Rows.Count).End(xlUp).Row
    cuantos = WorksheetFunction.CountBlank(Range("B3:B" & u)) + 1
    Select Case grupo
        Case Is > cuantos, "", 1, 0: n = 1
        Case Else: n = grupo
    End Select
    ini = 2
    vez = 1
    For I = 2 To u + 1
        If Cells(I, "B") = "" Then
            If vez = n Then
                fin = I - 1
                Exit For
            Else
                vez = vez + 1
                ini = I + 1
            End If
        End If
    Next
    '
    h2.Range("B" & ini & ":E" & fin).Copy h1.Range("B3")
    If n + 1 > cuantos Then sig = 1 Else sig = n + 1
    h2.Range(celda).Value = sig
End Sub

Ya que de donde copia Resultados 2 es B3:E17 y pega en Resultados B3:E17, ¿pues en resultados cuando pega empieza en la fila 5? ¿Y claro pega el grupo incompleto?' tengo que ponerle a mano en A1 =3 para que copie y pege correcto el primer grupo?

Saludos

Te anexo la macro para que puedes poner en cuál fila inician tus datos, en cuál columna inician los datos y en cuál columna terminan los datos

Sub Macro_Unica()
'Por Dante Amor
    Set h1 = Sheets("Resultados")
    Set h2 = Sheets("Resultados 2")
    celda = "A1"
    'Aquí tienes que incidar en cuál fila comienzan los datos
    ini = 3
    'Aquí tienes que incidar en cuál columna comienzan los datos
    col = "B"
    'Aquí tienes que incidar en cuál columna TERMINAN los datos
    cof = "E"
    '
    grupo = Val(h2.Range(celda).Value)
    u = h2.Range(col & Rows.Count).End(xlUp).Row
    cuantos = WorksheetFunction.CountBlank(h2.Range(col & ini & ":" & col & u)) + 1
    Select Case grupo
        Case Is > cuantos, "", 1, 0: n = 1
        Case Else: n = grupo
    End Select
    vez = 1
    '
    For i = ini To u + 1
        If h2.Cells(i, col) = "" Then
            If vez = n Then
                fin = i - 1
                Exit For
            Else
                vez = vez + 1
                ini = i + 1
            End If
        End If
    Next
    '
    h2.Range(col & ini & ":" & cof & fin).Copy h1.Range("B3")
    If n + 1 > cuantos Then sig = 1 Else sig = n + 1
    h2.Range(celda).Value = sig
End Sub

No olvides valorar la respuesta.

Antes de ver esta otra macro seguí trasteando con la anterior parece que ya la controlo, si tengo otro problema echare mano de esta.

Pero ahora con la anterior macro se me presenta un problema a la hora de pegar, la segunda columna refleja datos cogidos con fórmula, ¿por con ejemplo columna C es =L5 que refleja en la celda Pepe y a la hora de pegar en hoja1 pega 0?

Ten en cuenta que la estoy acoplando a diferentes hojas con diferentes plantillas.

Un Saludo.

La macro funciona para lo primero que pediste.

Por fin se consiguió puffff.

Cambia esta línea:

h2.Range(col & ini & ":" & cof & fin).Copy h1.Range("B3")

Por esta:

h2.Range(col & ini & ":" & cof & fin).Copy 
H1. Range("B3"). Pastespecial xlvalues


Sin duda podemos seguir con más mejoras a la macro. Podrías valorar esta respuesta y continuamos en una nueva pregunta lo que necesites.

Creo pedirte ya una ultima cosa con la macro anterior que estoy trabajando, es que al copiar y pegar el rango lo haga con un color ejemplo el amarillo??

Sub Copiar_DV()
'Por Dante Amor
    Set H1 = Sheets("hoja1")
    Set h2 = Sheets("hoja2")
    celda = "A1"
    '
    grupo = Val(h2.Range(celda).Value)
    u = Range("C" & Rows.Count).End(xlUp).Row
    cuantos = WorksheetFunction.CountBlank(Range("C2:C" & u)) + 1
    Select Case grupo
        Case Is > cuantos, "", 1, 0: n = 1
        Case Else: n = grupo
    End Select
    ini = 2
    vez = 1
    For I = 2 To u + 1
        If Cells(I, "C") = "" Then
            If vez = n Then
                fin = I - 1
                Exit For
            Else
                vez = vez + 1
                ini = I + 1
            End If
        End If
    Next
    '
    h2.Range("C" & ini & ":F" & fin).Copy
    H1.Range("B2").PasteSpecial xlValues
    If n + 1 > cuantos Then sig = 1 Else sig = n + 1
    h2.Range(celda).Value = sig
End Sub

Un Saludo.

Después de esta línea

H1. Range("B2"). PasteSpecial xlValues

Agrega esta:

H1. Range("B2"). PasteSpecial xlPasteFormats
 

¿No agrega ningún color?

No se si me entendiste, que la macro en la copia agregue un color ella misma.

Saludos.

Agregaste la línea

Los colores son de formato o de formato condicional

Los bordes, letra, colores, etc, se pegan con esto xlPasteFormats

¿Entonces desde la macro no se puede agregar un color?

La macro puede copiar colores

Y también puede agregar colores; y sin duda, se le pueden agregar a la macro muchas mejoras, las cuales con todo gusto te ayudo, pero corresponden a otro tema.

pues abro nuevo post.

Saludos.

Ahí explicas con detalle qué necesitas

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas