Buscar y Filtrar datos de excel en ListBox de un Userform

Alguien podría ayudarme por favor con esta situación:

Tengo varias hojas de excel 2010, pero en una de ellas llamada "Certificados Emitidos".. En ella tengo una base de datos de aproximadamente 19 columnas y con 100 filas aumentando cada día.. El la primer fila tengo los encabezados "Lote", "Clave", "No. Certificado", "Cliente", etc y los datos de fila empiezan a partir de la "4"... El número de lote y clave son registrados con número y guión, por ejemplo en el case de lote "00350-00350" y para el caso de clave "PWW-325-A"... El número de Lote se repite en varias ocasiones a lo largo de su columna... Lo que busco es que por medio de un Userform se ingrese el número de lote en un textbox y posteriormente me muestre la información filtrada de ese lote en un ListBox al igual que su información relacionada de la columna 1,2,3,4,5,6,8,9,10,11,14 y 15... Y una vez que se seleccione un filtro al presionar un CommandButton me mande los valores de cada columna a Labels de otro UserForm.

Agradecería muchísimo su ayuda, ya que soy nuevo en esto de programación... Tengo muy pocas ideas y la verdad no encuentro el modo de realizar esta tarea...

2 respuestas

Respuesta
1

Te ayudo con la primera parte:

Ingrese el número de lote en un textbox y posteriormente me muestre la información filtrada de ese lote en un ListBox

Pon el siguiente código en un commandbutton en tu userform. Captura el lote en el textbox y después presiona el botón.

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

Private Sub CommandButton1_Click()
'Por Dante Amor
    '
    Application.ScreenUpdating = False
    Set h1 = Sheets("Certificados Emitidos")
    Set h2 = Sheets("Temp")
    'VALIDACIONES
    If TextBox1.Value = "" Then
        MsgBox "Escribe el lote"
        TextBox1.SetFocus
        Exit Sub
    End If
    '
    'copia la fila con encabezados
    H2. Cells. ClearContents
    H1. Rows(1). Copy h2. Rows(1)
    '
    'filtra la información
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    cols = Array(1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 14, 15)    'columnas a mostrar
    uc = h1.Cells(1, Columns.Count).End(xlToLeft).Column
    u1 = h1.Range("A" & Rows.Count).End(xlUp).Row
    h1.Range(h1.Cells(3, "A"), h1.Cells(u1, uc)).AutoFilter Field:=1, Criteria1:="=" & TextBox1.Value
    u1 = h1.Range("A" & Rows.Count).End(xlUp).Row
    '
    If u1 > 4 Then
        h1.Rows("4:" & u1).Copy
        h2.Range("A2").PasteSpecial xlValues
        h2.Cells.EntireColumn.AutoFit
        u2 = h2.Range("A" & Rows.Count).End(xlUp).Row
        '
        'ESTABLECE LAS COLUMNAS A MOSTRAR
        For i = 1 To uc
            numero = 0
            For j = LBound(cols) To UBound(cols)
                If i = cols(j) Then
                    numero = Int(h2.Cells(1, i).Width) + 3
                    Exit For
                End If
            Next
            ancho = ancho & numero & "; "
        Next
        'PRESENTA LA INFORMACIÓN EN EL LISTBOX
        ListBox1.ColumnCount = uc
        ListBox1.ColumnHeads = True
        ListBox1.ColumnWidths = ancho
        rango = Range("A2", Cells(u2, uc)).Address
        ListBox1.RowSource = h2.Name & "!" & rango
    Else
        MsgBox "No existen registros con ese Lote", vbExclamation
    End If
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    Application.CutCopyMode = True
    Application.ScreenUpdating = True
End Sub

Nota: la macro toma los encabezados de la fila 1 y los datos empezando en la fila 4.


Crea una nueva pregunta para pasar los datos a otro userform.


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
Respuesta
1

:)

Creo que esto puede ponerte en camino:

https://bit.ly/2Q3TPcL

Saludos, Mario (Cacho) Rodríguez.

:)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas