• 👏 Bienvenido a nuestra comunidad Excel

    ¿Todavía no estás registrado? 😲

    Registrate gratis aquí y podrás:

    💪 Hacer preguntas a los expertos
    ⬇️ Descargar ejemplos y plantillas
    🏅 
    Acceder a contenidos premium

Filtrar en ListBox valores <> 0

Hola Buenas tardes!

Hoy vengo con una duda de filtrado en un ListBox.
Tengo en un ListBox las siguientes columnas:

ÍTEM DESCRIPCIÓN UNIDAD CANTIDAD PRECIO

El tema es que yo veo una serie de datos que utilizo con un precio > 0 y tambien hay otros valores que no utilizo y por lo tanto en la columna precio da = $0,00. Lo que yo necesito es filtar las columnas <> 0. Osea, solo ver los materiales que utilizo.

NOTA: El ListBox lo lleno así: (Solo a modo informativo)
Código:
                                  Me.LISTA.RowSource = "Materiales"
                                           Me.LISTA.ColumnCount = 5
                                           Me.LISTA.ColumnWidths = "35;285;40;75;60"
Y tengo tres buscadores para una misma columna, DESCRIPCIÓN con el siguiente código: (Solo a modo informativo y si de paso a alguien le sirve)
Código:
NumeroDatos = material.Range("B" & Rows.Count).End(xlUp).Row
material.AutoFilterMode = False
Y = 0
For Fila = 7 To NumeroDatos
descrip = material.Cells(Fila, 2).Value 'Columna donde se genera la busqueda

   If UCase(descrip) Like "*" & UCase(Me.TEXTO.Value) & "*" And UCase(descrip) Like "*" & UCase(Me.TEXTO2.Value) & "*" And UCase(descrip) Like "*" & UCase(Me.TEXTO3.Value) & "*" Then
     
     Me.LISTA.AddItem
     Me.LISTA.List(Y, 0) = material.Cells(Fila, 2).Value 'Cantidad de columnas de la Tabla
     Me.LISTA.List(Y, 1) = material.Cells(Fila, 3).Value
     Me.LISTA.List(Y, 2) = material.Cells(Fila, 4).Value
     Me.LISTA.List(Y, 4) = Format(material.Cells(Fila, 5).Value, "Currency")
        Y = Y + 1
    End If
Next

MUCHAS GRACIAS
 
Perdón si no se entendió doy un ejemplo de lo que necesito:
AHORA LO VEO ASÍ:

ÍTEM --------- DESCRIPCIÓN --------- UNIDAD --------- CANTIDAD --------- PRECIO
1 Prueba1 u. 5 $150
2 Prueba2 u. 2 $50
3 Prueba3 u. 0 $0
4 Prueba4 u. 9 $550
5 Prueba5 u. 0 $0


Y NECESITO VERLO ASÍ:

ÍTEM --------- DESCRIPCIÓN --------- UNIDAD --------- CANTIDAD --------- PRECIO
1 Prueba1 u. 5 $150
2 Prueba2 u. 2 $50
4 Prueba4 u. 9 $550


GRACIAS!!
 
Hola,

Supongamos que la cantidad en tu HOJA esta en la columna "E" entonces solo has: Otro IF
Código:
NumeroDatos = material.Range("B" & Rows.Count).End(xlUp).Row
material.AutoFilterMode = False
Y = 0
For Fila = 7 To NumeroDatos
descrip = material.Cells(Fila, 2).Value 'Columna donde se genera la busqueda

   If UCase(descrip) Like "*" & UCase(Me.TEXTO.Value) & "*" And UCase(descrip) Like "*" & UCase(Me.TEXTO2.Value) & "*" And UCase(descrip) Like "*" & UCase(Me.TEXTO3.Value) & "*" Then
     If material.Range(Fila,"E") <> 0 then
         Me.LISTA.AddItem
         Me.LISTA.List(Y, 0) = material.Cells(Fila, 2).Value 'Cantidad de columnas de la Tabla
         Me.LISTA.List(Y, 1) = material.Cells(Fila, 3).Value
         Me.LISTA.List(Y, 2) = material.Cells(Fila, 4).Value
         Me.LISTA.List(Y, 4) = Format(material.Cells(Fila, 5).Value, "Currency")
         Y = Y + 1
    End If
  Endif
Next
Saludos.
 

Cacho R

Well-known member
Hola!
Se advierte en tu código "doble" forma de cargar la info en el listbox: no es lo mismo (y de hecho, a veces entran en conflicto) llenar un listbox/combobox mediante RowSource, que hacerlo mediante AddItem/List.

El primer caso te permite tener los títulos de la tabla en el listbox (el segundo método no) y la "estética" de la información que despliegas es la misma que se tiene en las celdas (en el segundo método, el formato de la info debes dárselo tú).

Como Leopoldo te ha mostrado la forma de cargar la info mediante AddItem/List, entonces yo lo hago mediante RowSource:
.
 

Adjuntos

Leopoldo Blancas dijo:
Hola,

Supongamos que la cantidad en tu HOJA esta en la columna "E" entonces solo has: Otro IF
Código:
NumeroDatos = material.Range("B" & Rows.Count).End(xlUp).Row
material.AutoFilterMode = False
Y = 0
For Fila = 7 To NumeroDatos
descrip = material.Cells(Fila, 2).Value 'Columna donde se genera la busqueda

   If UCase(descrip) Like "*" & UCase(Me.TEXTO.Value) & "*" And UCase(descrip) Like "*" & UCase(Me.TEXTO2.Value) & "*" And UCase(descrip) Like "*" & UCase(Me.TEXTO3.Value) & "*" Then
     If material.Range(Fila,"E") <> 0 then
         Me.LISTA.AddItem
         Me.LISTA.List(Y, 0) = material.Cells(Fila, 2).Value 'Cantidad de columnas de la Tabla
         Me.LISTA.List(Y, 1) = material.Cells(Fila, 3).Value
         Me.LISTA.List(Y, 2) = material.Cells(Fila, 4).Value
         Me.LISTA.List(Y, 4) = Format(material.Cells(Fila, 5).Value, "Currency")
         Y = Y + 1
    End If
  Endif
Next
Saludos.
Hola Leopoldo, gracias!! Pero algo estaré haciendo mal, lo puse tal cual me dijiste y me sale el siguiente error: "Error en el metodo Range de objeto Worksheet"

Me quedo el código así:
Código:
Dim Fila As Long

NumeroDatos = Costeo.Range("BQ" & Rows.Count).End(xlUp).Row
Costeo.AutoFilterMode = False
Y = 0
For Fila = 3 To NumeroDatos
'descrip = Costeo.Cells(Fila, 6).Value 'Columna donde se genera la busqueda

     [b]If Costeo.Range(Fila, "BV") <> 0 Then[/b] [b][i][u]ACA SALTA EL ERROR[/u][/i][/b]
         Me.MaterialesElegidos.AddItem
         Me.MaterialesElegidos.List(Y, 0) = Costeo.Cells(Fila, 69).Value 'Cantidad de columnas de la Tabla
         Me.MaterialesElegidos.List(Y, 1) = Costeo.Cells(Fila, 70).Value
         Me.MaterialesElegidos.List(Y, 2) = Costeo.Cells(Fila, 71).Value
         Me.MaterialesElegidos.List(Y, 3) = Costeo.Cells(Fila, 72).Value
         Me.MaterialesElegidos.List(Y, 4) = Format(Costeo.Cells(Fila, 73).Value, "Currency")
         Me.MaterialesElegidos.List(Y, 5) = Format(Costeo.Cells(Fila, 74).Value, "Currency")
         Y = Y + 1
  
  End If
Next
Acá te muestro como lo tengo yo, columnas y hojas.. Diferente al primero que fue un ejemplo.. Pero el código es igual..
 
Cacho R dijo:
Hola!
Se advierte en tu código "doble" forma de cargar la info en el listbox: no es lo mismo (y de hecho, a veces entran en conflicto) llenar un listbox/combobox mediante RowSource, que hacerlo mediante AddItem/List.

El primer caso te permite tener los títulos de la tabla en el listbox (el segundo método no) y la "estética" de la información que despliegas es la misma que se tiene en las celdas (en el segundo método, el formato de la info debes dárselo tú).

Como Leopoldo te ha mostrado la forma de cargar la info mediante AddItem/List, entonces yo lo hago mediante RowSource:
.
Buenas Noches Cacho!!

Muchas gracias por la explicación!! Si bien me estoy haciendo los cursos eso no lo sabía pero ahora me cierra porque cada vez que buscaba se me iban los encabezados... Veo tu código de búsqueda y es todo un "CHINO" para mi.. Gracias por subir un archivo ejemplo.. Te pregunto, entonces en tu ejemplo como filtro los que tienen el precio en $0.00 trate y no pude. Encerio ese código de búsqueda me supero totalmente..
 
Ya entendí como funciona, buscas y te saca las filas que están en $0 en tu búsqueda, lo que yo quería es que me levante la tabla sin esas filas que están en $0, osea, que no haga falta buscar algo.
Igual voy a tratar de descularlo!!
 
maxigordillo dijo:
Hola Leopoldo, gracias!! Pero algo estaré haciendo mal, lo puse tal cual me dijiste y me sale el siguiente error: "Error en el metodo Range de objeto Worksheet"

Me quedo el código así:
Bueno, veo que te haces la vida difícil... en la adaptación, si todavía no entiendes muy bien lo que te sugerimos... entonces trata de usar información verdadera para que no repares más.

Me equivoque en la instrucción debe quedar así: If Costeo.Range("BV" & Fila) <> 0 Then

Si te fijas ya dejaste fuera la comparación del FILTRO, donde quedo?
Código:
Dim Fila As Long

NumeroDatos = Costeo.Range("BQ" & Rows.Count).End(xlUp).Row
Costeo.AutoFilterMode = False
Y = 0
For Fila = 3 To NumeroDatos
'descrip = Costeo.Cells(Fila, 6).Value 'Columna donde se genera la busqueda



     If Costeo.Range("BV" & Fila) <> 0 Then
         Me.MaterialesElegidos.AddItem
         Me.MaterialesElegidos.List(Y, 0) = Costeo.Cells(Fila, 69).Value 'Cantidad de columnas de la Tabla
         Me.MaterialesElegidos.List(Y, 1) = Costeo.Cells(Fila, 70).Value
         Me.MaterialesElegidos.List(Y, 2) = Costeo.Cells(Fila, 71).Value
         Me.MaterialesElegidos.List(Y, 3) = Costeo.Cells(Fila, 72).Value
         Me.MaterialesElegidos.List(Y, 4) = Format(Costeo.Cells(Fila, 73).Value, "Currency")
         Me.MaterialesElegidos.List(Y, 5) = Format(Costeo.Cells(Fila, 74).Value, "Currency")
         Y = Y + 1
  
  End If

Next

Saludos
 
Sii la saque porque en realidad lo que quiero es que me aparezca el ListBox sin las filas que tienen $0, sin tener que buscar algo en particular.. Entonces puse esos códigos en el Evento Activate del Formulario, con la idea de que primero me levante la tabla y luego me filtre los materiales que no use..
Ahora pruebo con el código arreglado, Muchas Gracias!!!
 

Cacho R

Well-known member
maxigordillo dijo:
Te pregunto, entonces en tu ejemplo como filtro los que tienen el precio en $0.00 trate y no pude. Encerio ese código de búsqueda me supero totalmente...
Mira Maxi: lo importante del código... ¡No es el código!, sino el Excel.
En particular: el filtro avanzado (que es en lo que se basa el código).

Te pregunto: ¿Sabes utilizar el filtro avanzado para filtrar y mostrar -exclusivamente- los precios iguales a cero?...
 
Cacho R dijo:
maxigordillo dijo:
Te pregunto, entonces en tu ejemplo como filtro los que tienen el precio en $0.00 trate y no pude. Encerio ese código de búsqueda me supero totalmente...
Mira Maxi: lo importante del código... ¡No es el código!, sino el Excel.
En particular: el filtro avanzado (que es en lo que se basa el código).

Te pregunto: ¿Sabes utilizar el filtro avanzado para filtrar y mostrar -exclusivamente- los precios iguales a cero?...
En la interfaz de excel, no suelo usar filtro avanzado, por lo tanto muy clara no la tengo, es cuestión de investigar.. Será que algo estoy metiendo mal, pero no puedo hacer que me aparezca la tabla sin las filas con valore $0
 
Me sería de gran ayuda! te agradezco mucho!

Lo que necesito es que me aparezca la tabla en el ListBox sin las columnas que tienen $0 pesos, osea, filtrando lo que no uso..
 

Cacho R

Well-known member
maxigordillo dijo:
Me sería de gran ayuda! te agradezco mucho! Lo que necesito es que me aparezca la tabla en el ListBox sin las columnas que tienen $0 pesos, osea, filtrando lo que no uso...
Pero Maxi: ¡Eso hace lo que ya te pasé!... :roll: :cry:

Te propongo lo siguiente: ¿Por qué no subes al Foro tu implementación REAL?...
Mirándola te podré decir que es lo que te está fallando, ¿Te parece?

Saludos, Cacho R.
 
Cacho R dijo:
maxigordillo dijo:
Me sería de gran ayuda! te agradezco mucho! Lo que necesito es que me aparezca la tabla en el ListBox sin las columnas que tienen $0 pesos, osea, filtrando lo que no uso...
Pero Maxi: ¡Eso hace lo que ya te pasé!... :roll: :cry:

Te propongo lo siguiente: ¿Por qué no subes al Foro tu implementación REAL?...
Mirándola te podré decir que es lo que te está fallando, ¿Te parece?

Saludos, Cacho R.
Cacho, no subía el archivo porque es un quilombo de formularios y módulos, pero veo que no me queda otra así que acá adjunto una parte del programa con solo el formulario que tiene el problema que necesito resolver.
El formulario tiene un MultiPage y el ListBox en cuestión esta en la pestaña (03 MATERIALES). Haciendo DblClik en el LisB. de abajo el material se agrega arriba como veras.. Y el tema es que aparecen también las filas que no utilizo en $0,00. Lo que quiero es que el usuario solo vea los materiales que utiliza..

NOTA: Seguro hay mil formas mejores de hacer esto que hice. Pero es la única que se me ocurrió y sabia maso menos armar. Quizá algún día lo haga de forma mas profesional..


GRACIAS...
 

Adjuntos

Cacho R

Well-known member
Las columnas de datos (en la hoja) no son las mismas que las publicaste inicialmente ni el rango de datos está ubicado en la misma posición y ni tampoco hay coincidencias con lo de tu ListBox.

Pregunto: ¿Es -acaso- que no entiendes suficiente de estos temas y estás necesitando que te lo hagamos todo?...

Te lo pregunto pues la sugerencia de Leopoldo es lo que menos cambios requiere implementar, y solo tienes que ver el tema de las columnas y de las filas cambiadas. O sea: ¡Te la hizo muy fácil!

Saludos, Cacho R.
.
 
Entiendo algo pero no me especializo y a veces se me complica.. Intente hacerlo como menciono Leopoldo, pero cuando llegaba a ese IF me tiraba un error que no tenía Permiso. De seguro es una tontería pero bueno, voy a seguir investigando siguiendo la idea de Leopoldo. La única diferencia es que no quiero tener que generar una búsqueda para que me saque los $0, simplemente me inicie el formulario con el filtro aplicado..
Voy a ver si lo logro con la linea sugerida de Leopoldo a ver si puedo
 
Hola max...

No se por que te empeñas en complicar las cosas... Sube tu archivo con una base de datos REAL, con datos ficticios, pero las condiciones de filas y columnas sean fieles, para que no tengas problemas al pasar la macro... pareciera que trabajas en la CIA o en la NASA, o en GOOGLE o en MICROSOFT y no quieres que uno sepa nada de tu aplicación real... pues entonces has una ficticia pero semejante a la REAL. Si no puedes hacer eso... entonces yo tampoco puedo ayudar.

Saludos.
 
Leopoldo Blancas dijo:
Hola max...

No se por que te empeñas en complicar las cosas... Sube tu archivo con una base de datos REAL, con datos ficticios, pero las condiciones de filas y columnas sean fieles, para que no tengas problemas al pasar la macro... pareciera que trabajas en la CIA o en la NASA, o en GOOGLE o en MICROSOFT y no quieres que uno sepa nada de tu aplicación real... pues entonces has una ficticia pero semejante a la REAL. Si no puedes hacer eso... entonces yo tampoco puedo ayudar.

Saludos.
El real es el que adjunte unos comentarios mas arriba. Ese es mi archivo original con todo real, faltarán formularios pero esta solo en el que tengo la duda
 

Cacho R

Well-known member
OK, Maxi. En el adjunto te muestro:

- La parte pertinente. Nota que al mostrarse (desde el inicio) el listbox ya se advierte que los materiales tienen cantidades no nulas.

- La hoja Aux es importantísima.

- Te cambié y simplifiqué el filtro. Ahora sólo requieres escribir en un solo textBox. Por ejemplo podrías:

a) Escribir y buscar: rio
b) Escribir y buscar: rio curva
c) Escribir y buscar: rio curva ciudad

Espero te sea de utilidad.
Cacho R.
.
 

Adjuntos

Arriba