Truco Excel. Actualizar los filtros de una tabla dinámica con Visual basic

Imaginad que tenéis que cambiar uno o varios filtros de todas las tablas dinámicas de una hoja y cada una de las tablas dinámicas tiene un nombre distinto o hay un número distinto de tablas dinámicas en cada hoja. Eso dificulta a la hora de crear un bucle para la modificación de filtros. Pues este truco de Excel os permitirá actualizar un filtro de una fecha (o cualquier otro) para todas las tablas dinámicas de una hoja. El código es muy sencillo y no creo necesario subiros a la web algún ejemplo:

Sub filtros()
'Macro creada por www.analisisydecision.es
Dim pt As PivotTable

For Each pt In ActiveSheet.PivotTables

With pt.PivotFields("fecha")
.PivotItems("Dec-10").Visible = False
.PivotItems("Mar-10").Visible = True
End With
Next pt

End Sub

Para cada tabla dinámica (pivot table) actualiza el campo fecha, quita diciembre de 2010 y pone marzo de 2010. Es importante destacar que el filtro emplea fechas en lengua inglesa aunque vosotros en la tabla dinámica la veáis en lengua española. Esto es importante porque más de uno se ha vuelto loco con ese problema en las macros que modifican tablas dinámicas. También se puede plantear una versión que actualice todas las hojas de un libro. Espero que sea de utilidad. Saludos.

8 comentarios en “Truco Excel. Actualizar los filtros de una tabla dinámica con Visual basic

  1. Hola,tengo como 100 tablas dinámicas que cambia cada semana y necesito cambiar el filtro según a la semana que corresponda. Por ejemplo, esta semana es la 44 y la próxima 45. Pues debo actualizar de la semana 44 a la 45 en todas las tabas, puedo hacerlo con macros?
    Gracias de antemano

  2. Hola: quisiera saber como puedo actualizar mediante una macro los campos del area de valores de una tabla dinamica. Los datos provienen de una hoja en la que hay 12 columnas con numeros de cuenta y la idea es que el usuario pueda cambiarlos y mediante un boton ejecute la macro que crea la tabla dinamica.

    Tengo el siguiente codigo:

    ActiveSheet.PivotTables(“Tabla dinámica2”).ClearTable
    ActiveWorkbook.ShowPivotTableFieldList = True
    ActiveSheet.PivotTables(“Tabla dinámica2”).AddDataField ActiveSheet.PivotTables _
    (“Tabla dinámica2”).PivotFields(“11100000”), “Cuenta de 11100000”, xlCount
    With ActiveSheet.PivotTables(“Tabla dinámica2”).PivotFields( _
    “Cuenta de 11100000”)
    .Caption = “Suma de 11100000”
    .Function = xlSum
    End With

    Lo que varia es ese codigo 11000000 He intentado con variables pero no me funciona.

    Tambien he intentado solo actualizando pero igual no me funciona,

    ActiveSheet.PivotTables(“Tabla dinámica2”).PivotCache.Refresh
    ActiveWorkbook.RefreshAll

    With ActiveSheet.PivotTables(“Tabla dinámica2”).PivotFields&(“CTUNO”)
    .Orientation = xlRowField
    .Position = 6
    End With

    Agradezco su ayuda

  3. Hola!

    En este momento estoy en proceso de automatizar lo más posibles todos los procesos en mi área de trabajo.

    Uno de los proyectos que tengo es poder enviar estados de cuenta automáticamente por correo y el primer paso es actualizar el filtro de una tabla dinámica

    En contexto: Tengo una pivot filtrada por los clientes de la empresa. Mi idea es poder actualizar la pivot para cada cliente y con otro botón se envíe un correo a ese cliente con el texto predeterminado en una celda y pegando celdas de excel como imagen en dicho correo.

    Hay una manera de hacer todo eso en una sola macro o debería hacerlo por separado?

    Al momento tengo una macro para enviar correos, solo tendría que modificarla para pegar rangos como imagenes. Por el momento estoy buscando es la manera de cambiar al filtro de la pivot.

    Si tiene alguna sugerencia se lo agradeceré enormemente.
    Saludos

    1. Hola, con esa descripción general es difícil ayudarte, aunque creo que sé lo que quieres hacer. Una pregunta: si ya tienes la macro que manda correos, ¿no puedes hacer un bucle para cada cliente? ¿O tienes que personalizar el correo?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

[bws_google_captcha]