Macro para filtrar y posteriormente cargar en Textbox, los valores de los elementos filtrados mediante un combobox.

Tengo esa hoja de cálculo y he diseñado este formulario, en la hoja de calculo, tengo casi 1.000 registros y lo que deseo es, que cuando se inicie el formulario, en el combobox Departamento, se carguen lo valores únicos de la columna "G" (Departamento) y que, en el combobox se carguen únicamente la Sección que correspondan al Departamento seleccionado en el combobox "Departamento".

Adicional a lo anterior, en vista de que, pueden haber en la lisa más de 100 personas que pertenezcan a un departamento, por ejemplo, Departamento "A", la idea es que, si doy click en el botón "Siguiente", se vayan llenando los textbox TxtNo, TxtTto, TxtNombres, TxtApellidos, TxtIdentificacion y TxtRH, y que si doy click en el botón "Anterior", pueda retroceder en la lista, es decir; que el botón "Anterior" y "Siguiente", me sirvan para navegar por la lista de personas que son del Departamento A y que, si he seleccionado también una sección, por ejemplo, la Sección "A1", pues que, pueda ir cargando unicamente la información que corresponda a la selección.

Quiero considerar que los botones de navegación "Anterior" y "Siguiente", funcionen, tanto si he seleccionado únicamente un item del combobox Departamento o si también he seleccionado un elemento del combobox Sección, es decir, cargando en los textbox, la información de las personas que en general pertenezcan al Departamento "A" o si se desea, tambien filtrar el personal que son del Departamento "A", pero de la Sección "A2".

Como siempre y desde ya.

1 respuesta

Respuesta
1

Lo más práctico es poner el resultado de la búsqueda en un listbox. En el listbox tendrás todos los registros en una lista y podrás con la barra de scroll desplazarte en los registros.

Te anexo el código para cargar los 2 combobox y cada que cambies el dato en cualquier combo el listbox se actualiza

Private Sub ComboBox1_Change()
    ComboBox2. Clear
    ListBox1. Clear
    Set h = Sheets("Hoja2")
    For i = 2 To h.Range("G" & Rows.Count).End(xlUp).Row
        If h.Cells(i, "G") = ComboBox1 Then
            ComboBox2.AddItem h.Cells(i, "H")
            ListBox1.AddItem h.Cells(i, "A")
            ListBox1. List(ListBox1.ListCount - 1, 1) = h.Cells(i, "B")
            ListBox1. List(ListBox1.ListCount - 1, 2) = h.Cells(i, "C")
            ListBox1. List(ListBox1.ListCount - 1, 3) = h.Cells(i, "D")
            ListBox1. List(ListBox1.ListCount - 1, 4) = h.Cells(i, "E")
            ListBox1. List(ListBox1.ListCount - 1, 5) = h.Cells(i, "F")
        End If
    Next
End Sub
'
Private Sub ComboBox2_Change()
    ListBox1.Clear
    Set h = Sheets("Hoja2")
    For i = 2 To h.Range("G" & Rows.Count).End(xlUp).Row
        If h.Cells(i, "G") = ComboBox1 And _
           h.Cells(i, "H") = ComboBox2 Then
            ListBox1.AddItem h.Cells(i, "A")
            ListBox1. List(ListBox1.ListCount - 1, 1) = h.Cells(i, "B")
            ListBox1. List(ListBox1.ListCount - 1, 2) = h.Cells(i, "C")
            ListBox1. List(ListBox1.ListCount - 1, 3) = h.Cells(i, "D")
            ListBox1. List(ListBox1.ListCount - 1, 4) = h.Cells(i, "E")
            ListBox1. List(ListBox1.ListCount - 1, 5) = h.Cells(i, "F")
        End If
    Next
End Sub
'
Private Sub UserForm_Activate()
'
    Set h = Sheets("Hoja2")
    For i = 2 To h.Range("G" & Rows.Count).End(xlUp).Row
        Call Agregar(ComboBox1, h.Cells(i, "G"))
    Next
    ListBox1.ColumnCount = 6
End Sub
'
Sub Agregar(combo As ComboBox, dato As String)
'por.DAM agrega los item únicos y en orden alfabético
    For i = 0 To combo.ListCount - 1
        Select Case StrComp(combo.List(i), dato, vbTextCompare)
            Case 0: Exit Sub 'ya existe en el combo y ya no lo agrega
            Case 1: combo.AddItem dato, i: Exit Sub 'Es menor, lo agrega antes del comparado
        End Select
    Next
    combo.AddItem dato 'Es mayor lo agrega al final
End Sub

.

.

Muchas ¡Gracias!, Dante. Esperaba tu amable respuesta. Voy a probarlo y te comento en un momento. 

Hola Dante, te cuento que probé las macros, funcionan de maravilla. 

Solo una cosita, el combobox1 filtra de maravilla los valores únicos, pero en el combobox2, carga todos los registros, incluso repetidos. La idea es que en el combobox2, hayan solo valores únicos.

Muchas gracias por la mejora en cuanto al Listbox es genial, mucho mejor y más funcional. Muchas gracias

En el evento Combobox1_change. Cambia esta línea

ComboBox2. AddItem h.Cells(i, "H")

Por esta

Call Agregar(ComboBox2, h.Cells(i, "H"))

No olvides valorarme.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas