Macro que traslade datos de una hoja a otra bajo un formato planilla y al final convierta el resultado en un archivo PDF

Me gustaría que me pudieras ayudar con la siguiente solicitud.

Tengo en un libro, una hoja llamada "AGENDA" y una hoja llamada "Planilla".

Mi idea es tener una macro que al ser ejecutada, solicite 1 fecha y de acuerdo a esa fecha que estipule, copie las citas agendadas desde la hoja "AGENDA" hasta la hoja "Planilla" de acuerdo a un formato o planilla pre-establecida que se encuentra en la hoja "Planilla".

Una vez terminada la operación de copiar, que guarde en un archivo PDF el resultado final de la hoja "Planilla".

Esta es la hoja "Agenda"

Este es el formato vacio de la hoja "Planilla"

Y este seria un ejemplo después de copiar los datos de un día específico desde la hoja "Agenda" a la hoja "Planilla"

En el primer caso como ves sale un espacio y una fecha vacía es por que cuando el dato no existe o las celdas donde va a buscar están vacías, entonces deja vacío.

Te voy a enviar el archivo a tu correo para que lo puedas entender mejor

1 Respuesta

Respuesta
1

H o l a Nathalia:

Ya tengo tu correo, voy a revisar el archivo y en cuanto tenga una respuesta te la envío.

 S a l u d o s

Te anexo la macro:

Sub Agenda()
'Por Dante Amor
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets("AGENDA")
    Set h2 = l1.Sheets("Planilla")
    Set h3 = l1.Sheets("Pdf")
    '
    For Each wb In Workbooks
        If wb.Name = "consultorio.xlsx" Then
            Set l2 = Workbooks("consultorio.xlsx")
            existe1 = True
        End If
    Next
    If existe1 = False Then
        MsgBox "El archivo Consultorio no está abierto", vbCritical, "AGENDA"
        Exit Sub
    End If
    For Each h In l2.Sheets
        If UCase(h.Name) = "CLIENTES" Then
            Set h4 = l2.Sheets("clientes")
            existe2 = True
        End If
    Next
    If existe2 = False Then
        MsgBox "No existe la hoja clientes en el libro Consultorio", vbCritical, "AGENDA"
        Exit Sub
    End If
    '
    If h2.[A8] = "" Or Not IsDate(h2.[A8]) Then
        MsgBox "Escribe una fecha valida", vbExclamation, "AGENDA"
        h2.[A8].Select
        Exit Sub
    End If
    h3.Cells.Clear
    h2.Rows("7:8").Copy h3.Rows("7:8")
    '
    m = 7
    j = 10
    n = 0
    l = 4
    For i = 2 To h1.Range("B" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "B") = h2.[A8] Then
            nid = h1.Cells(i, "F")
            mot = ""
            fec = ""
            If nid <> "" Then
                Set b = h4.Columns("C").Find(nid, lookat:=xlWhole)
                If Not b Is Nothing Then
                    mot = h4.Cells(b.Row, "P")
                    fec = h4.Cells(b.Row, "Q")
                End If
            End If
            h2.Range("A10:H13").Copy h3.Cells(j, "A")
            h3.Range("B" & j) = h1.Cells(i, "C")
            h3.Range("D" & j) = h1.Cells(i, "D")
            h3.Range("C" & j + 1) = h1.Cells(i, "G")
            h3.Range("G" & j) = h1.Cells(i, "M")
            h3.Range("C" & j + 2) = mot
            h3.Range("H" & j + 2) = fec
            h3.Range("C" & j + 3) = h1.Cells(i, "N")
            n = n + 1
            If n = m Then
                m = 8
                n = 0
                j = j + l
                l = 1
            End If
            j = j + 5
        End If
    Next
    ruta = l1.Path & "\"
    arch = "Citas del " & Format(h2.[A8], "dd") & " de " & Format(h2.[A8], "mmmm") & " de " & Format(h2.[A8], "yyyy") & ".pdf"
    h3.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ruta & arch, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
    MsgBox "Agenda generada en PDF", vbInformation, "AGENDA"
End Sub

Recuerda valorar la respuesta.

Hola Dante

Todo funcionó muy bien en cuento a tomar los datos del libro "Agenda" pero no se por que, no me trae el dato que le corresponde a cada paciente del libro "CONSULTORIO.xlsm" de la hoja "Clientes" y de la columna "P", recuerda que ese dato lo debe colocar en la opción de "Motivo Visita Anterior" en cada paciente.

Dante, creo que el hecho que no lo encuentre tiene que ver con esto.

Cuando yo busco un dato en la hoja "Clientes" me sale automáticamente marcado así

Osea marcada la opción de "Coincidir con el contenido de toda la celda" y así nunca me encuentra los datos, solo me encuentra los datos si desmarco esa casilla de esta manera:

No si se comentándote eso ya lo puedas solucionar

En la macro el archivo tiene extensión .xlsx

Set l2 = Workbooks("consultorio.xlsx")

Cambia en la macro a .xlsm

Set l2 = Workbooks("consultorio.xlsm")

En tus explicaciones no me comentaste cómo se debe buscar el cliente en la hoja clientes. Tampoco me enviaste el archivo "consultorio" con algunos ejemplos.

Lo que pusiste fue el número de cliente "Solo de Referencia", por lo tanto, la macro está buscando el cliente con el Número de ID; ese número lo toma de la hoja "agenda" de la columna "F" y lo busca en la hoja "clientes" en la columna "C".

Si no es así como se debe buscar, entonces explícame cómo se debe realizar la búsqueda.

Dante, hice pruebas y vi que en el libro de "AGENDA Dam2" los datos del ID de cada Paciente están en formato "Numero" con separador de miles. Entonces me di cuenta que si lo busco de la misma manera es decir con los separadores de miles en el libro consultorio, hoja clientes, no lo encuentra, solo lo encuentra si busco el dato (el cual es numérico) pero sin el separador de miles.

Ejemplo.

El ID 123.456.789 si lo busco con el numero: "123.456.789" no lo encuentra pero si lo busco con el número "123456789" si lo encuentra.

¿Me ayudas por favor?

Envíame tus 2 archivos con ejemplos parar ver cómo están los datos.

Listo ya te los envié (Ambos) a tu correo

H o l a:

El archivo agenda que me enviaste tiene la columna "F" vacía, es por eso que no lo encuentra.

Te pedí que me enviaras un archivo con ejemplos, pero si el ejemplo está incompleto, pues no puedo saber lo que necesitas.

Puse de ejemplo al paciente: "HERVIN MARTINEZ ALBA ", su número de ID es: "91209965".

Observa como en el archivo "Agenda", el número de ID está si formato.

En el archivo consultorio "HERVIN" está en la fila 125, el númer de ID tiene formato.

Ejecuto la macro y si encuentra los datos de "HERVIN".

1. El formato no tienen nada que ver.

2. Si no pones el número de ID en el archivo "Agendano va a funcionar

3. Debes fijarte que el número de ID en la celda sea un número, que no contenga espacios.

Realiza la prueba con los 2 archivos que te estoy regresando con fecha 24 de agosto.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas