Saber celda que cambia

18/12/2005 - 12:48 por Principiante | Informe spam
Hola grupo.

En una hoja voy cambiando el color de fondo de una celda y hago una suma
de las celdas que poseen el mismo color de fondo.

El caso es que la función que hace esa suma se recalcula cada vez que se
produce un cambio del valor de alguna de las celdas con ese color. Para
que se recalculen cada vez que haya algún cambio en esa celda he puesto
en el evento de la hoja: Worksheet_SelectionChange la instrucción:
Application.CalculateFull

Lo que busco es saber como hacer para que sólo se recalcule todo cuando
se produzca un cambio de color en la celda donde voy cambiando el color
para sumar Ej: C2 pues sino se ejecuta cada vez que salgo de una celda
por ejemplo.

Supongo que se debe controlar el parámetro Target de la función pero no
sé como hacerlo.

Gracias por cualquier ayuda.

Principiante.

Preguntas similare

Leer las respuestas

#6 Principiante
19/12/2005 - 15:53 | Informe spam
Gracias por responder HECTOR.

El criterio es una simple prueba de ejemplo para ver como se podría
sumar esas celdas coloreadas. No poseen fórmulas ni nada sino
simplemente las pinté de color y quise ver cómo sumarlas.

Gracias por toda la información.

Principiante.

Héctor Miguel escribió:
hola, Principiante !

haciendo [o tratando de hacer] un 'resumen' de los puntos esenciales de tu consulta :D

1) en tus mensajes 1 y 2 comentas que...
'... voy cambiando el color de fondo de una celda y hago una suma de las... que poseen el mismo color...
'... Para que se recalculen cada vez que haya algun cambio en esa celda he puesto en el evento de la hoja:
'... Worksheet_SelectionChange la instruccion: Application.CalculateFull...
'... busco... que solo se recalcule todo cuando se produzca un cambio de color en la celda... para sumar Ej: C2 [...]

2) en tu mensaje 3 comentas que usando EL MISMO evento [con los codigos que expones]...
tampoco logras que se 'active' el re/calculo SOLO cuando modificas -> el color de la celda 'comando'

solamente 'adicionar' a lo ya comentado por KL, lo siguiente:
1) [hasta donde se] NO existe -> ningun evento que 'detecte' cambios a los formatos de las celdas
2) el evento '_selectionchange' se dispara -> cada vez que 'cambias' la seleccion 'activa' en la hoja del evento
3) en ambos casos [del codigo que expones]... el 'efecto' es el mismo, es decir...
solo se dispara el evento cuando el cambio de seleccion 'activa' NO ES la celda 'comando' [o sea, 'cualquiera' otra]
4) aunque usaras el evento -> '_change'... -> el punto 1 'impide' que los cambios de color sean 'detectados'

serviria bastante si expones el 'criterio' con el que se da/quita/cambia/... color a las celdas [comando y 'afectables']
si el criterio es 'discrecional'... podrias 'minimizar' [quizas evitar] el uso de funciones y codigos por vba...
-> si los detalles [que siguen 'en el tintero'] fueran 'sujetos para otros trucos/efectos/...' ;)

saludos,
hector.


Respuesta Responder a este mensaje
#7 Principiante
19/12/2005 - 15:55 | Informe spam
Gracias por responder KL.

Con tu información y la de Hector ya tengo suficiente.

Para saber el por qué se asigna te diré que no lo hay sino simple
curiosidad de saber como hacer la suma que planteaba.

Gracias de nuevo.

Principiante.

KL escribió:
Hola Principiante,

Este comportamiento es correcto (aunque no sea lo que buscas): si entras
en la celda (modo edicion) y luego sales se recalcularan todas las
formulas volatiles independientemente de si tengas algun procedimiento
asignado a algun evento. Y si, la variable Target del evento
Worksheet_SelectionChange se refiere al rango que se acaba de
seleccionar (lo que provoca el evento) no el que acabas de abandonar.

