(MACRO)Crear varias hojas de acuerdo a una plantilla con valores pegados desde otra hoja

Tengo una duda que seria de mucha ayuda que me ayudaran a resolver y me facilitaría mucho el trabajo:

Tengo una hoja que se llama "Recibo", esta hoja tiene algunas fórmulas e información ya establecida, pero también tengo una hoja que se llama "Datos", en esta hoja tengo una pequeña base de datos de ventas.

Quisiera que me ayudaran a generar un macro que hiciera lo siguiente:

1.-Duplicara la hoja que se llama "recibo"

2.-De la hoja "Datos" filtrara una columna "G" (o sea por empleado) y que copiara todo el listado a la hoja duplicada a partir de la celda "A30" por ejemplo y nombrara la hoja con cada valor único de la columna "G" de la hoja "Datos".

Pd: no se si fui claro, pero agradecería que me ayuden por favor, yo se que aquí hay gente que sabe mucho.

1 Respuesta

Respuesta
1

Quieres copiar la hoja "recibo" es me queda claro.

Lo que no entendí, fue esta parte:

Copiara todo el listado a la hoja duplicada a partir de la celda "A30" 

Quieres copiar todos los datos o ir copiando dato por dato, es decir,

Copiar la hoja "recibo" a una nueva hoja, copiar de "datos" la celda G2 y pegar en la celda A30 de la nueva hoja, renombrar la nueva hoja.

Copiar la hoja "recibo" a una nueva hoja, copiar de "datos" la celda G3 y pegar en la celda A30 de la nueva hoja, renombrar la nueva hoja.

¿O cómo sería? O si puedes poner imágenes de lo que tienes y de lo que esperas como resultado.

Hola Dante, disculpa la demora, esta vez te adjunto imágenes en orden y te voy contando:

1.-En la primera imagen tengo mi plantilla de un recibo en la hoja llamada "Original", a partir esta hoja quiero crear duplicados por cada uno de los empleados que tenemos.

2.- En la segunda imagen muestro la hoja "Data" que es donde tengo los datos de donde vamos a tomar los registros de cada empleado y de donde tomaremos los valores diferentes para crear cada hoja en las cuales pondremos los registros de cada empleado.

3.- En la tercera imagen aparece el ejemplo de como deberían quedar las hojas por cada empleado y a partir de que celda se deberían de pegar estas filas extraídas de la hoja llamada "Data"

Yo me imagino que el proceso en el macro debería ser:

1.-Duplicar la hoja "Original"

2.-Crear un filtro en la hoja "Data"

3.-Renombrar el duplicado de la hoja "Original" con el nombre del primer empleado del filtro de la hoja "Data"

4.-Copiar las filas del primer empleado y pegarlas en la hoja recién duplicada a partir de la celda A30.

5.-Repetir desde el paso 1 pero con las filas del segundo empleado del filtro y así sucesivamente.

Más o menos tengo la idea de la "logica" por así decirlo, pero me confunden mucho los comandos o sintaxis.

¿Podrías ayudarme por favor?

Te anexo la macro

Antes de ejecutar la macro, crea una hoja y la nombras como "Temp"

Sub Crear_Hojas()
'
'   Por Dante Amor
'
    '
    Application.ScreenUpdating = False
    Set h1 = Sheets("Data")
    Set h2 = Sheets("Original")
    Set h3 = Sheets("Temp")
    '
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    h3.Cells.ClearContents
    h1.Columns("G:G").Copy h3.Range("A1")
    u3 = h3.Range("A" & Rows.Count).End(xlUp).Row
    h3.Range("A1:A" & u3).RemoveDuplicates Columns:=1, Header:=xlYes
    u3 = h3.Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To u3
        'filtra por Id
        a_id = h3.Cells(i, "A") 'agent id
        t_id = Left(a_id, 30)    'texto id para nombrar la hoja
        If h1.AutoFilterMode Then h1.AutoFilterMode = False
        uf1 = h1.Range("G" & Rows.Count).End(xlUp).Row
        uc1 = h1.Cells(1, Columns.Count).End(xlToLeft).Column
        h1.Range("A1", h1.Cells(uf1, uc1)).AutoFilter Field:=7, Criteria1:=a_id
        uf1 = h1.Range("G" & Rows.Count).End(xlUp).Row
        'Crear nueva hoja
        h2.Copy after:=Sheets(Sheets.Count)
        Set h4 = ActiveSheet
        h4.Name = t_id
        'Copiar
        h1.Range(h1.Cells(2, "A"), h1.Cells(uf1, uc1)).Copy
        h4.Range("A30").PasteSpecial xlValues
    Next
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    h1.Select
    MsgBox "Hojas creadas"
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

¡Muchísimas Gracias Dante! Quisiera poder tener contacto directo contigo para futuras dudas y para agradecerte por todo, saludos!

Solamente crea la pregunta en el foro y con gusto te ayudo.

Hola Dante,

Reviviendo el tema, fíjate que ahora estoy manejo un reporte donde el nombre de los agentes esta en la columna "C" en lugar de "G" e intente modificar la macro para que ahora tomara este dato para crear las hojas y pegar la información en las nuevas hojas creadas. Sin embargo cuando reemplace las referencias a "G" en la macro por "C", el macro ahora hace algo diferente, puede crear los las hojas con los nombres correctamente, sin embargo a la hora de pegar los registros en las nuevas hojas, solo copia el encabezado de la hoja "Data", te adjunto la imagen y el código actualizado que yo modifique, podrias ayudarme por favor?

Sub CreateSheets()
'
'
Application.ScreenUpdating = False
Set h1 = Sheets("Data")
Set h2 = Sheets("Original")
Set h3 = Sheets("Temp")
'
If h1.AutoFilterMode Then h1.AutoFilterMode = False
h3.Cells.ClearContents
h1.Columns("C:C").Copy h3.Range("A1")
u3 = h3.Range("A" & Rows.Count).End(xlUp).Row
h3.Range("A1:A" & u3).RemoveDuplicates Columns:=1, Header:=xlYes
u3 = h3.Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To u3
'filtra por Id
a_id = h3.Cells(i, "A") 'agent id
t_id = Left(a_id, 30) 'texto id para nombrar la hoja
If h1.AutoFilterMode Then h1.AutoFilterMode = False
uf1 = h1.Range("C" & Rows.Count).End(xlUp).Row
uc1 = h1.Cells(1, Columns.Count).End(xlToLeft).Column
h1.Range("A1", h1.Cells(uf1, uc1)).AutoFilter Field:=7, Criteria1:=a_id
uf1 = h1.Range("C" & Rows.Count).End(xlUp).Row
'Crear nueva hoja
h2.Copy after:=Sheets(Sheets.Count)
Set h4 = ActiveSheet
h4.Name = t_id
'Copiar
h1.Range(h1.Cells(2, "A"), h1.Cells(uf1, uc1)).Copy
h4.Range("I3").PasteSpecial xlValues
Cells.Columns.AutoFit
Next
If h1.AutoFilterMode Then h1.AutoFilterMode = False
Application.CutCopyMode = False
Application.ScreenUpdating = True
h1.Select
MsgBox "Payfiles Created"
End Sub

Crea una nueva pregunta y ahí me explicas lo que necesitas

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas