Busqueda Por Rango de Fechas (No ListBox)

Solicito de su gran ayuda, quiero buscar cierta informacion en una tabla por un rango de fechas y me los muestre en las caja de texboxt (no quiero ListBox ya que es para mostrar una estadistica de atenciones), eh buscado como meter el codigo para el rango de fechas pero no puedo hacer que funcione, intente con CDATE y DATE pero nada, ojala me puedan apoyar.

Private Sub btn_Buscar_Click()

Dim i As Double
Dim Final As Double

Final = Application.CountA(Worksheets("DATOS").Range("tecasig"))
For i = 2 To Final
Nombres = Worksheets("DATOS").Cells(i, 3).Value
Sreal = Worksheets("DATOS").Cells(i, 16).Value

If Nombres = txt_tecnico1 _

And Sreal = "PREVENTIVO" Then
txt_ptec1 = Application.CountIfs(Worksheets("DATOS").Range("p2:p" & Final), Sreal, Worksheets("DATOS").Range("c2:c" & Final), Nombres)

End If
If Nombres = txt_tecnico1 _
And Sreal = "CORRECTIVO" Then
txt_ctec1 = Application.CountIfs(Worksheets("DATOS").Range("p2:p" & Final), Sreal, Worksheets("DATOS").Range("c2:c" & Final), Nombres)

End If
Next
End Sub

1

1 respuesta

Respuesta
1

Puedes explicar con una imagen los datos que tienes en la hoja.

También dime en cuál columna están las fechas.

Cómo se llaman los textbox donde pones las fechas.

Pon una imagen de lo que capturas en tu userform

Y en la imagen de tu hoja marca cuál es el registro o qué datos se deben mostrar en los textbox.

Muchas gracias por su atencion, le adjunto imagen de lo que quiero registrar comentando el nombre de los rango dentro de las tablas:

los equipos los busca en un rango llamado tcliente (hoja CLIENTES)

los preventivos y correctivos los busca en el rango srealiza (hoja DATOS)

los nombres de los tecnicos los busca en el rango tecasig (hoja DATOS)

y la columna de las fechas esta con el rango fechar (hoja DATOS)

Te faltó la imagen de la hoja para ver cómo tienes los datos y marcar un registro de ejemplo.

También tienes que poner un ejemplo resuelto en tu imagen del userform.

Adjunto dos imagenes, mi tabla de datos de donde se jala la informacion y la otra el ejemplo final, solo que me jala la informacion completa y deseo realizarla por rango de fechas.

Pero el ejemplo no está completo, no veo en el rango de fechas un par de fechas como ejemplo, los textbox, están vacíos.

Tampoco me estás diciendo cuál es el registro que se debe mostrar.

Tus 2 imágenes de resultado no son iguales, en la primera veo 5 textbox y en la segunda no veo textbox, de hecho aparecen 7 registros, pero no se aprecia qué controles estás utilizando.

Podrías empezar de nuevo y explicar claramente un ejemplo.

  Muchas gracias por el apoyo, adjunto nueva imagen y el codigo realizado (una diculpa un poco largo), espero este mas claro mi caso.

El codigo lo que hace es ContarSI se cumplen los criterios, hasta el momento si me los cuenta pero requiero consultar la informacion por rango de fechas. El codigo:

Private Sub btn_Buscar_Click()

Dim i As Double
Dim Final As Double

Final = Application.CountA(Worksheets("DATOS").Range("tecasig"))
Final1 = Application.CountA(Worksheets("CLIENTES").Range("tcliente"))
For i = 2 To Final
Nombres = Worksheets("DATOS").Cells(i, 3).Value
Sreal = Worksheets("DATOS").Cells(i, 16).Value
tecliente = Worksheets("CLIENTES").Cells(i, 6).Value

'/////////////// Busca los equipos Asignados al Técnico////////////////
If Nombres = txt_tecnico1 Then
txt_tecliente1 = Application.CountIf(Worksheets("CLIENTES").Range("F2:F" & Final1), Nombres)

End If
If Nombres = txt_tecnico2 Then
txt_tecliente2 = Application.CountIf(Worksheets("CLIENTES").Range("F2:F" & Final1), Nombres)

End If
If Nombres = txt_tecnico3 Then
txt_tecliente3 = Application.CountIf(Worksheets("CLIENTES").Range("F2:F" & Final1), Nombres)

End If
If Nombres = txt_tecnico4 Then
txt_tecliente4 = Application.CountIf(Worksheets("CLIENTES").Range("F2:F" & Final1), Nombres)

End If
If Nombres = txt_tecnico5 Then
txt_tecliente5 = Application.CountIf(Worksheets("CLIENTES").Range("F2:F" & Final1), Nombres)

End If
'////////////// Calculo de Preventivos ////////////////////
If Nombres = txt_tecnico1 _
And Sreal = "PREVENTIVO" Then
txt_ptec1 = Application.CountIfs(Worksheets("DATOS").Range("p2:p" & Final), Sreal, Worksheets("DATOS").Range("c2:c" & Final), Nombres)

End If
If Nombres = txt_tecnico2 _
And Sreal = "PREVENTIVO" Then
txt_ptec2 = Application.CountIfs(Worksheets("DATOS").Range("p2:p" & Final), Sreal, Worksheets("DATOS").Range("c2:c" & Final), Nombres)

End If
If Nombres = txt_tecnico3 _
And Sreal = "PREVENTIVO" Then
txt_ptec3 = Application.CountIfs(Worksheets("DATOS").Range("p2:p" & Final), Sreal, Worksheets("DATOS").Range("c2:c" & Final), Nombres)

End If
If Nombres = txt_tecnico4 _
And Sreal = "PREVENTIVO" Then
txt_ptec4 = Application.CountIfs(Worksheets("DATOS").Range("p2:p" & Final), Sreal, Worksheets("DATOS").Range("c2:c" & Final), Nombres)

End If
If Nombres = txt_tecnico5 _
And Sreal = "PREVENTIVO" Then
txt_ptec5 = Application.CountIfs(Worksheets("DATOS").Range("p2:p" & Final), Sreal, Worksheets("DATOS").Range("c2:c" & Final), Nombres)

End If
'////////////// Calculo de Correctivos ////////////////////
If Nombres = txt_tecnico1 _
And Sreal = "CORRECTIVO" Then
txt_ctec1 = Application.CountIfs(Worksheets("DATOS").Range("p2:p" & Final), Sreal, Worksheets("DATOS").Range("c2:c" & Final), Nombres)

End If
If Nombres = txt_tecnico2 _
And Sreal = "CORRECTIVO" Then
txt_ctec2 = Application.CountIfs(Worksheets("DATOS").Range("p2:p" & Final), Sreal, Worksheets("DATOS").Range("c2:c" & Final), Nombres)

End If
If Nombres = txt_tecnico3 _
And Sreal = "CORRECTIVO" Then
txt_ctec3 = Application.CountIfs(Worksheets("DATOS").Range("p2:p" & Final), Sreal, Worksheets("DATOS").Range("c2:c" & Final), Nombres)

End If
If Nombres = txt_tecnico4 _
And Sreal = "CORRECTIVO" Then
txt_ctec4 = Application.CountIfs(Worksheets("DATOS").Range("p2:p" & Final), Sreal, Worksheets("DATOS").Range("c2:c" & Final), Nombres)

End If
If Nombres = txt_tecnico5 _
And Sreal = "CORRECTIVO" Then
txt_ctec5 = Application.CountIfs(Worksheets("DATOS").Range("p2:p" & Final), Sreal, Worksheets("DATOS").Range("c2:c" & Final), Nombres)

End If
Next
End Sub

Private Sub UserForm_Initialize()


' Cargamos los tecnicos actuales
Me.txt_tecnico1.Value = Hoja2.Cells(2, 2)
Me.txt_tecnico2.Value = Hoja2.Cells(3, 2)
Me.txt_tecnico3.Value = Hoja2.Cells(4, 2)
Me.txt_tecnico4.Value = Hoja2.Cells(5, 2)
Me.txt_tecnico5.Value = Hoja2.Cells(8, 2)
End Sub

Podrías poner un ejemplo más real.

En tus fechas pusiste esto: del 01jul al 31jul

Luego pones que Jorge tiene 2 Preventivos, pero en la hoja, Jorge tiene fecha del 3septiembre, su conteo debería ser 0.

Puedes preparar el ejemplo en la hoja y que los resultados mostrados en el userform coincidan con los datos mostrados en la hoja.

Envíame nuevamente las 2 pantallas cuando tengas listo el ejemplo.

Otros detalles:

- Explica cómo contar los equipos.

- En tu pantalla solamente se ve el texto "preventivo", en tu ejemplo deberán venir ambos casos "preventivo" y "correctivo"

Adjunto imagen de un ejemplo mas real, solo que en el codigo que busca me falta agregar para que busque el rango de fechas, ese es mi gran problema no encuentro como agragarlo, espero me pueda ayudar.

Esta imagen adjunto el codigo que busca preventivos y correctivos.

No te preocupes por el código de programación, en esa parte yo te ayudo, lo que quiero entender es cómo hacer el conteo.

Nuevamente te faltó explicar cómo contar el número de equipos, en tu ejemplo solamente veo 2 y tu pusiste un 87. ¿Puedes explicarlo?

Ese dato de numero de Equipos utilizo el siguiente codigo:

If Nombres = txt_tecnico1 Then
txt_tecliente1 = Application.CountIf(Worksheets("CLIENTES").Range("F2:F" & Final1), Nombres)

El cual busca en otra tabla(clientes) el nombre del tecnico y cuenta cuantos clientes estan a nombre de esa persona. Una tabla con 500 clientes y de los cuales 87 estan a nombre de ese tecnico. ¿Me explico? si gusta eliminamos esa seccion, ya entendi a que se refiere con esos datos pero no tendrian nada que ver para el rango de las fechas, solo me interesan los preventivos y correctivos.

Pero quiero que me lo expliques con ejemplos y con imágenes, no necesito el código.

Lo que quiero ver es cómo tienes tus datos.

Bueno, te ayudo con la parte de los preventivos y correctivos.

Te anexo la macro:



Private Sub btn_Buscar_Click()
'Por Dante Amor
    '
    'VALIDACIONES DE FECHAS
    If Not IsDate(txt_fecini) Or txt_fecini.Value = "" Then
        MsgBox "Captura una fecha INICIAL válida"
        txt_fecini.SetFocus
        Exit Sub
    End If
    If Not IsDate(txt_fecfin) Or txt_fecfin.Value = "" Then
        MsgBox "Captura una fecha FINAL válida"
        txt_fecfin.SetFocus
        Exit Sub
    End If
    If CDate(txt_fecfin) < CDate(txt_fecfin) Then
        MsgBox "La fecha FINAL es menor a la fecha INICIAL"
        txt_fecfin.SetFocus
        Exit Sub
    End If
    '
    'CONTAR SERVICIOS
    Set h = Sheets("DATOS")
    u = h.Range("C" & Rows.Count).End(xlUp).Row
    Set rnom = h.Range("C2:C" & u)
    Set rfec = h.Range("D2:D" & u)
    Set rser = h.Range("P2:P" & u)
    fec1 = Format(CDate(txt_fecini), "mm/dd/yyyy")
    fec2 = Format(CDate(txt_fecfin), "mm/dd/yyyy")
    '
    For i = 1 To 5
        Me.Controls("txt_ptec" & i) = WorksheetFunction.CountIfs( _
            rnom, Me.Controls("txt_tecnico" & i).Value, _
            rfec, ">=" & fec1, rfec, "<=" & fec2, rser, "PREVENTIVO")
        Me.Controls("txt_ctec" & i) = WorksheetFunction.CountIfs( _
            rnom, Me.Controls("txt_tecnico" & i).Value, _
            rfec, ">=" & fec1, rfec, "<=" & fec2, rser, "CORRECTIVO")
    Next
End Sub
'
Private Sub UserForm_Initialize()
    ' Cargamos los tecnicos actuales
    Me.txt_tecnico1.Value = Hoja2.Cells(2, 2)
    Me.txt_tecnico2.Value = Hoja2.Cells(3, 2)
    Me.txt_tecnico3.Value = Hoja2.Cells(4, 2)
    Me.txt_tecnico4.Value = Hoja2.Cells(5, 2)
    Me.txt_tecnico5.Value = Hoja2.Cells(8, 2)
End Sub

'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas