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

#11 Ivan
28/09/2008 - 17:32 | Informe spam
por la parte que "me toca" (aunque no he tenido que ver en este hilo)...



pues por la que "me toca" a mi, creo que si que has tenido MUCHO [casi
todo] que ver (aun mas en lo que a los FFAA <y no me refiero a la
'soldadesca' :-D> se refiere). Thanks :-))

un saludo
Ivan

PD: Mariano, si quieres cambia en la asignacion al rango del criterio
el uso de 'Value' por el de 'Formula', que era lo que en realidad
queria poner. Aunque parece que Value tambien hace el apaño, quizas
pueda haber algo que al menos yo no controle y de problemas. Si no me
equivoco lo 'apropiado' es=>

rCriterio.Cells(2,1).Formula = .

tambien se me fue la 'plla' en el rango del primer mensaje sobre la
suma, pero en el 2º esta +/- corregido y supongo que ya te habras dado
cuenta
Respuesta Responder a este mensaje
#12 Contaduria
29/09/2008 - 22:58 | Informe spam
Ivan/Hector:

Modifiqué .Formula por .Value y funciona igual de bien. Y con respecto a la
suma puse un Label en el cual con cada evento Change de cada Combo "carga"
la sumatoria de los importes a su propiedad .Caption, asi:

Dim Suma as Double

Suma = Application.WorksheetFunction.Sum(Worksheets("Reportes") _
.Range("C2:C" & Worksheets("Reportes").[C65536].End(xlUp).Row))
lblImporte.Caption = Format(Suma, "#,#00.00")

Y con respecto a la invitación, no necesariamente tiene que ser una cerveza
o trago, sino algún jugo de frutas, gaseosa, o una cena o almuerzo. Como
sea, si alguna vez vienen a Mar del Plata, Argentina, serán bienvenidos por
su servidor que tan amablemente han ayudado tantas veces.
Muchas Gracias y Saludos.

Mariano

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



"Ivan" escribió en el mensaje
news:

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



pues por la que "me toca" a mi, creo que si que has tenido MUCHO [casi
todo] que ver (aun mas en lo que a los FFAA <y no me refiero a la
'soldadesca' :-D> se refiere). Thanks :-))

un saludo
Ivan

PD: Mariano, si quieres cambia en la asignacion al rango del criterio
el uso de 'Value' por el de 'Formula', que era lo que en realidad
queria poner. Aunque parece que Value tambien hace el apaño, quizas
pueda haber algo que al menos yo no controle y de problemas. Si no me
equivoco lo 'apropiado' es=>

rCriterio.Cells(2,1).Formula = .

tambien se me fue la 'plla' en el rango del primer mensaje sobre la
suma, pero en el 2º esta +/- corregido y supongo que ya te habras dado
cuenta
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida