Copiar y pegar datos de Base de Datos en una plantilla

Estimados tengo una duda enorme! Necesito tomar datos de una base de datos que esta compuesta por fechas y por nombre de trabajadores el cual necesito que se copien de allí de la BD y se peguen en una forma que tengo establecida para ello.

Para ser más explicito

1)Filtrar por fecha

2) Filtrar por driver

3) Colocar el nombre del empleado en la hoja Formato celda de nombre de empleado en el caso de la primera página CELDA C7

4) Verificar si la cantidad de registro del empleado es mayor a 9

5) Si es menor copiar y pegar en hoja formato y continuar con el siguiente empleado, si es mayor a 9 los registros copiar los primero 9 registro y pegarlos en la hoja FORMATO correspondiente a donde se registro el empleado, una vez copiado los primero 9 registros copiar 9 registro más siguientes a partir del décimo (ya que se copiaron los 9 anteriores) y colocarlos en la siguiente página, repetir el proceso tantas veces como sea necesario hasta culminar con todos los registros de ese empleado.

6) Si la cantidad de páginas supera las 15 que son la cantidad de páginas que existen en la hoja formato guardar en un pdf con la fecha que se esta trabajando, borrar los datos copiado en la hoja formato y continuar copiando los empleados que faltan de ese día y repetir el proceso de guardado con la fecha que se esta trabajando y borrar los datos copiados nuevamente de la hoja formato.

7) Continuar con la siguiente fecha disponible y repetir los pasos nuevamente hasta terminar con todas los días existentes.

PD. Se que debo trabajarlo con ciclos For Each - Next pero no logro comprender como estructurarlo para que realice los pasos 4,5,6,7. Es allí donde necesito de sus preciados conocimientos.

Adjunto enlace con archivo con BD y Formato

https://1drv.ms/x/s!AnjRTSkVrt87iEdD1rRChcnSYQ6o?e=eCpLgS 

Agradecido de ante mano

Atentamente. Cesar Castillo

Respuesta
1

[Hola

Sin ánimo de entrar en controversias, tu archivo no tienr macros, no ha realizado algún tipo de avaance y en realidad lo que pides, así tal cual, va más allá de un simple ayuda e implica el desarrollo de varias cosas que, en muchas ocasiones, no tenemos los que ayudamos por aquí ya que esto es algo voluntario y ad honorem.

Quizá si comienzas con cosas puntuales y/o con avances sea más fácil, y rápido, conseguir ayuda.

Abraham Valencia

PD: Lo otro es esperar, pacientemente, que alguien tenga el tiempo y disposición de hacerte todo eso y gratis.

Sub prueba()
Dim MP As Worksheet
Set MP = ThisWorkbook.Worksheets("data")
Dim MTM As Worksheet
Set MTM = ThisWorkbook.Worksheets("MTM")
Dim Setup As Worksheet
Set Setup = ThisWorkbook.Worksheets("Setup")
MP.Range("A1").Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("C2"), Order2:=xlAscending, Key3:=Range("F2"), _
Order3:=xlAscending, Header:=xlYes
Dim unicos As Collection
Dim drivers As Collection
Dim i As Integer
Dim d As Integer
Dim dDate As String
Dim uF As Long
Set unicos = New Collection
Let uF = MP.Range("A" & Rows.Count).End(xlUp).Row
For Each celda In MP.Range("A2:A" & uF)
    On Error Resume Next
    unicos.Add celda.Value, CStr(celda.Value)
    On Error GoTo 0
Next celda
For i = 1 To unicos.Count
    MTM.Range("C4").Value = unicos(i)
    dDate = Format(unicos(i), "m/dd/yyyy")
    MP.Range("A:I").AutoFilter Field:=1, Criteria1:="=" & dDate, Operator:=xlAnd
Set drivers = New Collection
Let uF = MP.Range("C" & Rows.Count).End(xlUp).Row
For Each celda In MP.Range("C2:C" & uF)
    On Error Resume Next
    drivers.Add celda.Value, CStr(celda.Value)
    On Error GoTo 0
Next celda
For d = 1 To drivers.Count
    Setup.Range("O2").Value = drivers(d)
    MP.Range("A:I").AutoFilter Field:=3, Criteria1:=drivers(d), Operator:=xlAnd
    Let uF = MP.Range("A" & Rows.Count).End(xlUp).Row
      If WorksheetFunction.CountA(MP.Range("A2:A" & uF).SpecialCells(xlCellTypeVisible)) > 9 Then
    MsgBox "mayor 9"
    Else
    MsgBox "menor 9"
    End If
Next d
Next i
End Sub

Hasta aquí tengo el código que seria lo que determine si el empleado tiene 9 registro o mas lo que no encuentro es como decirle que cada uno lo copie en la pagina siguiente una vez que haya terminado con el empleado que trabaja en ese momento, es decir me quede en el paso Nro. 5 que es hasta donde llega el codigo....

¿Te has dado cuenta que el código enviado no es para el archivo que habías colocado?

Abraham Valencia

1 respuesta más de otro experto

Respuesta
3

Prueba así:

If MePagas = True Then
Call Yo.Programo(paraUsted)
Else
GoTo CursoOnlineVBA
End If

Jaja man de verdad que es mucho lo que pides.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas