Otra posibilidad (inspirada en el aporte de Ivan), podría ser que expandieras
la selección a la región actual, seleccionaras las celdas visibles, y luego
dentro de las áreas que hayan sido seleccionadas, busques la próxima a la
posición original.
Aquí está el código:
Sub SiguienteFila()
On Error GoTo Fuera
Dim f, c As Long
'Desactivo la actualización de pantalla para hacer más rápido el código
Application.ScreenUpdating = False
'Detecto la fila y columna de la celda activa
f = ActiveCell.Row
c = ActiveCell.Column
'Selecciono la región actual y sus celdas visibles
Set Tbl = ActiveCell.CurrentRegion
Tbl.Select
Selection.SpecialCells(xlCellTypeVisible).Select
'Recorro todas las áreas hasta encontrar la siguiente a la celda original
For Each a In Selection.Areas
If a.Row > f Then Exit For
Next
'Selecciono la celda encontrada y reactivo la actualización de pantalla
Cells(a.Row, c).Select
Application.ScreenUpdating = True
Exit Sub
Fuera:
'Se produce error cuando se llega a la última fila
Cells(f, c).Select
Application.ScreenUpdating = True
End Sub
El problema que veo, es que bajo este método hay que recorrer todas las
áreas (es decir filas) que tu filtro haya dejado en pantalla (2 al menos).
Si estas filas son pocas, excelente, el procedimiento trabaja bastante
rápido, pero si son muchas, caemos en el problema original: será muy lento,
principalmente con los últimos datos.
Bueno, aquí te lo dejo para que lo evalúes. En todo caso, puedes utilizar
Selection.Areas.Count para determinar si el número de áreas justifica este
método, y con un poco de trabajo, podrías agregarle algunas condiciones para
decidir por uno o por el otro.
Espero que te sirva. Siempre comentas.
- - - - - -
Post by emailDavid gracias por tu respuesta, pero existe otra alternativa?, la idea es que
en algunos casos hay entre una celda y otra, unas 10 o 15 mil celdas ocultas
y este proceso se demora mucho por este lado.
Post by DavidCuando aplicas filtros, las celdas se ocultan aplicándoles un ancho cero.
Por eso los métodos convencionales no te funcionan en VBA. Prueba con las
Do
ActiveCell.Offset(1, 0).Select
Loop Until ActiveCell.Height > 0
Saludos.
- - - - - -
Post by emailQuiero realizar una macro que filtra los datos no vacios de un columna, luego
enpieza a recorrer celda por celda verticalmente para copiarlos en diferentes
partes, pero no encuentro la instruccion que me haga desplazarme celda por
celda en una columna(verticalmente) con datos filtrados