martes, 20 de octubre de 2015

VBA: Automatizar la actualización de mis tablas dinámicas...

Aprenderemos hoy a tener actualizadas nuestras tablas dinámicas condicionadas al refresco periódico de la base de datos importada.
Seguramente suene extraño a priori, pero el asunto es simple:
Partiremos de una Tabla importada a nuestro libro de trabajo empleando la herramienta Power Query.
Será importante que al realizar el proceso Agreguemos al Modelo de datos la conexión realizada.

Con nuestra Query creada (y agregada al modelo), construiremos sobre ella una Tabla dinámica.
Y ahora lo más importante, para conseguir esa actualización periódica:
1- configuraremos la conexión de datos para que actualice cada x minutos (en mi caso será 1 minuto para que sea fácil visualizar el cambio).
2- insertaremos unas líneas de código VBA asociado al evento Worksheet_TableUpdate dentro de la ventana de código donde se encuentre la Tabla importada... dentro del evento indicaremos que se realice la Actualización de la Tabla dinámica.

Consiguiendo entonces nuestro objetivo.

Fundamental el evento de hoja empleado (OJO !!, para versiones de Excel 2013 y +) que se activa después que la conexión agregada al modelo de datos se actualice sobre la hoja de cálculo....

Expliquemos los pasos.
Partimos de un Origen de datos externo, en nuestro ejemplo será otro Libro de Excel, dentro del cual, en una hoja tenemos una Tabla creada:

VBA: Automatizar la actualización de mis tablas dinámicas...



En un Libro de trabajo nuevo accedemos a la herramienta Power Query y desde el grupo Obtener datos externos > botón De Archivos > De Excel buscaremos la ruta donde se encuentre nuestro fichero origen:

VBA: Automatizar la actualización de mis tablas dinámicas...



Seleccionamos la/s Tabla con datos dentro del fichero/base de datos, y lo Cargamos en nuestra hoja de trabajo:

VBA: Automatizar la actualización de mis tablas dinámicas...



Atención, por que el siguiente paso es importante, ya que indicamos que esta importación la Agregamos al modelo de datos.. además de indicar dónde ubicamos la Tabla importada:

VBA: Automatizar la actualización de mis tablas dinámicas...



Tras la importación de nuestra Tabla a través de Power Query (en este caso no he realizado ningún tratamiento de datos) creamos una Tabla dinámica tomando como origen esa Tabla conectada:

VBA: Automatizar la actualización de mis tablas dinámicas...



En el siguiente paso insertamos nuestro evento en la ventana de código donde se encuentre la Tabla, dentro de nuestro proyecto de VBA desde el editor de VB:

Private Sub Worksheet_TableUpdate(ByVal Target As TableObject)
'actualiza la tabla dinámica
ThisWorkbook.Sheets("Hoja1").PivotTables("Tabla dinámica1").PivotCache.Refresh
End Sub



Ahora solo nos queda controlar la periodicidad de la actualización de la conexión creada.. puesto que de esto dependerá, a través del evento TableUpdate, el refresco de nuestra Tabla dinámica.
Desde la ficha Datos > grupo Conexiones > botón Conexiones buscaremos nuestra conexión y presionaremos Propiedades:

VBA: Automatizar la actualización de mis tablas dinámicas...


En la pestaña de Uso marcaremos la opción Actualizar cada: e indicaremos los minutos deseados.

Hemos acabado. Cada modificación en nuestra tabla origen, se verá reflejada en nuestro libro de trabajo y por ende en nuestra Tabla dinámica, actualizada automáticamente cada minuto.

No hay comentarios:

Publicar un comentario en la entrada