Movimiento de celda acriva en planilla filtrada

05/11/2008 - 16:02 por puntero ubicacion | Informe spam
Tengo una hja que contiene datos.
Cuando le pongo Autofiltro y selecciono una codicion, "desaparecen" ciertas
filas.
Ahora bien, cuando en una macro quiero recorrer las distintas filas , la
instruccion Activecell.Offset(1,0).Select hace que se recorran TODAS las
filas, aun las filtradas.

Fui claro? Como hago para que la celda activa se coloque solamente en las
celdas visibles cuando tengo un filtro colocado?

Gracias
Juan Carlos

Preguntas similare

Leer las respuestas

#1 Juan M
05/11/2008 - 17:09 | Informe spam
Hola Juan Carlos,

Revisa la ayuda sobre SpecialCells(xlVisible).

Si tienes dudas de como aplicarlo, es conveniente que expongaas la macro que
estás empleando y lo que esperas que haga para poder indicarte alguna otra
opción.

Un saludo,
Juan


"puntero ubicacion" escribió
Tengo una hja que contiene datos.
Cuando le pongo Autofiltro y selecciono una codicion, "desaparecen"
ciertas
filas.
Ahora bien, cuando en una macro quiero recorrer las distintas filas , la
instruccion Activecell.Offset(1,0).Select hace que se recorran TODAS las
filas, aun las filtradas.

Fui claro? Como hago para que la celda activa se coloque solamente en las
celdas visibles cuando tengo un filtro colocado?

Gracias
Juan Carlos

Respuesta Responder a este mensaje
#2 puntero ubicacion
06/11/2008 - 12:53 | Informe spam
Gracias Juan M por la respuesta.
La verdad es que no entendi como solucionarlo.

La macro que estoy haciendo es, basicamente, algo asi:


Range("B19:J29").Select
Selection.ClearContents
Range("C10").Select
While ActiveCell.Value <> ""
fila = ActiveCell.Row
var1 = Cells(fila, 3)
var2 = Cells(fila, 4)
var3 = Cells(fila, 5)
var4 = Cells(fila, 6)
var5 = Cells(fila, 7)
var6 = Cells(fila, 8)
Cells(fila + 10, 3) = var1
Cells(fila + 10, 4) = var2
Cells(fila + 10, 5) = var3
Cells(fila + 10, 6) = var4
Cells(fila + 10, 7) = var5
Cells(fila + 10, 8) = var6
ActiveCell.Offset(1, 0).Select

Wend

FIN DE LA MACRO

Como veras, borra un area y luego lee lo que hay en las celdas C10 hasta H10
y luego lo va repitiendo hasta que encuentra una celda vacia.
El tema es que si los datos tienen un autofiltro, cuando hace el
activecell.offset pasa el control a una celda que puede estar oculta porque
no quiero que aparezca.
No se si soy claro.

Podran ayudarme?
Gracias
JC



"Juan M" escribió:

Hola Juan Carlos,

Revisa la ayuda sobre SpecialCells(xlVisible).

Si tienes dudas de como aplicarlo, es conveniente que expongaas la macro que
estás empleando y lo que esperas que haga para poder indicarte alguna otra
opción.

Un saludo,
Juan


"puntero ubicacion" escribió
> Tengo una hja que contiene datos.
> Cuando le pongo Autofiltro y selecciono una codicion, "desaparecen"
> ciertas
> filas.
> Ahora bien, cuando en una macro quiero recorrer las distintas filas , la
> instruccion Activecell.Offset(1,0).Select hace que se recorran TODAS las
> filas, aun las filtradas.
>
> Fui claro? Como hago para que la celda activa se coloque solamente en las
> celdas visibles cuando tengo un filtro colocado?
>
> Gracias
> Juan Carlos
>



Respuesta Responder a este mensaje
#3 Juan M
06/11/2008 - 14:41 | Informe spam
Hola Juan Carlos,

Unos comentarios habituales cuando haces macros, en la mayoría de las
ocasiones no es necesario seleccionar las celdas, rangos, hojas para hacer
las cosas.
En el caso que nos presentas tampoco sería necesario asignar a una variable
el valor de una celda para luego esa variable escribirla en una celda,
simplemente escribe en la celda destino lo que tiene la celda origen:

var6 = Cells(fila, 8)
Cells(fila + 10, 8) = var6



por:

Cells(fila + 10, 8) = Cells(fila, 8)



A mi, personalmente, me gusta declarar las variables y forzar además su
declaración (Option Explicit).

Si solo quieres copiar tus datos, filtrados o no, de un sitio a otro sin
modificar el orden o realizar ningún tipo de operación, me parece más simple
copiar las celdas visibles y pegarlas donde corresponda.

Algo así,

Sub test2()
Range("B19:J" & Range("B29").End(xlDown).Row).ClearContents
Range("c10:h" &
Range("C10").End(xlDown).Row).SpecialCells(xlCellTypeVisible).Copy
Range("c20")
End Sub

Si de todas formas prefieres hacerlo por medio de un bucle, nos lo comentas.

Un saludo,
Juan


"puntero ubicacion" escribió
Gracias Juan M por la respuesta.
La verdad es que no entendi como solucionarlo.

La macro que estoy haciendo es, basicamente, algo asi:


Range("B19:J29").Select
Selection.ClearContents
Range("C10").Select
While ActiveCell.Value <> ""
fila = ActiveCell.Row
var1 = Cells(fila, 3)
var2 = Cells(fila, 4)
var3 = Cells(fila, 5)
var4 = Cells(fila, 6)
var5 = Cells(fila, 7)
var6 = Cells(fila, 8)
Cells(fila + 10, 3) = var1
Cells(fila + 10, 4) = var2
Cells(fila + 10, 5) = var3
Cells(fila + 10, 6) = var4
Cells(fila + 10, 7) = var5
Cells(fila + 10, 8) = var6
ActiveCell.Offset(1, 0).Select

Wend

FIN DE LA MACRO

Como veras, borra un area y luego lee lo que hay en las celdas C10 hasta
H10
y luego lo va repitiendo hasta que encuentra una celda vacia.
El tema es que si los datos tienen un autofiltro, cuando hace el
activecell.offset pasa el control a una celda que puede estar oculta
porque
no quiero que aparezca.
No se si soy claro.

Podran ayudarme?
Gracias
JC



"Juan M" escribió:

Hola Juan Carlos,

Revisa la ayuda sobre SpecialCells(xlVisible).

Si tienes dudas de como aplicarlo, es conveniente que expongaas la macro
que
estás empleando y lo que esperas que haga para poder indicarte alguna
otra
opción.

Un saludo,
Juan


"puntero ubicacion" escribió
> Tengo una hja que contiene datos.
> Cuando le pongo Autofiltro y selecciono una codicion, "desaparecen"
> ciertas
> filas.
> Ahora bien, cuando en una macro quiero recorrer las distintas filas ,
> la
> instruccion Activecell.Offset(1,0).Select hace que se recorran TODAS
> las
> filas, aun las filtradas.
>
> Fui claro? Como hago para que la celda activa se coloque solamente en
> las
> celdas visibles cuando tengo un filtro colocado?
>
> Gracias
> Juan Carlos
>



Respuesta Responder a este mensaje
#4 Juan M
06/11/2008 - 14:50 | Informe spam
Hola de nuevo,

Por si acaso tienes problemas con los saltos de línea repito la macro:

Sub test2()
Range("B19:J" & Range("B29").End(xlDown).Row).ClearContents
Range("c10:h" & _
Range("C10").End(xlDown).Row).SpecialCells(xlCellTypeVisible).Copy _
Range("c20")
End Sub

Un saludo,
Juan

"Juan M" escribió
Hola Juan Carlos,

