Userform con 2 TextBox que filtran por fecha de incio y final. Datos filtrados deben mostrarse en ListBox (16 columnas)

Tengo un UserForm con 2 TextBox que deben filtrar datos por fecha de inicio(TextBox1) y fecha final(TextBox2) de la hoja "BASE DE DATOS FACTURACION" y mostrarlas en un ListBox1 que debe tener 16 columnas. Los datos van de la columna A5 (La fila 5 es la ColumnHead) a la P y las filas van creciendo a medida que se ingresa información. Luego la información cargada (filtrada) en el ListBox1 debe copiarse en la hoja "LIBRO". He intentado de muchas maneras pero no lo logro.

1 Respuesta

Respuesta
1

Te anexo la macro para filtrar por fechas

Antes de ejecutar la macro debes crear una hoja y le pones por nombre "Temporal"

Actualiza en la macro esta información:

    Set h1 = Sheets("BASE DE DATOS FACTURACION")
    Set h2 = Sheets("Temporal")
    col = "F"                   'columna de Fechas
    fila = 5                    'fila de encabezados
    uc = Columns("P").Column    'última columna con datos

Después de presionar el botón, en la hoja "temporal" tendrás la información filtrada.

Private Sub CommandButton1_Click()
'Por.Dante Amor
    'filtrar
    Set h1 = Sheets("BASE DE DATOS FACTURACION")
    Set h2 = Sheets("Temporal")
    col = "F"                   'columna de Fechas
    fila = 5                    'fila de encabezados
    uc = Columns("P").Column    'última columna con datos
    '
    h2.Cells.Clear
    ListBox1.RowSource = ""
    '
    'VALIDACIONES
    If TextBox1.Value = "" Or Not IsDate(TextBox1.Value) Then
        MsgBox "Captura una fecha INICIO"
        TextBox1.SetFocus
        Exit Sub
    End If
    If Me.TextBox2.Value = "" Or Not IsDate(TextBox2.Value) Then
        MsgBox "Captura fecha FIN"
        TextBox2.SetFocus
        Exit Sub
    End If
    fec1 = CDate(TextBox1.Value)
    fec2 = CDate(TextBox2.Value)
    If fec2 < fec1 Then
        MsgBox "La fecha FIN no puede ser menor a la fecha INICIO"
        TextBox2.SetFocus
        Exit Sub
    End If
    '
    Application.ScreenUpdating = False
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    u1 = h1.Range("A" & Rows.Count).End(xlUp).Row
    coln = Columns(col).Column
    h1.Range(h1.Cells(fila, "A"), h1.Cells(u1, uc)).AutoFilter Field:=coln, _
        Criteria1:=">=" & Format(fec1, "mm/dd/yyyy"), Operator:=xlAnd, _
        Criteria2:="<=" & Format(fec2, "mm/dd/yyyy")
    u1 = h1.Range("A" & Rows.Count).End(xlUp).Row
    h1.Range(h1.Cells(fila, "A"), h1.Cells(u1, uc)).Copy h2.Cells(1, "A")
    u2 = h2.Range("A" & Rows.Count).End(xlUp).Row
    If u2 = 1 Then
        MsgBox "No existen registros con ese filtro", vbExclamation, "FILTRO"
    Else
        rango = Range(Cells(2, "A"), Cells(u2, uc)).Address
        h2.Cells.EntireColumn.AutoFit
        ancho = ""
        For i = 1 To uc
            ancho = ancho & Int(h2.Cells(1, i).Width) + 3 & ";"
        Next
        ListBox1.RowSource = h2.Name & "!" & rango
        ListBox1.ColumnCount = uc
        ListBox1.ColumnHeads = True
        ListBox1.ColumnWidths = ancho
    End If
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    Application.ScreenUpdating = True
End Sub

No mencionaste cómo quieres copiar la información a la hoja "libro". La quieres copiar con encabezado, sin encabezado, en cuál fila, o se debe pegar después de la última fila con datos.

Como te comenté, la información filtrada está en la hoja "temporal" puedes tomar de ahí la información y copiarla a la hoja "libro".


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

Eres increíble!!! Funcionó super bien!! Muchísimas gracias de verdad... pero todavía me falta que la información en el listbox se copie a la hoja "libro" y efectivamente, como me comentas, no te mencioné cómo necesito que se copie.

La información del listbox se debe copiar sin el encabezado a la hoja "libro" a partir de la fila 11 y debe desplazar unas filas que se encuentran al final de esa hoja, o sea, en las filas 1-10 hay información que no se puede modificar, luego en la fila 11 se debe copiar la información del listbox y cuando termine de copiar deben quedar 7 filas finales que tampoco se pueden modificar. Avísame si necesitas que haga esta solicitud en otra pregunta y con gusto lo hago. Muchas gracias!!

Para copiar la información filtrada en la hoja "libro". ¿Qué pasa si vuelves a ejecutar la macro? ¿Primero hay que borrar la información de la hoja "libro" y poner la nueva? Es decir, ¿borrar solamente la información que se encuentra entre la filas 11 y antes de las últimas 7 filas?

Sí, crea una nueva pregunta y me explicas cómo sería el copiado cada que se ejecuta la macro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas