> Necesito ocultar las filas de una hoja, sujetas a la siguiente condicion
> por ejemplo si en la fila 4 la celda AB4 >0, se oculta si no se muestra y asi las demas filas
> fila 30, AB30>0, se oculta, si no se muestra.-
1) toma nota que al modificar las propiedades de un rango por codigo, se pierde el beneficio del deshacer, undo, ctrl+Z :-((
2) tambien deberas decidir si las siguientes lineas las usas [p.e.] en el evento '_calculate' de *esa* hoja...
o las dejas en una macro que sea ejecutada a voluntad/discrecion/necesidad/... -?-
Dim Celda As Range
For Each Celda In Range("ab4,ab30")
Celda.EntireRow.Hidden = Celda = 0
Next
3) si necesitas incluir otras celdas... [ya sabes cual linea modificar] :))
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
>> por ejemplo si en la fila 4 la celda AB4 >0, se oculta si no se muestra y asi las demas filas
>> fila 30, AB30>0, se oculta, si no se muestra.-
> Dim Celda As Range
> For Each Celda In Range("ab4,ab30")
> Celda.EntireRow.Hidden = Celda = 0
> Next
modifica: Celda = 0
por: -> Celda > 0
saludos,
hector.
"Héctor Miguel" escribió:
"Rew" escribió:
Algo debo estar haciendo mal con tu fórmula, con esta fórmula funciona solo
para una línea
Private Sub Worksheet_Change(ByVal Target As Range)
With Rows(20)
If Range("C15") = 0 Then _
.Hidden = True Else _
.Hidden = False
End With
End Sub
Sobre esta base, que es lo que debo cambiar, para que me lo haga en todas
las filas de una hoja de trabajo.-
Gracias de nuevo.-
SDS
Richard
> Algo debo estar haciendo mal con tu formula, con esta formula funciona solo para una linea
> Private Sub Worksheet_Change(ByVal Target As Range)
> With Rows(20)
> If Range("C15") = 0 Then _
> .Hidden = True Else _
> .Hidden = False
> End With
> End Sub
> Sobre esta base, que es lo que debo cambiar, para que me lo haga en todas las filas de una hoja de trabajo.-
[primero]: definir si vas a necesitar que el codigo de des/ocultamiento de filas se auto-ejecute con el evento '_change'
- que es el que se dispara cuando se hacen cambios en celda/s de esa hoja
[OJO: NO es el mismo que cuando sus valores se actualizan por efectos de formulas en algun re/calculo del modelo]
[segundo]: definir si *efectivamente* pretendes aplicarlo a TODAS las filas de una hoja [65000 97/2003 un millon xl-2007] -???-
[tercero]: considerar que es necesario des/re/ocultar las filas *caminando* celda-por-celda de la columna que *decide* <= OJO
comentas [si hubiera] algun detalle *en el tintero* ?
saludos,
hector.
1º agradecer tu disposición.-
Disculpa mi desconocimiento pero recien empiezo en macro y estoy muy
ilusionado pero mucho más es lo perdido que estoy.-
1- Necesitaría, disculpa mi insistencia, que me escribas como ejemplo la
fórmula completa, para que en una hoja de trabajo, la fila 4 se oculte con la
celda c4>0, la fila 5 con c5>0 ycomo ejemplo seguir asi hasta la fila 10 con
C10 (eso es constante),para poderla copiar, desde ahi me animno a
desentrañarla y modificarla.-
2- Otro problema que tengo es que las celdas C (4,5,6,7...)no son en
realidad 0 sino estan copiadas de otra hoja con la sig fórmula "=+Master!F10"
(master es la hoja 3) y me toma ocultar y luego no mostrar, si aplico el nº
es decir 0 y 1 como ejemplo, funciona perfecto con la fórmula que te pase,
tomadas cito la fuente de un diálogo entre Joan e Ivan de esta comunidad
El punto 2 me gustaría buscarle la solucion solo, de no llegar a buen puerto
te pediría auxilio, pero si me das la pista del 1er punto puedo empezar a
buscar como hacer todo el desarrollo.-
Un fuerte abrazo
Richard
> Disculpa mi desconocimiento pero recien empiezo en macro y estoy muy ilusionado pero mucho mas es lo perdido que estoy.-
=> [hasta donde se]... no se piden disculpas en los grupos por no saber
el que no pregunta [de alguna manera]... tampoco aprende [de ninguna] ;)
> 1- Necesitaria... como ejemplo la formula completa, para que en una hoja de trabajo
> la fila 4 se oculte con la celda c4>0, la fila 5 con c5>0 y como ejemplo seguir asi hasta la fila 10 con C10
> (eso es constante), para poderla copiar, desde ahi me animno a desentra#arla y modificarla.-
>
> 2- Otro problema que tengo es que las celdas C (4,5,6,7...) no son en realidad 0 sino estan copiadas de otra hoja
> con la sig formula "=+Master!F10" (master es la hoja 3) y me toma ocultar y luego no mostrar
> si aplico el nº es decir 0 y 1 como ejemplo, funciona perfecto con la formula que te pase
> tomadas cito la fuente de un dialogo entre Joan e Ivan de esta comunidad
>
> El punto 2 me gustaria buscarle la solucion solo, de no llegar a buen puerto te pediria auxilio
> pero si me das la pista del 1er punto puedo empezar a buscar como hacer todo el desarrollo.-
conociendo que en la columna 'C' [o la que sea en realidad] tienes formulas que toman su vinculo de otra hoja
te sugiero usar el evento '_calculate' en el modulo de codigo de *esa* hoja
-> click-secundario sobre la etiqueta con su nombre... -> selecciona del menu contextual: -> ver codigo
esto te lleva al editor de vba y [precisamente] al modulo de codigo de esa hoja
basado en la propuesta primera [y los comentarios de la anterior], copia/pega las siguientes lineas en ese modulo:
Private Sub Worksheet_Calculate()
Dim Celda As Range
For Each Celda In Range(Range("c4"), Range("c4").End(xlDown))
Celda.EntireRow.Hidden = Celda > 0
Next
End Sub
si en la columna 'C' existen celdas *vacias* antes de llegar a la ultima celda *realmente* ocupada...
cambia la instruccion For Each a...
For Each Celda In Range(Range("c4"), Range("c65536").End(xlUp))
cierra el editor, regresa a excel, y prueba haciendo modificaciones a la hoja que genera cambios originalmente [Master]
OJO: no te olvides que estaras *perdiendo* la posibilidad del des-hacer, undo, ctrl+Z :-((
Gracias otra vez, trabajo con ello y te comento.-
Un Abrazo
Richard
Al hacerlo se generar un conflicto, comienza a hacer la gestión, inclusive
oculto alguna gila en algun caso, pero el programa pasa a no responder, con
ambas fórmulas, parpadea la pantalla y lo cerre desde el administrador.-
si yo quisiera hacerlo para las filas 5 con C5, 6 con C6,......, hasta la 10
con C10
que debería modificar
Private Sub Worksheet_Calculate()
Dim Celda As Range
For Each Celda In Range(Range("c5"), Range("c5").End(xlDown))
Celda.EntireRow.Hidden = Celda > 0
Next
End Sub
si en la columna 'C' existen celdas *vacias* antes de llegar a la ultima
celda *realmente* ocupada...
OTRA EN REALIDAD SE ALTERNAN ES DECIR PUEDE HABER 3 VACIAS FILA 5 A 8, 2
COMPLETAS 9 A 12 Y ASI, TODAS ELLAS CON LA FORMULA =+MASTER!C5 en C5,
=+MASTER!C6 en C6.......
Private Sub Worksheet_Calculate()
Dim Celda As Range
For Each Celda In Range(Range("c5"), Range("c5").End(xlDown))
Celda.EntireRow.Hidden = Celda > 0
Next
End Sub
No quisiera llegar a la última fila de la hoja, si no acotarlo hasta la fila
20 o 100, que debría cambiar.-
Gracias, otra vez, un abrazo
Richard
__ 1 __
> Al hacerlo se generar un conflicto, comienza a hacer la gestion, inclusive oculto alguna gila en algun caso
> pero el programa pasa a no responder, con ambas formulas, parpadea la pantalla y lo cerre desde el administrador.-
1) esto es probable que se deba a que tu modelo realiza re/calculos *exhaustivos* [quizas] por muchas formulas ???
__ 2 __
> si yo quisiera hacerlo para las filas 5 con C5, 6 con C6,......, hasta la 10 con C10 que deberia modificar
> Private Sub Worksheet_Calculate()
> Dim Celda As Range
> For Each Celda In Range(Range("c5"), Range("c5").End(xlDown))
> Celda.EntireRow.Hidden = Celda > 0
> Next
> End Sub
2) si solo necesitas *monitorear* las celdas del rango 'C5:C10' solo necesitas indicarlo en la linea del For Each...
For Each Celda In Range("c5:c10")
__ 3 __
> OTRA EN REALIDAD SE ALTERNAN ES DECIR PUEDE HABER 3 VACIAS FILA 5 A 8, 2 COMPLETAS 9 A 12 Y ASI
> TODAS ELLAS CON LA FORMULA =+MASTER!C5 en C5, =+MASTER!C6 en C6.......
> No quisiera llegar a la ultima fila de la hoja, si no acotarlo hasta la fila 20 o 100, que debria cambiar.-
3) varias alternativas [aunque no es muy claro eso de: "celdas vacias... todas ellas con formulas..." ???]:
a) usar la forma primera de la propuesta anterior ?
OJO: NO selecciona todas las filas, solo *avanza* desde la ultima *vacia* a la ultima *ocupada*
-> For Each Celda In Range(Range("c4"), Range("c65536").End(xlUp))
b) condicionar el codigo para que solo se aplique a celdas con formulas ?
-> For Each Celda In Range(Range("c4"), Range("c65536").End(xlUp)).SpecialCells(xlCellTypeFormulas)
c) en lugar de usar el evento '_calculate' de la hoja que tiene formulas vinculadas a la hoja *Master*...
usar el evento '_change' de la hoja *Master* para ocultar las filas *espejo* en la otra hoja -?-
[me parece que empiezan a *salir algnos detalles que estaban en el tintero* ?]
A ver si te puedo mostrar toda la película para clarificarlo lo más posible
Hay una hoja de cálculo en la hoja 5 que di por llamar Master, con formatos
condicionales y fórmulas del tipo (=si) con distintos cálculos que se activan:
1 al poner la fecha de la orden de compra
2 al poner la fecha de compra
3 al poner la fecha de la orden de venta
4 al poner la fecha de venta
Con formato condicional pinto toda la fila de naranja para visualmente saber
que se cerro, hasta este punto, todo bien para mi, pero la planilla creció y
las distintas operaciones me fueron quedando separadas entre varias filas
naranjas, con lo que, a pesar de estar sin color, se me dificulta
visualizarlas para poder trabajar con el conjunto de las filas que están
activas.-
Por ello se me ocurrió crear una segunda planilla a la que llame run2 en la
hoja 5, donde solo aparecieran las filas que yo necesito ver y que tienen en
común que la fecha de venta no existe en Master, dichas celdas están
vírgenes, ya que todas las fórmulas en master se van activando a partir de
que en esas celdas se coloque un nº mayor que 0, para el caso al fecha.-
En “run2” yo copie los formatos condicionales y la fórmula
(=+Master!B5,……, =+Master!AZ5), extendiéndolas hasta la fila 200
(=+Master!B200,……, =+Master!AZ200) y aaqui aparece m necesidad de poder
ocultar las filas donde en “MasterU5” en adelante el nº sea mayor que 0,
donde en “Run2”, está la formula (=+master!U5) con valor 0 ( que a lo mejor
pude generar conflicto )
Esto se repite en U6, U7, hasta U 200 como ejemplo.-
Otro concepto sería que run2 tome de Master, solo las filas cuyo vas valores
en la celda U5 en más sea distinto de 0.-
Y que me traslade todos los cambios que vaya incorporando.-
Creo haber expuesto todo.-
Desde ya, gracias y un Abrazo
Richard
__ 1 __
> A ver si te puedo mostrar toda la pelicula para clarificarlo lo mas posible
> ... hoja de calculo... Master, con formatos condicionales y formulas del tipo (=si) con distintos calculos que se activan:
> 1 al poner la fecha de la orden de compra
> 2 al poner la fecha de compra
> 3 al poner la fecha de la orden de venta
> 4 al poner la fecha de venta
> ... pinto toda la fila... para visualmente saber que se cerro... la planilla crecio y las... operaciones me fueron quedando separadas
> ... a pesar de estar sin color, se me dificulta visualizarlas para poder trabajar con... las filas que estan activas.-
__ 2 __
> ... se me ocurrio crear una segunda planilla... donde solo aparecieran las filas que yo necesito ver
> ... tienen en comun que la fecha de venta no existe en Master, dichas celdas estan virgenes
> ... todas las formulas en master se van activando a partir de que en esas celdas se coloque un nº mayor que 0, para el caso al fecha.-
> ... copie los formatos condicionales y la formula (=+Master!B5,... =+Master!AZ5)
> extendiendolas hasta la fila 200 (=+Master!B200,... =+Master!AZ200) y aqui aparece mi necesidad de
> ... ocultar las filas donde en 'MasterU5' en adelante el nº sea mayor que 0
> ... en 'Run2', esta la formula (=+master!U5) con valor 0 (que a lo mejor pude generar conflicto)... se repite en U6, U7, hasta U 200 [...]
te paso algunos comentarios.. de atras... pa'lante [la del final es otra propuesta que -creo- vale la pena de probar] ;)
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
2) [creo que] estamos hablando de [~10,000] *demasiadas* formulas con vinculos *reciprocos* [cambios en una hoja afectan a la otra]
toma en cuenta que existen varias *acciones* [autofiltros, modificacion y/o entrada de datos nuevos, alto/ancho de fila/columna]
que *disparan* eventos [como el '_calculate', '_change', '_selectionchange', etc.]
1) por que no intentas usar los autofiltros [o los filtros avanzados] para mostrar solo las filas que estan activas ?
mantendras una sola hoja, evitando hojas adicionales con muchas/demasiadas celdas *espejo* y formulas de re/calcuos exhaustivos
Gracias a tu ayuda, creo haber logrado el objetivo
Un abrazo enorme
Richard