Descargar el fichero: eventocalcula.xlsm
Ya hemos hablado en un post anterior de cómo actualizar automáticamente una TD (Tabla Dinámica) ante la variación de una celda concreta o la variación de alguna celda que pertenezca a un rango previamente establecido. Pero en esos casos siempre teníamos que cambiar el valor de la celda a mano. Esto es, teníamos que escribir un valor o modificar alguno existente previamente. Al pulsar Intro es cuando se lanzaba la macro que actualizaba la TD.
Ver el post anterior: Actualización automática de una Tabla Dinámica
En esta ocasión vamos a comentar el caso en el que no es necesario cambiar manualmente la celda que al cambiar su valor lanza la macro, que a su vez actualiza la TD. Esto tiene la enorme ventaja de que esa celda puede ser una fórmula que está vinculada con otras muchas celdas que al cambiar modifican el valor de nuestra celda objetivo, y eso desencadena la actualización de la TD. O incluso pudiera estar la formula de esa celda objetivo apuntando a otras hojas, otros libros, o estar tomando valores vinculados de Access u otras fuentes de datos externas. Esto es muy importante, ya que esta automatización nos permite estar tranquilos de que la TD esta siempre actualizada y no requiere intervención humana. Así podremos automatizar sistemas complejos de forma completa.
Disponemos de una sencilla Base de Datos con tres campos: Comercial, Mes e Importe. En la celda G6 sumamos toda la columna D:
=+SUMA(D:D)
Esto hace que al cambiar algún valor de esa columna, y en particular las ventas de cada comercial (de color azul), se producirá un nuevo valor para la celda G6 (en color verde). Esta es la celda que desencadenará que la TD se actualice.
Haga la prueba cambie el valor de cualquiera de las celdas azules y verá como se actualiza la TD y el Gráfico Dinámico asociado.
La celda G7 es una celda auxiliar que hemos necesitado para saber si la celda verde cambia o no.
Esta es la macro que utiliza el evento Worksheet_Calculate.
Código:
Private Sub Worksheet_Calculate() Dim vtas_old As Double Dim vtas_new As Double vtas_new = Sheets("Hoja1").Range("G6").Value vtas_old = Sheets("Hoja1").Range("G7").Value If vtas_old <> vtas_new Then [G7] = vtas_new ActiveSheet.PivotTables("TD1").PivotCache.Refresh End If End Sub
felicitaciones
ResponderEliminarexcelentes aportes
FELICITACINES
ResponderEliminarLOS EJEMPLOS Y APORTES SON INTERESANTES.
SOY PROFESOR DE INFORMATICA BASICA
LOS ALUMNOS ME PLANTEAN SITUACIONES QUEDEBEN RESOLVER ENSUS TRABAJOS.
LOS EJEMPLOS ME HAN AYUDADO BASTANTE.
GRACIAS
ATT: HERNAN CALI COLOMBIA
Muchas gracias. Me fue de gran utilidad para un proyecto en el que estoy trabajando.
ResponderEliminar