Unos comentarios habituales cuando haces macros, en la mayoría de las
ocasiones no es necesario seleccionar las celdas, rangos, hojas para hacer
las cosas.
En el caso que nos presentas tampoco sería necesario asignar a una
variable el valor de una celda para luego esa variable escribirla en una
celda, simplemente escribe en la celda destino lo que tiene la celda
origen:

var6 = Cells(fila, 8)
Cells(fila + 10, 8) = var6



por:

Cells(fila + 10, 8) = Cells(fila, 8)



A mi, personalmente, me gusta declarar las variables y forzar además su
declaración (Option Explicit).

Si solo quieres copiar tus datos, filtrados o no, de un sitio a otro sin
modificar el orden o realizar ningún tipo de operación, me parece más
simple copiar las celdas visibles y pegarlas donde corresponda.

Algo así,

Sub test2()
Range("B19:J" & Range("B29").End(xlDown).Row).ClearContents
Range("c10:h" &
Range("C10").End(xlDown).Row).SpecialCells(xlCellTypeVisible).Copy
Range("c20")
End Sub

Si de todas formas prefieres hacerlo por medio de un bucle, nos lo
comentas.

Un saludo,
Juan


"puntero ubicacion" escribió
Gracias Juan M por la respuesta.
La verdad es que no entendi como solucionarlo.

La macro que estoy haciendo es, basicamente, algo asi:


Range("B19:J29").Select
Selection.ClearContents
Range("C10").Select
While ActiveCell.Value <> ""
fila = ActiveCell.Row
var1 = Cells(fila, 3)
var2 = Cells(fila, 4)
var3 = Cells(fila, 5)
var4 = Cells(fila, 6)
var5 = Cells(fila, 7)
var6 = Cells(fila, 8)
Cells(fila + 10, 3) = var1
Cells(fila + 10, 4) = var2
Cells(fila + 10, 5) = var3
Cells(fila + 10, 6) = var4
Cells(fila + 10, 7) = var5
Cells(fila + 10, 8) = var6
ActiveCell.Offset(1, 0).Select

Wend

FIN DE LA MACRO

Como veras, borra un area y luego lee lo que hay en las celdas C10 hasta
H10
y luego lo va repitiendo hasta que encuentra una celda vacia.
El tema es que si los datos tienen un autofiltro, cuando hace el
activecell.offset pasa el control a una celda que puede estar oculta
porque
no quiero que aparezca.
No se si soy claro.

Podran ayudarme?
Gracias
JC



"Juan M" escribió:

Hola Juan Carlos,

Revisa la ayuda sobre SpecialCells(xlVisible).

Si tienes dudas de como aplicarlo, es conveniente que expongaas la macro
que
estás empleando y lo que esperas que haga para poder indicarte alguna
otra
opción.

Un saludo,
Juan


"puntero ubicacion" escribió
> Tengo una hja que contiene datos.
> Cuando le pongo Autofiltro y selecciono una codicion, "desaparecen"
> ciertas
> filas.
> Ahora bien, cuando en una macro quiero recorrer las distintas filas ,
> la
> instruccion Activecell.Offset(1,0).Select hace que se recorran TODAS
> las
> filas, aun las filtradas.
>
> Fui claro? Como hago para que la celda activa se coloque solamente en
> las
> celdas visibles cuando tengo un filtro colocado?
>
> Gracias
> Juan Carlos
>









Respuesta Responder a este mensaje
#5 puntero ubicacion
06/11/2008 - 15:16 | Informe spam
o que sucede es que en realidad copio a otra hoja, o sea,

> var6 = Cells(fila, 8)


sheets("otrahoja").select
> Cells(fila + 10, 8) = var6



Pero creo que lo mas practico termina siendo copiar directamente, no es
cierto?
Ya que estamos te hago una pregunta :
Yo quiero que el usuario ingrese un nombre y ese nombre sea el nombre de una
nueva hoja que se abre.
Existe en VBA algo similar al & que se utiliza en las planilla de excel?

