Excel - Filtro en hoja para código

   
Vista:

Filtro en hoja para código

Publicado por José (39 intervenciones) el 19/11/2013 04:54:02
Hola,
tengo un problema con los filtros.
Rengo una hoja con digamos 500 filas.
Filtro estas filas y el filtro me da digamos 12
Quiero recuperar los datos de estas filas mediante código para hacer unos calculos pero no sé como.
La recuperación empieza en la fila 2, pero las filas no se siguen.



Como podeis ver la primera fila es bien 2 pero las otras no se siguen y deberias ser 3,4,5,... o bien como puedo recuperar esas filas mediante código?
gracias anticipadas
José
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana

Filtro en hoja para código

Publicado por Antoni Masana (265 intervenciones) el 19/11/2013 06:40:37
Hola José

En primer lugar para poner el autofiltro de forma correcta (el icono del embudo) debes seleccionar las columnas o colocarte el una celda de la cabecera y pulsar el icono de Filtro.

En la cabecera veras unos cuadros pequeñon con un triangulo con el vertice hacia abajo, Cuando cambia por un embudo es que se ha aplicado un filtro en esa columna pincha sobre el recuadro y en el desplegable marca la primera opción (seleccionar todo) para quitar el filtro.

Para poner y quitar el autofiltro desde codigo

1
2
Sheets("Hoja1").Select
Selection.AutoFilter

Para saber como se codifica determinada acción en una macro pon "Grabar Macro" y ejecuta la acción y después "Detener Macro".

Si no tienes experiencia con las macros empieza por acciones simples:

Macro1 - Activar Autofiltro.
Macro2 - Filtrar Columna.
Macro3 - Quitar filtro columna.
Macro4 - Quitar Autofiltro.

Porque si haces muchas cosas a la vez no sabras que hace la macro,

La grabadora no pone comentarios y algunas haciones tienen mucho codigo y te puedes perder.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Filtro en hoja para código

Publicado por José (39 intervenciones) el 19/11/2013 19:33:41
Hola Antoni Masana,
El objeto es poder filtrar por tantos valores distintos como se encuentres en la columna B.
Esto en realidad es para poder simular una tabla maestro/detalle de Access.
Tengo una hoja que es la parte maestro de Access y otra detalle que es la que muestro en el post y que es la parte detalle de Acccess.
La primera hoja no tiene filtro aplicado, pero si la segundo y funciona. Esta filtro lo aplico desde código.Me grabé la macro y la introduje en mi código con las modificaciones correspondientes.
Una vez aplicado el filtro tengo que copiar los datos que aparecen en ciertas columnas y llevarmelos a un formulario. El problema es que se donde tengo que enpezar (celda A2 o sea fila 2) pero despues no se como referenciar las otras filas pues de un filtro a otro cambian, pues me doy cuenta que los numeros de filas son los que se tienen en la hoja sin filtrar y yo necesito esos numeros de fila para recuperar los datos en los diferentes rangos.
Naturalmente puedo recorrar toda la hoja y solo copiar los datos correpondientes a la clave de filtro.
Si encuentro la clave pues ya estoy en la fila y copio, pero pienso que eso me consumirá mas tiempo en recorrer 10000 filas que en recorrer 20 filas.
Repito tengo 2 hojas con datos (H1 y H2), A cada fila de la hoja H1 le corresponden entre 10 y 20 filas de la hoja H2 cuya direccion no se conoce de antemano. Yo quiero recuperar por código esos datos de la hoha H2.
el código que tengo para el filtro y el orden es el siguiente:

Else
Select Case SAISIE.DISCIPLINE
Case "T": Sheets("AT").Activate
Case "P": Sheets("AP").Activate
Case "O": Sheets("AO").Activate
Case Else
Beep
MsgBox "Il faut choisir une discipline"
SAISIE.DISCIPLINE.SetFocus
Exit Sub
End Select
End If
'**********************************Filtre
'La hoha crece y el rango no puede ser fijo
NextRow = Application.WorksheetFunction.CountA(Range("A:A"))
'Aquí probablement me baste con S = "A2:A" & Trim$(Str$(NextRow))
S = "A2:CR" & Trim$(Str$(NextRow))
Selection.AutoFilter
ActiveSheet.Range(S).AutoFilter Field:=2, Criteria1:=SAISIE.IDACTIVEGP.Value
Range("C2").Select
ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear
ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:=Range("C2"), SortOn _
:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

With ActiveWorkbook.ActiveSheet.Sort
.SetRange Range(S)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

Saludos
José
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana

Filtro en hoja para código

Publicado por Antoni Masana (265 intervenciones) el 20/11/2013 07:42:58
Hola José

Como lo que ejecutas es una macro para copiar un número de filas variables de una hoja A a una hoja B me olvidaria de los filtros y haria lo siguiente en seudocodigo

1
2
3
4
5
6
7
8
9
10
Linea_Origen = Linea 2
Linea_Destino = Linea X
 
Mientras Linea_Origen en la Columna A de la Hoja_Origen tenga datos
   Si se cumplen las condiciones entonces
      Copia Linea_Origen Hoja_Origen a Linea_Destino Hoja_Destino
      Suma 1 a Linea_Destino
   Fin Si
   Suma 1 a Linea_Origen
Fin Mientras

Es más simple y más facil de manipular
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Filtro en hoja para código

Publicado por José (39 intervenciones) el 20/11/2013 21:46:37
Hola Antoni Masana,
por el momento es algo así como he hecho.Mi preocupación es que el programa se vuelva demasiado lento.
Gracias por tu colaboración
Saludos
José
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana

Filtro en hoja para código

Publicado por Antoni Masana (265 intervenciones) el 21/11/2013 07:24:14
Las macros del excel para ser lo que son, son bastantes rapidas.

Tengo un libro EXCEL que tiene un tamaño de 65MB y una hoja con 500.000 Files y las recorre en muy pocos segundos.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar