Ayudita con listbox de varias columnas

Otra vez yo!, estoy cargando un listbox y mezcle algunas cosas!, una parte me funciona y otra no, ¿me podrías ayudar?, el tema es así, se levantan unos datos de una hoja que tiene 3 columnas, eso anda bien, pero cuando quiero filtrar por proveedor, no me tare las tres columnas sino solo una, como lo acomodo, gracias

Private Sub ComboBox1_Change()
If ComboBox1 = "todos los proov" Then
With ListBox1
.ColumnCount = Sheets("ARTIC ORD").Range("b3:D300").Columns.Count
.List = Sheets("ARTIC ORD").Range("b3:D300").Value
End With
Else
Dim dato
dato = combobox1.value
i = 2
While Sheets("artic ord").Cells(i, 5).Value <> ""
'aquí es donde filtro
If (Sheets("artic ord").Cells(i, 5).Value) = dato Then
'carga el dato en el listbox
Ventas.ListBox1.AddItem (Sheets("artic ord").Cells(i, 2).Value)
End If
i = i + 1
Wend
End If
End Sub

¿Qué modifico para que agregue al listbox las segundas y terceras columnas cuando uso el combobox como filtro?

1 Respuesta

Respuesta
1

Veo que lo que quieres es agregar los valores del rango B3:D300 al listbox que coincidan con el valor del ComboBox1, lo que no entiendo son estas lineas

i=2
While Sheets("artic ord").Cells(i, 5).Value <> ""

Si te das cuenta estas agregando la primera celda que estas verificando que no sea vacío es la celda E2 es decir la columna 5 (A es la uno, B la dos, etc) y la fila 2 y después verificas las celdas E3, E4, etc. los cuales no están en el rango que quieres agregar que es B3:D300.

En esta otra linea pasa lo mismo

If (Sheets("artic ord").Cells(i, 5).Value) = dato Then

empiezas con la celda E2 y después con la E3, E4, etc. que son las mismas celdas de la linea anterior que están fuera del rango que quieres agregar

Con esta otra linea

Ventas. ListBox1. AddItem (Sheets("artic ord").Cells(i, 2). Value)

Estas agregando la celda B2 (la fila 2 y la columna 2), después la B3, B4, etc. cuando deberías comenzar desde la B3 no desde la B4, ya que el rango que quieres agregar al combobox es B3:D300.

Para agregar varias columnas es igual que la macro anterior

Ventas. ListBox1. AddItem (Sheets("artic ord").Cells(i, 2). Value)
Ventas.ListBox1.List(Ventas.ListBox1.ListCount - 1, 1) = Sheets("artic ord").Cells(i, 3).Value
Ventas.ListBox1.List(Ventas.ListBox1.ListCount - 1, 2) = Sheets("artic ord").Cells(i, 4).Value

Ademas justo antes del While debes eliminar los items que tenga el ComboBox

Ventas. ListBox1. Clear

Si, perdón por el desorden es que realmente estoy perdido!, como puedo hacer el código parecido al bloque que pego debajo con *****)

****If ComboBox1 = "todos los proov" Then
****With ListBox1
****.ColumnCount = Sheets("ARTIC ORD").Range("b3:D300").Columns.Count
****.List = Sheets("ARTIC ORD").Range("b3:D300").Value
*****End With

para que si selecciono en el combobox "gabi," en lugar de "todos los proov" , me cargue al listbox solo los artículos (que están en la columna b) que correspondan a gabi (columna c proovedores)

Muchas Gracias!!!

¿Quieres cargar en el combobox la columna b (artículos), la columna c (proveedores) y la columna c (no se que sea), es decir las tres columnas?

o

¿Quieres cargar en el combobox la columna b (artículos) es decir una columna?

Si por favor! las tres columnas,

Gracias por el tiempo!!! y la paciencia

Prueba con esta, cambie algunas variables y agregue comentarios para que se entienda

Private Sub ComboBox1_Change()
    Dim RangoCombo As Excel.Range
    Dim i As Integer
    Dim Proveedor As String
    RangoCombo = Sheets("ARTIC ORD").Range("B3:D300") 'Rango que se va a agregar al combo
    Proveedor = ComboBox1.Value 'Se obtiene el nombre del proveedor seleccionado
    ListBox1.ColumnCount = RangoCombo. Columns. Count 'Se iguala el numero de columnas del ListBox al numero de columnas del rango
    If Proveedor = "todos los proov" Then 'Si se ha seleccionado todos los proveedores
        ListBox1.List = RangoCombo.Value 'Se agrega todo el rango al combo
    Else 'Si no se ha seleccionado todos los proveedores
        Ventas.ListBox1.Clear 'Se quitan los artículos que estén para empezar de cero
        For i = 1 To RangoCombo.Rows.Count 'Se recorre el rango desde la fila 1 hasta la ultima
            If RangoCombo.Cells(i, 2) = Proveedor Then 'Si la segunda columna de la fila i del rango es igual al proveedor seleccionado, es decir si el proveedor de la fila i coincide con el proveedor seleccionado
                Ventas. ListBox1. AddItem RangoCombo. Cells(i, 1) 'Se agrega la primera columna (el articulo) al combo
                Ventas.ListBox1.List(Ventas.ListBox1.ListCount - 1, 1) = RangoCombo.Cells(i, 2) 'Se agrega la segunda columna (el proveedor)
                Ventas.ListBox1.List(Ventas.ListBox1.ListCount - 1, 1) = RangoCombo.Cells(i, 3) 'Se agrega la tercera columna
            End If
        Next
    End If
End Sub

Hola!!

en cuanto trato de ejecutarla me tira error variable del objeto o bloque whith no definido, y el error se posiciona en

RangoCombo = Sheets("artic ord").Range("B3:d300") 'Rango que se va a agregar al combo

diciendo Rangocombo = Nothing

Que podrá ser?

Private Sub ComboBox1_Change()    Dim RangoCombo As Excel.Range    Dim i As Integer    Dim Proveedor As String    Set RangoCombo = Sheets("ARTIC ORD").Range("B3:D300") 'Rango que se va a agregar al combo    Proveedor = ComboBox1.Value 'Se obtiene el nombre del proveedor seleccionado    ListBox1.ColumnCount = RangoCombo.Columns.Count 'Se iguala el numero de columnas del ListBox al numero de columnas del rango    If Proveedor = "todos los proov" Then 'Si se ha seleccionado todos los proveedores        ListBox1.List = RangoCombo.Value 'Se agrega todo el rango al combo    Else 'Si no se ha seleccionado todos los proveedores        Ventas.ListBox1.Clear 'Se quitan los artículos que estén para empezar de cero        For i = 1 To RangoCombo.Rows.Count 'Se recorre el rango desde la fila 1 hasta la ultima            If RangoCombo.Cells(i, 2) = Proveedor Then 'Si la segunda columna de la fila i del rango es igual al proveedor seleccionado, es decir si el proveedor de la fila i coincide con el proveedor seleccionado                Ventas.ListBox1.AddItem RangoCombo.Cells(i, 1) 'Se agrega la primera columna (el articulo) al combo                Ventas.ListBox1.List(Ventas.ListBox1.ListCount - 1, 1) = RangoCombo.Cells(i, 2) 'Se agrega la segunda columna (el proveedor)                Ventas.ListBox1.List(Ventas.ListBox1.ListCount - 1, 1) = RangoCombo.Cells(i, 3) 'Se agrega la tercera columna            End If        Next    End IfEnd Sub

Solo hay que agregar un set antes de la linea

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas