Resultado en combobox excel vba

Tengo un "Programita" para el trabajo y uso userforms para hacer las facturas, crear los listados, los artículos etc, hice un userform de búsqueda para encontrar rápidamente el precio de un producto o el teléfono de un cliente con combobox y textbox, lo que quería hacer y no encuentro es que de un combobox pueda poner el nombre de un cliente y en un segundo combobox me salga la lista de las facturas de el cliente seleccionado en el combobox 1, al combobox 1 le tengo en el rowsource la lista de los clientes de la hoja "R.Social" y quiero que busque el la hoja "L_Ventas" que es donde tengo el listado de todas las ventas me busque todas las facturas y estas se muestren en el combobox 2, estas se encuentran en la columna b, y los nombres en la D

En mi cabeza seria algo así:

Si en la hoja L_Ventas se encuentra en la columna D lo mismo que en combobox1, seleccione todas las veces que se encuentra e inserte en el combobox2 la lista de los resultados de la columna B

Algo como un sumar. Si o buscarV pero no se como pasarlo a la programación.

¿Es posible hace eso? Es que toda la información que veo sobre combobox anidados es en una sola hoja y relacionado con columnas no con criterios.

2 respuestas

Respuesta
2

Lo recomendable es que en lugar de un combobox2, utilices un listbox.

Crea un listbox en tu userform y prueba con el siguiente código. Cada vez que selecciones un cliente en el combobox1, el listbox2 se llenará con los números de factura.

Private Sub ComboBox1_Change()
'Por Dante Amor
    'Al seleccionar un cliente, busca todas sus facturas en la hoja L_Ventas
    'Y las carga en el listbox1.
    '
    ListBox1.Clear
    '
    If ComboBox1.Value = "" Then Exit Sub
    '
    Set h = Sheets("L_Ventas")
    Set r = h.Columns("D")
    Set b = r.Find(ComboBox1.Value, LookAt:=xlWhole)
    If Not b Is Nothing Then
        celda = b.Address
        Do
            ListBox1.AddItem h.Cells(b.Row, "B").Value
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> celda
    End If
End Sub

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

¡Gracias! Lo intentaré mañana, pero de un listbox puedo seleccionar luego una de las facturas para que me aparezcan ciertos resultados en textbox como hago con los productos o teléfonos ? O pedir que me envíe directamente a la hoja donde se encuentra la factura?

También del listbox puede seleccionar registros

Respuesta
1

¿Algo así?, la macro carga los nombres de la hoja r.social a través de una matriz en el combobox1, luego que seleccionas un nombre va a la hoja l_ventas, busca y contabiliza los nombres que coinciden y los carga todos a la vez en el combobox2

aqui esta la macro

Private Sub ComboBox1_Change()
Dim funcion As WorksheetFunction
Set funcion = WorksheetFunction
Set facturas = Range("facturas")
nombre = ComboBox1.Value
With facturas
    cuenta = funcion.CountIf(.Columns(3), nombre)
    fila = funcion.Match(nombre, .Columns(3), 0)
    matriz = .Cells(fila, 1).Resize(cuenta, 3)
    With ComboBox2
        .Clear
        .List = matriz
    End With
End With
Erase matriz
Set factura = Nothing: Set funcion = Nothing
End Sub
Private Sub UserForm_Initialize()
Set h1 = Worksheets("r.social").Range("a1").CurrentRegion
Set h2 = Worksheets("l_ventas")
Set facturas = Range("b1").CurrentRegion
With facturas
    r = .Rows.Count: c = .Columns.Count
    Set facturas = .Resize(r, 3)
    .Sort key1:=h2.Range(.Columns(3).Address), order1:=xlAscending, _
    key2:=h2.Range(.Columns(1).Address), order1:=xlAscending, Header:=xlYes
    .Name = "facturas"
End With
With h1
    matriz = h1
    ComboBox1.List = matriz
End With
Erase matriz: Set facturas = Nothing: Set h1 = Nothing: Set h2 = Nothing
End Sub

¡Gracias! es exactamente eso ^^ Aunque probé primero el de dante y me va a la perfección también probaré con el tuyo. que siempre es bueno ver distintas maneras de hacer una misma cosa ^^

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas