Macro de excel para buscar vinculando 2 combobox y mostrando un listbox

Ando realizando una macro tengo 3 hojas con la misma información pero separadas por sociedades, me explico la info de cada hoja equivale a una Sociedad diferente, por lo que deseo hacer una macro con 2 combobox el primero que me permita seleccionar la Sociedad y ingrese ala hoja seleccionada y cargue las categorías en el Segundo combobox que existen en la columna categorías de cada hoja cunando lo seleccione muestre en un listxbox toda la información de la tabla según la Sociedad y la categoría

2 respuestas

Respuesta
1

A tu petición le falta un ejemplo de como esta estructurada tu información, así que supongo que necesitas una macro parecida a esta, primero carga en un combobox los nombres de las hojas que supongo cada una tiene el nombre de la sociedad, luego seleccionas una sociedad, la macro entra a esa hoja y carga los datos que supongo (otra vez) empiezan en la celda a1 y de hay los carga al listbox

Private Sub ComboBox1_Change()
hoja = ComboBox1.Value
Sheets(hoja).Select
Set datos = Range("a1").CurrentRegion
matriz = datos
With ListBox1
    .Clear
    .List = matriz
    .ColumnCount = datos.Columns.Count
End With
End Sub
Private Sub UserForm_Initialize()
For Each hoja In Worksheets
    ComboBox1.AddItem hoja.Name
Next hoja
End Sub
Respuesta
1

Te anexo un ejemplo para cargar las sociedades, las categorías y los datos en el List.

Cambia en el código "soc1", "soc2", "soc3", por lo nombres de tus hojas que contienen las sociedades.

El código está preparado para cargar las categorías si encuentran en la columna A y empiezan en la fila2, suponiendo que en la fila 1 tienes los encabezados.

Private Sub ComboBox1_Change()
    'carga las categorías en el combo2
    'Al seleccionar una sociedad, en automático carga las categorías
    '
    ComboBox2. Clear
    ListBox1. Clear
    If ComboBox1.Value = "" Or ComboBox1.ListIndex = -1 Then Exit Sub
    '
    Set h = Sheets(ComboBox1.Value)
    For i = 2 To h.Range("A" & Rows.Count).End(xlUp).Row
        ComboBox2.AddItem h.Cells(i, "A").Value
    Next
End Sub
'
Private Sub ComboBox2_Change()
    'cargar los datos en el listbox
    'Al seleccionar una categoría se cargan los datos en el listbox
    '
    ListBox1.Clear
    If ComboBox1.Value = "" Or ComboBox1.ListIndex = -1 Then Exit Sub
    '
    Set h = Sheets(ComboBox1.Value)
    For i = 2 To h.Range("A" & Rows.Count).End(xlUp).Row
        If h.Cells(i, "A").Value = ComboBox2.Value 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")
        End If
    Next
End Sub
'
Private Sub UserForm_Activate()
    'CARGA LAS SOCIEDADES EN EL COMBO1
    'Al activar el userform, se cargan las hojas en el combo1
    '
    For Each h In Sheets
        Select Case LCase(h.Name)
            Case "soc1", "soc2", "soc3"     'nombre de las sociedades en minúsculas
                ComboBox1.AddItem h.Name
        End Select
    Next
End Sub

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

Puedes poner las imágenes de tus hojas de sociedades pero con datos, para ver qué quieres cargar en el combo2 y qué datos quieres cargar en el listbox.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas