Usar Filtros Avanzados desde controles en un UserForm para obtener determinados registros en una hoja y trasladarlos a un control ListBox en el mismo UserForm

22/09/2008 - 22:49 por Contaduria | Informe spam
Hola Gente del Foro:

Como estan? Espero que bien. Tengo el siguiente problema para resolver.
Supongamos que en un libro exista una hoja llamada "Datos", que tenga la
siguiente tabla:

Nº Op. Centro de Costo Cuenta Importe
1 Administración Mantenimiento $ 1.000
2 Administración Mantenimiento $ 2.000
3 Depósito Fletes $ 1.000
4 Sucursal Fletes $ 1.000
5 Administración Impuestos $ 1.500
6 Depósito Fletes $ 3.000
7 Sucursal Fletes $ 1.000
8 Depósito Fletes $ 1.500
9 Depósito Mantenimiento $ 2.000

Supongamos también que tengo un UserForm en el cual tengo dos controles del
tipo ComboBox:
1) El ComboBox 1 tiene los items correspondientes a los Centros de Costo, en
el ejemplo: Administración, Depósito, Sucursal y Todos.
2) El ComboBox 2 tiene los items correspondientes a las Cuentas, en el
ejemplo: Mantenimiento, Fletes, Impuestos y Todos.

En el UserForm también existe un control del tipo ListBox. Lo que yo
necesito es que al seleccionar un item del Combo 1 y un item del Combo 2 se
carguen todos los registros que cumplan las condiciones al ListBox y además
el código agregue una línea más al final con la suma de todos los importes.

Ejemplo 1:
Selecciono "Administración" en el ComboBox 1
Selecciono "Mantenimiento" en el ComboBox 2
Resultado: El ListBox muestra:
Nº Op. Centro de Costo Cuenta Importe
1 Administración Mantenimiento $ 1.000
2 Administración Mantenimiento $ 2.000
Total $
3.000

Ejemplo 2:
Selecciono "Depósito" en el ComboBox 1
Selecciono "Fletes" en el ComboBox 2
Resultado: El ListBox muestra:
Nº Op. Centro de Costo Cuenta Importe
3 Depósito Fletes $ 1.000
6 Depósito Fletes $ 3.000
8 Depósito Fletes $ 1.500
Total $
5.500

Ejemplo 3:
Selecciono "Todos" en el ComboBox 1
Selecciono "Fletes" en el ComboBox 2
Resultado: El ListBox muestra:
Nº Op. Centro de Costo Cuenta Importe
3 Depósito Fletes $ 1.000
4 Sucursal Fletes $ 1.000
6 Depósito Fletes $ 3.000
7 Sucursal Fletes $ 1.000
8 Depósito Fletes $ 1.500
Total $
7.500

Ejemplo 4:
Selecciono "Administración" en el ComboBox 1
Selecciono "Todos" en el ComboBox 2
Resultado: El ListBox muestra:
Nº Op. Centro de Costo Cuenta Importe
1 Administración Mantenimiento $ 1.000
2 Administración Mantenimiento $ 2.000
5 Administración Impuestos $ 1.500
Total $
4.500

Sospecho que debe poder hacerse con los filtros avanzados (AdvancedFilter),
pero no se como manejarlos. La unica manera que intenté para resolverlo es
haciendo varios bucles del tipo For - Next en donde el código va comparando
celda por celda si cumple o no con las condiciones, pero la verdad que
funciona muy lento y queda un código excesivamente complejo. Estoy seguro
que con el AdvancedFilter se debe poder hacer mejor. Ayuda por favor!
Espero haya sido claro en mi exposición. Cualquier consulta estoy a su
disposición.
Saludos y desde ya muchas gracias.

Mariano

Preguntas similare

Leer las respuestas

#6 Ivan
25/09/2008 - 18:37 | Informe spam
hola Mariano,

creo que se me paso lo del total. Para ello [creo que] podrias
realizar la suma tras el filtrado y antes de la carga del listbox (no
lo he probado, pero supongo que el rowsource incluiria la fila sin
problemas) con algo asi (de memoria)=>

dim f as long
f = rDestino.currentregion.rows.count

with rDestino.parent

.cells(f + 1, 1) = "Total"
.cells(f + 2, 1) = application.sum(.rDestino.row + 1, f -
rdestino.row)

end with

aunque yo particularmente creo que preferiria 'adosar' un label (pej)
en la parte inferior (pej) del listbox, a modo del cuadro de total de
una factura

creo que te valdria tambien Sum


un saludo
Ivan

PD:
hace tiempo .. una solución de filtros avanzados, pero referida a ...





bueno, al menos todavia no chocheo. Me sonaban campanas :-)))
Respuesta Responder a este mensaje
#7 Ivan
25/09/2008 - 19:42 | Informe spam
sorry

sumale 1 =>


..Cells(f + 2, 1) = Application.Sum( _
.Range(.Cells(rDestino.Row + 1, 4), _
.Cells(f - rDestino.Row + 1, 4)))
Respuesta Responder a este mensaje
#8 Contaduria
27/09/2008 - 18:30 | Informe spam
Ivan:

Gracias por completar la solución con la suma. Con toda la ayuda que me has
dado en esta y otras ocasiones no puedo menos que invitarte un trago o una
cerveza... y a Hector Miguel también por supuesto.
Saludos!

Mariano

Insumos
Mar del Plata
(0223) 475-5511
Open Sports... elegí deporte!
www.opensports.com.ar



"Ivan" escribió en el mensaje
news:
sorry

sumale 1 =>


..Cells(f + 2, 1) = Application.Sum( _
.Range(.Cells(rDestino.Row + 1, 4), _
.Cells(f - rDestino.Row + 1, 4)))
Respuesta Responder a este mensaje
#9 Ivan
27/09/2008 - 22:00 | Informe spam
hola Mariano,

invitarte un trago o una
cerveza...



nunca se sabe, a veces las distancias se 'esfuman'. [aunque habria que
consultarle a mi higado :-DD]

y a Hector Miguel también por supuesto.



creo que Hector [si que] tendria para cogerse unas cuantas cogorzas
por esta via :-)

un saludo
Ivan
Respuesta Responder a este mensaje
#10 Héctor Miguel
28/09/2008 - 04:58 | Informe spam
hola, chicos !

por la parte que "me toca" (aunque no he tenido que ver en este hilo)...

muy agradecido... muy agradecido... y muy agradecido !!! :D

(pero sientanse "liberados", ya que aunque las distancias se "esfumen", soy abstemio) :))

saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida