Partimos del ejemplo de una planilla cuyo gráfico dinámico contiene datos de exportaciones de diferentes países del mundo. La intensión es que aparezca la bandera de cada país en el fondo del gráfico cada vez que seleccionamos uno.
Lo que podría hacerse es seleccionar el país de una lista auxiliar, y luego ejecutar una macro que asigne ese país como filtro del gráfico y la bandera respectiva como fondo. Vamos por partes.
Supongamos que tenemos una lista de exportaciones en el rango [A1:B16], con los títulos Destino e Importe en la primera fila.
Comenzamos creando el gráfico dinámico:
-Seleccionamos nuestra tabla.
-Dentro de la ficha [Insertar], hacemos clic en el botón [Tabla dinámica] y, luego, en [Gráfico dinámico]. Aparece un cuadro con las opciones de datos de origen y ubicación para el gráfico.
-El cuadro ya debería tener seleccionado el rango de origen, de modo que, dentro de [Elija donde desea colocar la tabla dinámica y el gráfico dinámico], marcamos la opción [Hoja de cálculo existente] y una celda de esa hoja. Por ejemplo, [D1].
-Hacemos clic en [Aceptar].
Si todo sale bien, deben aparecer los “esqueletos” de la tabla y del gráfico, y un cuadro con la lista de campos. Ahora tenemos que diseñar el gráfico:
-Dentro de la lista de campos, tomamos el campo Destino y lo arrastramos a [Campos de eje].
-Tomamos el campo Importe y lo arrastramos a [Valores].
-Cerramos la lista de campos (ya no la vamos a usar).
Este gráfico dinámico incluye un botón [Destino] que funciona como un filtro: ofrece una lista de destinos que, seleccionados, aparecerán en el gráfico. El lector quiere que, cuando elegimos un destino, cambie el fondo del gráfico y muestre la bandera del país elegido como destino.
Para esto necesitamos una segunda lista desplegable con los destinos:
-En un rango auxiliar –por ejemplo, debajo de la lista original– escribimos los nombres de los países que aparecen en el campo Destino, solamente una vez cada uno.
-Elegimos otra celda auxiliar para poner la lista desplegable. Por ejemplo, [D5].
-Dentro de la ficha [Datos] hacemos clic en el botón [Validación de datos]. Aparece un cuadro con las opciones de validación.
-Dentro de [Permitir] elegimos la opción [Lista].
-Dentro de [Origen] seleccionamos el rango donde habíamos escrito la lista de países.
-Hacemos clic en [Aceptar].
Ahora se viene la macro. Esta macro tendrá un ciclo For… Next para recorrer los valores posibles para el campo representado en el gráfico. Si el valor coincide con el nombre seleccionado en la lista de países, ese valor se hará visible. Si no, se mantendrá oculto. Si el nombre del país está en la celda [D14], esta parte de la macro sería algo así:
ActiveSheet.ChartObjects(1).Activate
With ActiveChart.PivotLayout.PivotTable.PivotFields(1)
For i = 1 To 4
If .PivotItems(i).Name =
Range(“D14”) Then
.PivotItems(i).Visible = True
Else
.PivotItems(i).Visible = False
End If
Next
End With
Aquí aparecen las diferentes propiedades y objetos de un gráfico dinámico: PivotLayout, PivotTable, PivotFields y PivotItems. Estos objetos y propiedades los obtuvimos operando sobre el gráfico (seleccionando y deseleccionando valores) con el grabador de macros. El código de la macro obtenida nos indica cómo se invoca cada objeto y cada propiedad. Como hay un único gráfico dinámico en la hoja, y el gráfico tiene un único campo, el subíndice que los identifica es 1 en todos los casos.
Al terminar, la macro debe aplicar como fondo la bandera del país seleccionado:
ActiveChart.ChartArea.Fill.UserPicture PictureFile:= _
“C: \Mis documentos\ “ & Range(“D14”)& “.JPG”
En esta instrucción tenemos que ajustar el nombre de la ruta donde se encuentran las banderas y la extensión de los archivos.
Una última observación. Puede ser que, al recorrer los valores de la variable, la macro pretenda ocultar todos los valores posibles. En ese caso, la macro dará un mensaje de error. Para evitar este problema, lo primero que hacemos es activar el último valor. Si, como en nuestro ejemplo, hay cuatro valores posibles, antes de comenzar el recorrido, incluimos la instrucción: .PivotItems(4).Visible = True.