Macro para generar plantillas de excel en varias hojas del libro.

Quería saber si es factible hacer una macro que me genere plantillas excel. Por ejemplo tengo una data (Adjunto imagen Foto1-Data), la idea que se me viene a la mente es con un botón de comando, generarme plantillas en base a la columna "Entrega" (Imagen foto1), y pasarlas a otra (Adjunto imagen de destino Foto2 - plantilla ASN). Actualmente lo que hago manualmente es copiar por ejemplo todo el contenido de la entrega "1529362164", solo de la columna ("A:E") Resaltado en rojo y lo paso a la plantilla de la foto2 a partir ("B12"). Si tengo 10 entregas en mi data, son 10 plantillas excel que tengo que hacer, es decir genero plantillas por "Entregas" (Columna "F" de la foto) Quería saber si eso se puede hacer con una macro, los números de filas de las entregas son variables, como se aprecia en la foto1. Espero se pueda entender mi idea. Caso contrario, estoy presto a cualquier aclaración.

la segunda imagen salio mal esta es la correcta.

1 respuesta

Respuesta
1

¿Y la nueva plantilla es una hoja en el mismo libro? ¿O es una hoja en un nuevo libro?

Hola Estimado Dante:

Genero plantillas en otro libro. Por ejemplo, en la primera imagen en la columna "F", tengo los datos de entrega que empiezan con "1529362164" tengo 5 líneas allí, de todo eso entrega genero una plantilla, copio hasta lo resaltado en rojo "Prc Neto", y lo voy pegando a la plantilla ASN a partir de B12. (Segunda Imagen)

Puedo tener "Entregas" con 2 líneas de datos así como 300 líneas, dependiendo de los productos a despachar, pero igual el punto de donde pego los datos es desde "B12" de otro libro. (Segunda Imagen)

Caga numero de entrega es un libro Nuevo en excel.

Te anexo la macro, considera lo siguiente:

1. Deberás tener una hoja llamada "ASN", esta es la hoja plantilla y se copiará a un archivo nuevo por cada Material.

2. El archivo nuevo se guardan en la misma carpeta donde tienes el archivo con la macro.

3. El nombre de cada archivo tendrá el número de material.

4. La macro utiliza las columnas AF y AG para realizar operaciones.

5. Ejecuta la macro sobre la hoja que tiene los datos.

Sub Macro1()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    Set h1 = l1.ActiveSheet
    Set h2 = l1.Sheets("ASN")
    '
    If h1.FilterMode Then h1.ShowAllData
    u = h1.Range("A" & Rows.Count).End(xlUp).Row
    h1.Range("F:F").Copy h1.Range("AF1")
    h1.[F1].Copy h1.[AG1]
    h1.Range("AF1:AF" & u).RemoveDuplicates Columns:=1, Header:=xlYes
    '
    For i = 2 To h1.Range("AF" & Rows.Count).End(xlUp).Row
        h1.[AG2] = h1.Cells(i, "AF")
        h1.Range("A1:F" & u).AdvancedFilter Action:=xlFilterInPlace, _
            CriteriaRange:=h1.Range("AG1:AG2"), Unique:=False
        u2 = h1.Range("A" & Rows.Count).End(xlUp).Row
        h2.Copy
        Set l2 = ActiveWorkbook
        Set h3 = l2.ActiveSheet
        h1.Range("A2:E" & u2).Copy h3.Range("B12")
        l2.SaveAs h1.Cells(i, "AF")
        l2.Close
    Next
End Sub

Saludos.Dante Amor

Hola Dante,

Podrías proporcionarme un correo para darte un ejemplo de mi data y que es lo que copio en una plantilla manualmente.

Por ejemplo en mi data de imagen solo copio desde A2: E6, eso copio y pego a mi plantilla ASN, mi referencia es el numero de entrega, pero no va a mi plantilla asn solo veo cuantos SKUS RIPLEY tiene esa entrega y lo copio.Por ejemplo, en la imagen la entrega 1529362164, copio los datos de A2:E6, y va a la plantilla ASN a partir de B12, y así sucesivamente para los demás.

¿Probaste la macro?

Si pero no me queda claro los puntos, es decir me genera plantillas, pero ocultándome las celdas. De repente algo hago mal.

Donde creo la hoja ASN, ¿dónde voy a ejecutar la macro?

Quizás pueda enviarte mi data, y te adjunto las plantillas que genero.

Solamente tienes que tener un libro, en ese libro tienes que tener 2 hojas

1. En la "x" tienes tu data.

2. En la hoja "ASN" tienes tu plantilla, con títulos y sin información

La macro la tienes que ejecutar sobre la hoja "x"

Lo que hace la macro es:

1. Copiar tu hoja "ASN" a un nuevo libro.

2. Copiar la información de un material en el nuevo libro y en la nueva hoja a partir de la fila 12.

3. Guardar el nuevo libro.

Para que le proceso anterior funcione, la macro realiza filtrados por cada material, es por eso que ves ocultas celdas.

Utiliza la siguiente macro para que no te deje las celdas ocultas.

Sub Macro1()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    Set h1 = l1.ActiveSheet
    Set h2 = l1.Sheets("ASN")
    '
    If h1.FilterMode Then h1.ShowAllData
    u = h1.Range("A" & Rows.Count).End(xlUp).Row
    h1.Range("F:F").Copy h1.Range("AF1")
    h1.[F1].Copy h1.[AG1]
    h1.Range("AF1:AF" & u).RemoveDuplicates Columns:=1, Header:=xlYes
    '
    For i = 2 To h1.Range("AF" & Rows.Count).End(xlUp).Row
        h1.[AG2] = h1.Cells(i, "AF")
        h1.Range("A1:F" & u).AdvancedFilter Action:=xlFilterInPlace, _
            CriteriaRange:=h1.Range("AG1:AG2"), Unique:=False
        u2 = h1.Range("A" & Rows.Count).End(xlUp).Row
        h2.Copy
        Set l2 = ActiveWorkbook
        Set h3 = l2.ActiveSheet
        h1.Range("A2:E" & u2).Copy h3.Range("B12")
        l2.SaveAs h1.Cells(i, "AF")
        l2.Close
    Next
    If h1.FilterMode Then h1.ShowAllData
    h1.Range("AF:AG").ClearContents
    Application.ScreenUpdating = True
    MsgBox "Terminado"
End Sub

Saludos.Dante Amor

Recuerda valorar la respuesta.

¡Gracias! 

Estimado Dante, muchísimas gracias por este valioso aporte que me reducirá un bastante tiempo de ejecución de procesos.

Gracias nuevamente por la ayuda que nos brindas a todos los que estamos deseosos de aprender y mejorar día a día.

Amigo Dante, una consulta a esta macro que esta corriendo muy bien, se puede incluirle un código para que los libros que guarda los haga en formato excel 97-2003, los cargo al portal de Ripley, solo acepta esos formatos.

Si te das un tiempo me comentas.

Gracias. 

Cambia en la macro esto:

L2. SaveAs h1. Cells(i, "AF")

Por esto:

    l2.SaveAs h1.Cells(i, "AF"), FileFormat:=xlExcel8, _
        Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas