Como para llenar segundo listbox de acuerdo a datos de un primer listbox

Tengo un listbox1 que llena correctamente, ahora lo que quiero es que de acuerdo al dato que seleccione en ese primer listbox se llenen el seguro

Con este código me trae los números de cuentas

ListBox1. AddItem Sheets("Maestro de Captaciones"). Range("A" & i)

Quiero que al seleccionar alguna cuenta listbox2 traiga las transacciones, pero no se como hacer referencia a fila especifica que selección en el listbox2, para usarlo como parámetro para buscar los datos que deben de ir en el listbox2

1 Respuesta

Respuesta
1

Como el tema 'listas dependientes o relacionadas' es algo complicado de explicar en este espacio te invito a ver los videos 7 y 8 publicados en mi canal:

https://www.youtube.com/playlist?list=PLrhlyizWZzOERwRMxIIy-BTP-CyXh_K5N 

También desde el blog podrás descargar los libros con los ejemplos explicados (entradas de Junio 2018)

Sdos.

Elsa

Saludos, acabo de leer el blog y ver los vídeos y no hay un ejemplo especifico que se llene un listbox2 con datos de una hoja, pero que se llene de acuerdo fila que haga click en el listbox1.

Los ejemplos son modelos para adaptar. Están diseñados para combos y listbox y eso los hace válidos para cualquiera de estos 2 controles.

Como no dejaste ninguna pista de dónde y cómo tenés la información (hoja, rango, nro de col donde estará el dato a buscar y en qué col de la hoja buscar) es que te sugerí que revises si te sirve adaptar algún ejemplo presentado.

Bien, entonces quedo a la espera de tus aclaraciones: subí una imagen del listbox1 y del listbox2 (con algunos datos) y otra con los encabezados de la hoja donde buscar.

Sdos!

Disculpe, este es el código que al darle click a listbox1 debe llenar el listbox2, pero no me funciona bien.

Private Sub ListBox1_Click()
ListBox2.Clear
ListBox2.AddItem "FECHA"
ListBox2.List(ListBox2.ListCount - 1, 1) = "TRANSACCION"
ListBox2.List(ListBox2.ListCount - 1, 2) = "NOMBRE"
ListBox2.List(ListBox2.ListCount - 1, 3) = "TIPO"
t = Application.WorksheetFunction.CountA(Sheets("Maestro de Captaciones").Range("A:A"))
For i = 1 To t
        ListBox2.AddItem Sheets("Transacciones Captaciones").Range("C" & i)
        ListBox2.List(ListBox2.ListCount - 1, 1) = Sheets("Transacciones Captaciones").Range("B" & i)
        ListBox2.List(ListBox2.ListCount - 1, 3) = Sheets("Transacciones Captaciones").Range("A" & i)
Next
fila = ListBox2.ListIndex - 1

Esta es una imagen del formulario

Lo que necesito es que al darle click al listbox1, traiga de la hoja las solo transacciones de la cuenta la cual se le dio click para llenar el listbox2

Te había solicitado dejes también una imagen de los encabezados de hoja Transacciones.

Bien, así es como parece que están ubicados los conceptos. Cualquier diferencia con tu modelo ajusta las líneas donde dice REVISAR.

La macro al clic en la primer lista quedaría así:

Private Sub ListBox1_Click()
'x Elsamatilde
'se controla si hay algún valor seleccionado en Listbox1
If ListBox1.ListIndex < 1 Then Exit Sub    ' REVISAR *
'el item de la 1er col será el nro de cuenta a tomar para el filtrado
dato = ListBox1.List(ListBox1.ListIndex, 0)
'se controla si la hoja de transacciones tiene filtros aplicados, sino se coloca
Set hot = Sheets("Transacciones Captaciones")
If hot.AutoFilterMode = False Then
    hot.Range("A1:D1").AutoFilter     'REVISAR COL FINAL
Else
    If hot.FilterMode = True Then hot.ShowAllData
End If
'se filtra la hoja x dato seleccionado ... REVISAR col final
hot.Range("$A$1:$D$" & hot.Range("A" & Rows.Count).End(xlUp).Row).AutoFilter Field:=1, Criteria1:=dato
'se controla si hay transacciones filtradas para esa cuenta
finx = hot.Range("A" & Rows.Count).End(xlUp).Row
'se asume titulo en fila 1 y datos a partir de fila 2 ....REVISAR
If finx = 1 Then
    MsgBox "NO hay transacciones para esta cuenta.", , "Atención"
    Exit Sub
End If
ListBox2.Clear
'REVISAR ubicación de títulos y col en hoja Transacciones
ListBox2.AddItem "FECHA"
ListBox2.List(ListBox2.ListCount - 1, 1) = "TRANSACCION"
ListBox2.List(ListBox2.ListCount - 1, 2) = "NOMBRE"
ListBox2.List(ListBox2.ListCount - 1, 3) = "TIPO"
'se recorre el rango filtrado
For Each ct In hot.Range("A2:A" & finx).SpecialCells(xlCellTypeVisible)
    ListBox2.AddItem hot.Range("C" & ct.Row)
    ListBox2.List(ListBox2.ListCount - 1, 1) = hot.Range("B" & ct.Row)
    ListBox2.List(ListBox2.ListCount - 1, 3) = hot.Range("A" & ct.Row)
Next ct
End Sub
'* Si el listbox1 no tiene título se compara < 0

Sdos y no olvides valorar la respuesta (opciones Excelente o buena)

Elsa

PD) Tenés otra consulta aún pendiente que ya te respondí oportunamente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas