Quiero realizar un filtro con un rango de fechas desde/hasta en excel a través de un userform, como lo podría realizar?

Hace tiempo estoy intentando realizar este filtro y no lo consigo. Tengo una lista de Venta en excel 2010 con todos los detalles, incluyendo la fecha de facturación, lo que intento hacer es que a través de un botón "Filtrar", Me habrá un UsermForm en el cual dependiendo de dos criterios de fechas "Desde/Hasta", al aceptar me tire en una ListBox todos los detalles comprendidos entre esas fechas. ¿Alguien me podrá ayudar?

Respuesta
1

H o l a:

Envíame tu archivo con tu formulario.

En la hoja me explicas con lo siguiente:

  • Cómo se llama la hoja con los datos
  • En cuál columna están las fechas
  • Qué columnas quieres cargar en el listbox
  • Las fechas las vas a capturar en un par de textbox o en dónde estarán las fechas
  • El objetivo de presentar en un listbox la información, es solamente para consulta o el siguiente paso es seleccionar algún registro del listbox para editar o borrar el registro

Envíame el archivo con la información solicitada. Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “norali santucho” y el título de esta pregunta.

S a l u d o s . D a n t e   A m o r

Hola Dante te envié el excel a tu correo.. desde ya mil gracias!!! 

H o l a:

Te anexo el código del formulario para filtrar:

Public hp, hl, hv, hf
'
Sub FiltrarVentas()
'Por.Dante Amor
    'limpia la informacion para efectuar filtro avanzado
    hf.Range("A:J").ClearContents
    'coloca los criterios para efectuar los filtros avanzado
    hv.Range("K2") = ">=" & Format(DTPicker1.Value, "yyyy-mm-dd")
    hv.Range("L2") = "<=" & Format(DTPicker2.Value, "yyyy-mm-dd")
    If Productos = "Seleccionar Producto" Then hv.Range("M2") = "" Else hv.Range("M2") = Productos.Value
    If Tipología = "Seleccionar Línea" Then hv.Range("N2") = "" Else hv.Range("N2") = Tipología.Value
    'efectua el filtro avanzado
    u = hv.Range("A" & Rows.Count).End(xlUp).Row
    hv.Range("A7:J" & u).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=hv.Range("K1:N2"), _
        copytorange:=hf.Range("A1"), unique:=False
    'ordena el filtro avanzado
    u = hf.Range("A" & Rows.Count).End(xlUp).Row
    If u = 1 Then Exit Sub
    With hf.Sort
        .SortFields.Clear: .SortFields.Add Key:=hf.Range("G2:G" & u)
        .SetRange hf.Range("A1:J" & u): .Header = xlYes: .MatchCase = False
        .Orientation = xlTopToBottom: .SortMethod = xlPinYin: .Apply
    End With
    'Actualiza el ancho de columnas del listbox y carga
    hf.Cells.EntireColumn.AutoFit
    cols = Array("A", "B", 0, "D", "E", "F", 0, "H", "I", "J")
    For i = LBound(cols) To UBound(cols)
        If cols(i) = 0 Then n = 0 Else n = Int(hf.Range(cols(i) & 1).Width + 5)
        ancho = ancho & n & ";"
    Next
    ListBox1.ColumnWidths = ancho
    ListBox1.RowSource = hf.Name & "!A2:J" & u
End Sub
'
Private Sub DTPicker1_Change()
    Call FiltrarVentas
End Sub
Private Sub DTPicker2_Change()
    Call FiltrarVentas
End Sub
Private Sub Productos_Change()
    Call FiltrarVentas
End Sub
Private Sub Tipología_Change()
    Call FiltrarVentas
End Sub
Private Sub UserForm_Activate()
'Por.Dante Amor
    Set hp = Sheets("Producto")
    Set hl = Sheets("Linea")
    Set hv = Sheets("Ventas")
    Set hf = Sheets("filtros")
    '
    'Carga combo productos
        For i = 2 To hp.Range("A" & Rows.Count).End(xlUp).Row
            Productos.AddItem hp.Cells(i, "A")
        Next
    'Carga combo linea
        For i = 2 To hl.Range("A" & Rows.Count).End(xlUp).Row
            Tipología.AddItem hl.Cells(i, "A")
        Next
    'Carga fechas
        DTPicker1.Value = Date
        DTPicker2.Value = Date
End Sub
'
Private Sub CommandButton2_Click()
'RESETEAR
    'Carga fechas
        DTPicker1.Value = Date
        DTPicker2.Value = Date
    'limpia la data del listbox
        hf.Cells.Clear
End Sub
'
Private Sub CommandButton3_Click()
    Unload Me
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas