Filtrar en ListBox valores <> 0

Solo consultas sobre macros y código VBA Excel.
Reglas del Foro
1. Antes de hacer tu pregunta intenta con el buscador de este foro (muchas preguntas ya fueron respondidas antes!)
2. Si haces una nueva pregunta, es muy recomendable que adjuntes el ejemplo Excel para poder comprenderla mejor!
3. Realiza tu pregunta de forma clara, explicando bien cada paso de lo que haces y tendrás más probabilidad de respuesta!
maxigordillo
Miembro Frecuente
Miembro Frecuente
Mensajes: 31
Registrado: 27 May 2019 09:53

Filtrar en ListBox valores <> 0

Mensaje por maxigordillo » 15 Ago 2019 19:55

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: Seleccionar todo

                                  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: Seleccionar todo

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



maxigordillo
Miembro Frecuente
Miembro Frecuente
Mensajes: 31
Registrado: 27 May 2019 09:53

Re: Filtrar en ListBox valores <> 0

Mensaje por maxigordillo » 15 Ago 2019 20:01

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!!



Leopoldo Blancas
Miembro Frecuente
Miembro Frecuente
Mensajes: 472
Registrado: 11 Ene 2019 00:48

Re: Filtrar en ListBox valores <> 0

Mensaje por Leopoldo Blancas » 15 Ago 2019 20:28

Hola,

Supongamos que la cantidad en tu HOJA esta en la columna "E" entonces solo has: Otro IF

Código: Seleccionar todo

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.



Avatar de Usuario
Cacho R
Miembro Frecuente
Miembro Frecuente
Mensajes: 11238
Registrado: 23 Jun 2011 17:15
Ubicación: Buenos Aires
Contactar:

Re: Filtrar en ListBox valores <> 0

Mensaje por Cacho R » 15 Ago 2019 21:14

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:
.
No tienes los permisos requeridos para ver los archivos adjuntos a este mensaje.



maxigordillo
Miembro Frecuente
Miembro Frecuente
Mensajes: 31
Registrado: 27 May 2019 09:53

Re: Filtrar en ListBox valores <> 0

Mensaje por maxigordillo » 15 Ago 2019 22:23

Leopoldo Blancas escribió:
15 Ago 2019 20:28
Hola,

Supongamos que la cantidad en tu HOJA esta en la columna "E" entonces solo has: Otro IF

Código: Seleccionar todo

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: Seleccionar todo

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..



maxigordillo
Miembro Frecuente
Miembro Frecuente
Mensajes: 31
Registrado: 27 May 2019 09:53

Re: Filtrar en ListBox valores <> 0

Mensaje por maxigordillo » 15 Ago 2019 22:28

Cacho R escribió:
15 Ago 2019 21:14
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..



maxigordillo
Miembro Frecuente
Miembro Frecuente
Mensajes: 31
Registrado: 27 May 2019 09:53

Re: Filtrar en ListBox valores <> 0

Mensaje por maxigordillo » 15 Ago 2019 22:35

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!!



Leopoldo Blancas
Miembro Frecuente
Miembro Frecuente
Mensajes: 472
Registrado: 11 Ene 2019 00:48

Re: Filtrar en ListBox valores <> 0

Mensaje por Leopoldo Blancas » 15 Ago 2019 22:51

maxigordillo escribió:
15 Ago 2019 22:23
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: Seleccionar todo

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



maxigordillo
Miembro Frecuente
Miembro Frecuente
Mensajes: 31
Registrado: 27 May 2019 09:53

Re: Filtrar en ListBox valores <> 0

Mensaje por maxigordillo » 15 Ago 2019 22:56

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!!!



Avatar de Usuario
Cacho R
Miembro Frecuente
Miembro Frecuente
Mensajes: 11238
Registrado: 23 Jun 2011 17:15
Ubicación: Buenos Aires
Contactar:

Re: Filtrar en ListBox valores <> 0

Mensaje por Cacho R » 16 Ago 2019 01:19

maxigordillo escribió:
15 Ago 2019 22:28
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?...



maxigordillo
Miembro Frecuente
Miembro Frecuente
Mensajes: 31
Registrado: 27 May 2019 09:53

Re: Filtrar en ListBox valores <> 0

Mensaje por maxigordillo » 16 Ago 2019 08:14

Cacho R escribió:
16 Ago 2019 01:19
maxigordillo escribió:
15 Ago 2019 22:28
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



Avatar de Usuario
Cacho R
Miembro Frecuente
Miembro Frecuente
Mensajes: 11238
Registrado: 23 Jun 2011 17:15
Ubicación: Buenos Aires
Contactar:

Re: Filtrar en ListBox valores <> 0

Mensaje por Cacho R » 16 Ago 2019 12:15

VOy a ver si te preparo un par de ejemplos: ¿Quieres?...



maxigordillo
Miembro Frecuente
Miembro Frecuente
Mensajes: 31
Registrado: 27 May 2019 09:53

Re: Filtrar en ListBox valores <> 0

Mensaje por maxigordillo » 16 Ago 2019 13:00

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..



Avatar de Usuario
Cacho R
Miembro Frecuente
Miembro Frecuente
Mensajes: 11238
Registrado: 23 Jun 2011 17:15
Ubicación: Buenos Aires
Contactar:

Re: Filtrar en ListBox valores <> 0

Mensaje por Cacho R » 16 Ago 2019 14:35

maxigordillo escribió:
16 Ago 2019 13:00
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.



maxigordillo
Miembro Frecuente
Miembro Frecuente
Mensajes: 31
Registrado: 27 May 2019 09:53

Re: Filtrar en ListBox valores <> 0

Mensaje por maxigordillo » 16 Ago 2019 17:23

Cacho R escribió:
16 Ago 2019 14:35
maxigordillo escribió:
16 Ago 2019 13:00
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...
No tienes los permisos requeridos para ver los archivos adjuntos a este mensaje.



Responder