Insisto, creo que merece la pena replantear la tarea y analizar el 'por
que' se asigna (se ha asignado) un color determinado a cada una de las
celdas para usar este 'por que' como criterio de suma. Te evitarias
muchos dolores de cabeza. De hecho, creo que podrias crear un macro que
coloree las celdas segun el 'por que' y una formula que sume los valores
de las mismas sin en este ultimo caso recurrir al VBA.

Saludos,
KL


"Principiante" wrote in message
news:%23JTye%

He probado esto:

If Intersect(Target, [C2:C2]) Is Nothing Then
Else
Application.CalculateFull
MsgBox "Actualizo"
End If

El calculo de la suma se hace cuando ENTRO en la celda. Si estoy en la
celda, le cambio el color y salgo (o no salgo) de ella no se produce
ningún cambio (no actualiza).

Si pongo esto:

If Intersect(Target, [C2:C2]) Is Nothing Then
Application.CalculateFull
MsgBox "Actualizo"
Else
End If

Ahora si actuliza al SALIR de la celda C2 pero tambien lo hace de
cualquier otra celda de la hoja. No se lanza al ENTRAR en C2.

Principiante.

Principiante escribió:

Hola KL.

Es seguir el ejemplo que me ayudaste a completar en un pos anterior
al que me has respondido hace poco.

Tengo unas celdas con números A2:A12 con color de fondo distintos.

En la celda C2 cambio el color de esa celda y entonces en otra celda
cojo y obtengo la suma de las celdas que se encuentran en el rango
A2:A12 con ese color de fondo. Eso ya lo tengo.

Ahora me interesa que cuando cambie el color en la celda C2, se haga
la suma de forma automática pues no se actualiza la suma. He puesto
lo del Application.CalculateFull que comentaba pero eso se ejecuta
cava vez que cambio de celda por ej.

Voy a probar lo que comentas a ver que tal.

Gracias de nuevo.

Principiante.

KL escribió:

Hola Prinicpiante,

Suponiendo que las celdas que pueden cambiar de color pueden estar
en el rango [A2:A20], prueba empezar tu procedimiento con:

If Intersect(Target, [A2:A20]) Is Nothing Then Exit Sub

Suponiendo que las celdas que pueden cambiar de color pueden estar
en toda la columna [A] prueba empezar tu procedimiento con:

If Intersect(Target, [A:A]) Is Nothing Then Exit Sub

Y por cierto, si la asignacion de colores a las celdas se hace con
algun criterio racional, seguramente se podria evitar contar los
colores y contar esos casos que provocan la variacion de color.
Explicas mas detalles?

Saludos,
KL


"Principiante" wrote in message
news:%

Hola grupo.

En una hoja voy cambiando el color de fondo de una celda y hago una
suma de las celdas que poseen el mismo color de fondo.

El caso es que la función que hace esa suma se recalcula cada vez
que se produce un cambio del valor de alguna de las celdas con ese
color. Para que se recalculen cada vez que haya algún cambio en esa
celda he puesto en el evento de la hoja: Worksheet_SelectionChange
la instrucción: Application.CalculateFull

Lo que busco es saber como hacer para que sólo se recalcule todo
cuando se produzca un cambio de color en la celda donde voy
cambiando el color para sumar Ej: C2 pues sino se ejecuta cada vez
que salgo de una celda por ejemplo.

Supongo que se debe controlar el parámetro Target de la función
pero no sé como hacerlo.

Gracias por cualquier ayuda.

Principiante.













Respuesta Responder a este mensaje
#8 Héctor Miguel
20/12/2005 - 06:03 | Informe spam
hola, Principiante !

El criterio es una simple prueba de ejemplo para ver como se podria sumar esas celdas coloreadas.
No poseen formulas ni nada sino simplemente las pinte de color y quise ver como sumarlas.
Gracias por toda la informacion.



-> 'eso'... quiere decir que te has decidido por... alguna alternativa ?... [o por ninguna] -?-

saludos,
hector.
Respuesta Responder a este mensaje
#9 Principiante
20/12/2005 - 13:14 | Informe spam
De momento simplemente haré que se actualice en cada cambio que se
produzca en cualquier celda.

En Worksheet_SelectionChange la instrucción: Application.CalculateFull

Principiante.

Héctor Miguel escribió:
hola, Principiante !


El criterio es una simple prueba de ejemplo para ver como se podria sumar esas celdas coloreadas.
No poseen formulas ni nada sino simplemente las pinte de color y quise ver como sumarlas.
Gracias por toda la informacion.




-> 'eso'... quiere decir que te has decidido por... alguna alternativa ?... [o por ninguna] -?-

saludos,
hector.


Respuesta Responder a este mensaje
#10 Héctor Miguel
21/12/2005 - 08:02 | Informe spam
hola, Principiante !

De momento simplemente hare que se actualice en cada cambio que se produzca en cualquier celda.
En Worksheet_SelectionChange la instrucción: Application.CalculateFull



op1: es probable que pudieras 'mejorar el rendimiento' de tu modelo en el re/calculo de dichas funciones...
si cambias el -> Application.CalculateFull por una instruccion que re/calculo SOLAMENTE un rango
p.e. -> [a1].Calculate [aprovechando que a tu funcion ya le has puesto -> Application.Volatile] :))

op2: posiblemente te sea de utiidad agregar un argumento que 'suspeda' [temporalmente] los 'FullCalculates' -?-
te paso un post de una consulta +/- parecida al final ;)

op3: quizas te resultara 'atractivo' cambiar de funciones VBA por macro-funciones de excel4 ;)
[ya comentaras mas adelante] :))

saludos,
hector.

el post anterior ==hola, Esteban !

Estoy sumando celdas coloreadas con la macro que aparece en http://www.excelesp.com/funcperso01.htm
... pero quisiera modificar el codigo para incluir un boton que la ejecute unicamente cuando sea presionado [...]



considerando que se trata de una FUNCION -personalizada- para utilizarse 'directamente' en las hojas de calculo...
[creo que] no tendria sentido 'obligarla/sujetarla/condicionarla/...' a un objeto que poco [o nada] tuviera que ver con las celdas -?-
[ademas] toma en cuenta que dicha funcion pudiera encontrarse NO en una sola... si no en varias celdas [y hojas del libro] :))

[supongo que] una alernativa +/- 'aceptable' seria agregar un parametro que 'suspenda' los re/calculos de la funcion ;)
[con lo cual] podrias incluso mantener varias funciones [misma hoja o en varias] con 'diferente' forma de auto-actualizacion :))

prueba con las siguientes modificaciones a la funcion para sumar celdas segun color 'de muestra'...
Function SumarColorFondo( _
CeldaColor As Range, _
RangoASumar As Range, _
Suspender As Range) As Double
If IsEmpty(Suspender) Then Exit Function
Dim Celda As Range: Application.Volatile
For Each Celda In RangoASumar
If Celda.Interior.ColorIndex = CeldaColor.Cells(1, 1).Interior.ColorIndex _
Then SumarColorFondo = SumarColorFondo + Celda
Next
End Function

solo se ha agregado el parametro/argumento 'Suspender' que requiere de alguna celda 'adicional' a los otros argumentos [p.e.]
=SumarColorFondo(C1,A1:A10,D5) donde...
'C1' es la celda que tiene el color de fondo 'muestra'
'A1:A10' es el rango del que se desea sumar los valores cuyo color de celda sea igual al de la 'muestra' y...
'D5' es una celda 'adicional' que... si se deja 'vacia'... la funcion se suspende
=> toma nota que al suspender la funcion tampoco se 'sostiene' el valor anterior que se hubiera 'detectado'
-> obtendras un rotundo y soberano cero -0- mientras la celda 'Suspender' se mantenga vacia

saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida