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
- Compartir respuesta
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.
1º
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?
2º
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:
1º
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.
1º
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.
2º
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.
3º
Tu macro es Botón Foro, ¿ejecutala y que hace? Copiar el ultimo grupo.
4º
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.
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
- Compartir respuesta