Gracias
JC





"Juan M" escribió:

Hola Juan Carlos,

Unos comentarios habituales cuando haces macros, en la mayoría de las
ocasiones no es necesario seleccionar las celdas, rangos, hojas para hacer
las cosas.
En el caso que nos presentas tampoco sería necesario asignar a una variable
el valor de una celda para luego esa variable escribirla en una celda,
simplemente escribe en la celda destino lo que tiene la celda origen:

> var6 = Cells(fila, 8)
> Cells(fila + 10, 8) = var6

por:

> Cells(fila + 10, 8) = Cells(fila, 8)

A mi, personalmente, me gusta declarar las variables y forzar además su
declaración (Option Explicit).

Si solo quieres copiar tus datos, filtrados o no, de un sitio a otro sin
modificar el orden o realizar ningún tipo de operación, me parece más simple
copiar las celdas visibles y pegarlas donde corresponda.

Algo así,

Sub test2()
Range("B19:J" & Range("B29").End(xlDown).Row).ClearContents
Range("c10:h" &
Range("C10").End(xlDown).Row).SpecialCells(xlCellTypeVisible).Copy
Range("c20")
End Sub

Si de todas formas prefieres hacerlo por medio de un bucle, nos lo comentas.

Un saludo,
Juan


"puntero ubicacion" escribió
> Gracias Juan M por la respuesta.
> La verdad es que no entendi como solucionarlo.
>
> La macro que estoy haciendo es, basicamente, algo asi:
>
>
> Range("B19:J29").Select
> Selection.ClearContents
> Range("C10").Select
> While ActiveCell.Value <> ""
> fila = ActiveCell.Row
> var1 = Cells(fila, 3)
> var2 = Cells(fila, 4)
> var3 = Cells(fila, 5)
> var4 = Cells(fila, 6)
> var5 = Cells(fila, 7)
> var6 = Cells(fila, 8)
> Cells(fila + 10, 3) = var1
> Cells(fila + 10, 4) = var2
> Cells(fila + 10, 5) = var3
> Cells(fila + 10, 6) = var4
> Cells(fila + 10, 7) = var5
> Cells(fila + 10, 8) = var6
> ActiveCell.Offset(1, 0).Select
>
> Wend
>
> FIN DE LA MACRO
>
> Como veras, borra un area y luego lee lo que hay en las celdas C10 hasta
> H10
> y luego lo va repitiendo hasta que encuentra una celda vacia.
> El tema es que si los datos tienen un autofiltro, cuando hace el
> activecell.offset pasa el control a una celda que puede estar oculta
> porque
> no quiero que aparezca.
> No se si soy claro.
>
> Podran ayudarme?
> Gracias
> JC
>
>
>
> "Juan M" escribió:
>
>> Hola Juan Carlos,
>>
>> Revisa la ayuda sobre SpecialCells(xlVisible).
>>
>> Si tienes dudas de como aplicarlo, es conveniente que expongaas la macro
>> que
>> estás empleando y lo que esperas que haga para poder indicarte alguna
>> otra
>> opción.
>>
>> Un saludo,
>> Juan
>>
>>
>> "puntero ubicacion" escribió
>> > Tengo una hja que contiene datos.
>> > Cuando le pongo Autofiltro y selecciono una codicion, "desaparecen"
>> > ciertas
>> > filas.
>> > Ahora bien, cuando en una macro quiero recorrer las distintas filas ,
>> > la
>> > instruccion Activecell.Offset(1,0).Select hace que se recorran TODAS
>> > las
>> > filas, aun las filtradas.
>> >
>> > Fui claro? Como hago para que la celda activa se coloque solamente en
>> > las
>> > celdas visibles cuando tengo un filtro colocado?
>> >
>> > Gracias
>> > Juan Carlos
>> >
>>
>>
>>



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida