Corrección Macro unir hojas de excel

Soy absolutamente novato en el mundo de las macros y he estado buscando info por la red.
Necesito crear una macro que me aglutine todos los datos de las distintas pestañas en una sola.
Para ello, he encontrado una que me podría valer, si no fuese por que cada vez que ejecuto la macro, me duplica los datos extraídos anteriormente.
La estructura del archivo es la siguiente:

Las pestañas Abel, Imade y Susana (y otras que incluiré), contendrán los datos que quiero volcados en la pestaña Union.

Las líneas de comando de la macro con estas:

Sub unionhojas()

Sheets("Union").Select

ultimf = Range("A" & Cells.Rows.Count).End(xlUp).Row + 1

For hoja = 2 To Sheets.Count

Sheets(hoja).Select

ufh = Range("A" & Cells.Rows.Count).End(xlUp).Row

Range("A9:T" & ufh).Copy

Sheets("Union").Select

ultimf = Range("A" & Cells.Rows.Count).End(xlUp).Row + 1

Range("A" & ultimf).PasteSpecial Paste:=xlPasteAll

Next hoja

MsgBox ("Fin preceso informacion unida")

End Sub

Cuando en la pestaña "Union" pulso "funel Global", me extrae los datos de las demás hojas, sin embargo, si lo vuelvo a pulsar, se vuelven a duplicar. Y justamente eso es lo que no quiero.
He pensado, en un momento determinado, crear un archivo para cada pestaña, y uno aislado para "union", por lo que cada vez que quiera ver los datos, creo un nuevo "union"... Pero no tiene mucho sentido. Y si tendría sentido, si cada vez que abriese el archivo "union", me actualizara todos los datos de los demás archivos. ¿Eso sería posible teniendo en cuenta que todos los archivos estarían en la misma ubicación?
Me podrían ayudar, ¿por favor?
Muchísimas gracias de antemano y felices vacaciones a los que ya las están disfrutando.

1 Respuesta

Respuesta
1

Tu problemas es que siempre estás recorriendo todas las hojas, tomando sus valores y agrengándolos al final de la hoja Unión, por esa razón, cada vez que ejecutas la macro los valores se van replicando. Por tanto, lo que puedes hacer es vaciar la hoja Union cada vez que ejecutas la macro, de esta forma los datos se copiarían sólo una vez.

Si no es inconveniente eliminar los datos de la hoja Union para volverlos a escribir, el procedimiento es sencillo:

Antes de comenzar a iterar con el for, en la linea 4 de tu código agrega lo siguiente

Range("A9:T" & ultimf). Clear

O bien

Range("A9:T" & ultimf). ClearComments

Si sólo quieres eliminar el contenido y no el formato de las celdas.

Con esto debería ser suficiente.

¡Gracias! Perfecto. Lo acabo de probar y va perfecto.
Esto es justamente lo que necesitaba!


Muchas gracias "Granpeke"!

Hola de nuevo.
Sin querer abusar, ¿seria posible incluir en la macro unas líneas comando para ordenar el archivo por la columna A a partir de la fila 8 siendo esta el encabezado?

El rango seía A8:V1089

Muchas gracias de nuevo por vuestra aportación.


Un cordial saludo

Mis disculpas por no haber respondido antes, lo más probable es que a esta altura no te sirva, pero igual dejo el código

Sub Ordenar()
Dim hoja As Worksheet
Set hoja = ActiveWorkbook.Worksheets("Hoja1")

hoja.Range("A9:V1089").Select
hoja.Sort.SortFields.Clear
hoja.Sort.SortFields.Add Key:=Range("A9:A1089" _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With hoja.Sort
.SetRange Range("A8:V1089")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

Eso, en el caso de la hoja1.

Muchísimas gracias Granpeke. Me sirve, si. Aunque tenga el archivo en producción, añado esas líneas de comando para las restantes hojas.
Muchas gracias

Un saludo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas