Mostrar datos filtrados en un listbox

01/09/2008 - 06:47 por Babel | Informe spam
Tengo datos de un movimiento de materiales asi:

a b c d e f g
h

1 Remanofactura 4 Entrada Proveedor 28/08/2007 Lleno Info
2 Remanofactura 6 Entrada Proveedor 28/08/2007 Lleno Info
3 Cambio de 4 Entrada Info 30/08/2007 Lleno Mercad
4 Cambio de 2 Salida Merc 30/08/2007 Vacio Infor
5 Cambio de 5 Entra Infor 07/09/2007 Lleno Cert
6 Cambio de 12 Salida Certam 07/09/2007 Vacio Info
7 Cambio de 6 Entra Info 10/09/2007 Lleno
Recep
8 Cambio de 1 Salida Recep 10/09/2007 Vacio Infor
9 Para Recarga 2 Salida Inform 05/09/2007 Vacio Proveedores
10 Recargado 2 Entrada Proveedor 10/09/2007 Lleno Infor
11 Para Recarga 1 Salida Inform 10/09/2007 Vacio Proveedor
12 Para Recarga 12 Salida Inform 07/09/2007 Vacio Proveedor

realizo el filtro por la columna G, asi:
ActiveSheet.Range("a1:h12").AutoFilter Field:=7, Criteria1:="Lleno"

hasta ahi todo muy bien, excel me hace el filtro personalizado, pero
ahora viene la pregunta. Como paso los resultados del filtro a un
listbox con titulo por VBA?

... Bueno la verdad es que he realizado varios ensayos y me funciona
uno el cual es el siguente:

seleccionar los campos visibles luego de generar el filtro automatico,
asi:

Selection.SpecialCells(xlCellTypeVisible).Select

luego copio esa seleccion, me ubico en otra hoja y los pego

Selection.Copy
Sheets("Reportes").Select 'Activa hoja de Reportes
Range("A1").Select
ActiveSheet.Paste

Luego voy a ese nueva hoja que pegue los resultados, paso de celda en
celda agregando los datos a una matriz, la cual despues agrego
a el listbox.

ReDim matriz(0 To Range(rango).Count - 1, 0 To 9) 'Dimenciona la
Matriz de los movimientos
Range("A2").Select
Do While ActiveCell.Value <> Empty 'Recorre la hoja para copiar datos
ala Matriz
For Col = 0 To 9
matriz(Fila, Col) = ActiveCell.Offset(0, Col) 'Agrega los valores
a la Matriz de movimientos
Next
Fila = Fila + 1
ActiveCell.Offset(1, 0).Select
Loop

listbox1.list=matriz ' Agrego datos de la natriz al listbox

Bueno .. la cuestion es que este codigo me funciona y me pone los
datos filtrados en un listbox. la cuestion es que cuando mis
movimientos son mas de 150 este codigo se demora mas de 42 segundos.
quisiera que me dijeran algo mas automatico o alguna otra forma de
mostrar mis datos filtrados

Muchas Gracias .. ! .. espero ser claro .. !
 

Leer las respuestas

#1 Juan M
01/09/2008 - 09:53 | Informe spam
Hola,

Si el problema es la demora, procura no seleccionar rangos, ni activaciones
de páginas y podrías evitar la copia de rangos de una hoja a otra, a menos
que sea imprescindible.

El siguiente código lo debes ajustar para tus datos, y las variables que
prefieras. En principio está para 3 columnas y el rango es hasta la fila 22.

Un saludo,
Juan

en el proceso donde cargues tus datos al list box

Dim celda As Range
Dim fila As Long
Dim i As Long, j As Long
Dim matriz()

fila = Range("A2:A22").SpecialCells(xlCellTypeVisible).Count - 1
ReDim matriz(fila, 2)
j = 0
For Each celda In Range("A2:A22").SpecialCells(xlCellTypeVisible)
For i = 0 To 2
matriz(j, i) = celda.Offset(, i)
Next i
j = j + 1
Next celda
ListBox1.List = matriz

Fin código




"Babel" escribió
Tengo datos de un movimiento de materiales asi:

a b c d e f g
h

1 Remanofactura 4 Entrada Proveedor 28/08/2007 Lleno Info
2 Remanofactura 6 Entrada Proveedor 28/08/2007 Lleno Info
3 Cambio de 4 Entrada Info 30/08/2007 Lleno Mercad
4 Cambio de 2 Salida Merc 30/08/2007 Vacio Infor
5 Cambio de 5 Entra Infor 07/09/2007 Lleno Cert
6 Cambio de 12 Salida Certam 07/09/2007 Vacio Info
7 Cambio de 6 Entra Info 10/09/2007 Lleno
Recep
8 Cambio de 1 Salida Recep 10/09/2007 Vacio Infor
9 Para Recarga 2 Salida Inform 05/09/2007 Vacio Proveedores
10 Recargado 2 Entrada Proveedor 10/09/2007 Lleno Infor
11 Para Recarga 1 Salida Inform 10/09/2007 Vacio Proveedor
12 Para Recarga 12 Salida Inform 07/09/2007 Vacio Proveedor

realizo el filtro por la columna G, asi:
ActiveSheet.Range("a1:h12").AutoFilter Field:=7, Criteria1:="Lleno"

hasta ahi todo muy bien, excel me hace el filtro personalizado, pero
ahora viene la pregunta. Como paso los resultados del filtro a un
listbox con titulo por VBA?

... Bueno la verdad es que he realizado varios ensayos y me funciona
uno el cual es el siguente:

seleccionar los campos visibles luego de generar el filtro automatico,
asi:

Selection.SpecialCells(xlCellTypeVisible).Select

luego copio esa seleccion, me ubico en otra hoja y los pego

Selection.Copy
Sheets("Reportes").Select 'Activa hoja de Reportes
Range("A1").Select
ActiveSheet.Paste

Luego voy a ese nueva hoja que pegue los resultados, paso de celda en
celda agregando los datos a una matriz, la cual despues agrego
a el listbox.

ReDim matriz(0 To Range(rango).Count - 1, 0 To 9) 'Dimenciona la
Matriz de los movimientos
Range("A2").Select
Do While ActiveCell.Value <> Empty 'Recorre la hoja para copiar datos
ala Matriz
For Col = 0 To 9
matriz(Fila, Col) = ActiveCell.Offset(0, Col) 'Agrega los valores
a la Matriz de movimientos
Next
Fila = Fila + 1
ActiveCell.Offset(1, 0).Select
Loop

listbox1.list=matriz ' Agrego datos de la natriz al listbox

Bueno .. la cuestion es que este codigo me funciona y me pone los
datos filtrados en un listbox. la cuestion es que cuando mis
movimientos son mas de 150 este codigo se demora mas de 42 segundos.
quisiera que me dijeran algo mas automatico o alguna otra forma de
mostrar mis datos filtrados

Muchas Gracias .. ! .. espero ser claro .. !

Preguntas similares