Filtrar tabla dinámica por valor de celda

Tengo la siguiente macro, que la vi en otro blog;

Private Sub Worksheet_Change(ByVal Target As Range)

 If Not Intersect(Target, Range("F1")) Is Nothing Then

     Dim hoja As Worksheet

    Dim td As PivotTable

         'Recorrer todas las hojas del libro

    For Each hoja In ThisWorkbook.Worksheets

                 'Recorrer las tablas dinámicas de la hoja

        For Each td In hoja.PivotTables

                         'En base al campo de la tabla dinámica:

            With td.PivotFields("Tiendas")

                             'Limpiar todos los filtros

                .ClearAllFilters

                                 'Filtrar por el valor de la celda F1

                On Error Resume Next

                .CurrentPage = Range("F1").Value

                             End With

                      Next td

     Next

End If

 End Sub

Me sirvió solo con un campo, el f1...

Tengo tres hojas en mi libro, en cada una hay 4 dinámicas con varios campos en común, al aplicar la macro solo me reconoce para la celda F1, para un criterio, “Tiendas”, si quiero colocar otros criterios para que me filtre, algo similar a la segmentación de Excel 2010, colocando en la celda F2 Puntos de venta, en F3 otro concepto, en F4 mes, como debo colocar la macro, hacer una para cada criterio que necesito porque es a una celda diferente o solo con una macro se puede, además no sé cómo pueda quedar la macro, hasta ahora estoy aprendiendo sobre el tema. Excel lo manejo bien pero ya me ha quedado corto a la hora de hacer cosas para mi trabajo…. Por favor me ayudan, de esto depende mi continuidad en mi trabajo actual.

1 respuesta

Respuesta
1

Vamos a ver... así por encima, y sin ver el proyecto ni nada, yo te sugeriría que orientes tu proyecto hacia usar botones ActiveX, y asignes a cada botón la macro que quieras que ejecute, con los parámetros que buscas.

Me explico: copia esa macro que tienes (que tiene buena pinta) en un par de botones, y modifica el código de cada macro (cambia los parámetros de la macro conforme a lo que necesitas). Luego, al hacer click en el botón, se ejecutará la macro específica que hayas implementado.

Para los muy expertos, este tipo de prácticas son poco elegantes, pero para el día a día valen perfectamente (además, tu código será tan absurdo que sólo lo entenderás tú, lo que te garantiza la continuidad en tu trabajo ;).

¡Gracias! Gracias manuel por tu ayuda y contestar...

Te cuento lo siguiente, 

Lo que requiero hacer es lo mismo que hace la segmentación de excel 2010, lo que sucede es que con este método tengo limitantes para mi caso, por eso no la puedo utilizar y recurro a las macros y dinámicas.

Porque los datos que tengo son bastantes, son de diferentes bases  y porque el filtro de segmentación quita items, por ejemplo de Tiendas cuando no tiene información, y necesito que salga toda la información, porque la estoy visualizando en otra hoja del mismo libro. si no es mucho pedir, si quieres te envió los datos y lo que he hecho hasta ahora, me das un mail. Gracias, no sabe cuento me ayuda.

Sube tu proyecto a Mediafire, Zippyshare y/o Mega, para que lo veamos y entre todos te demos la mejor solución.

Si te es posible, adjunta capturas de pantalla con lo que quieres solucionar, explicando cual es el problema; así nos facilitas mucho el trabajo.


Nunca doy mi correo porque estas páginas son colaborativas, es decir, si dentro de 5 años a alguien le hace falta lo mismo que a ti hoy, podrá acceder a la solución, o por lo menos, a una orientación. La solución -si la hubiera- debe aparecer en esta página, o por lo menos, esa es mi filosofía.

¡Gracias! ok, no hay lió....espérame cuadro toda la info y miro como la subo ala nube...gracias en verdad...

Manuel, buena tarde....envió link del archivo, lo que llevo y lo que debo hacer, espero me ayuden lo antes posible debo entregar esto muy muy rápido, el jueves de esta semana...gracias y dios los bendiga por su ayuda y sabiduría. Estare atentotoda la tarde y noche de hoy por sus aportes...

https://www.dropbox.com/sh/wc4igd91e3ommoa/AAD0pE8yyMdnIflV-AgM7hbqa?dl=0 

Tengo otro problema, como hago para saber que tiendas están en las 3 bases, en dos o en una y que en la hoja de resultado (informe) se vea esa diferencia, que me aparezca cero en donde no hay información. En el caso barranquilla, pasa que se selecciona en F1, efectivamente llama los valores, pero para la base 1 ventas, no hay datos, para perdida y provision si llama los datos porque si tienen información, en ventas lo que sale es el total de ventas, en vez de colocar ceros porque no hay información en base 1 ventas....como hago, me ayudan....gracias 

César, este proyecto es muy complicado para tenerlo listo en dos días; de hecho, se escapa de mis conocimientos.

Te sugeriría que contactes con un programador profesional que diseñe tu aplicación.

Manuel, 

Pero la macro que coloque arriba, no se puede modificar para hacer, o una sola macro, o varias para que funcionen de la misma forma que en F1. y pueda tener la información como la necesito...mil gracias....espero mas ayuda de otros miembros por favor...no tengo dinero para contactar un programador y la idea es poder construirlo yo mismo, porque creí cuando vi la macro que era fácil y se podía hacer sin problema y por ello me comprometí a hacerlo, de igual estoy mirando opciones.

Pero si necesito saber por favor, esa macro se puede hacer para que funcione con las mismas tablas dinámicas de diferente base (tres 3) , para los campos F1, F2, F3, F4...porque el otro problema ya lo resolví, de la info en las tres variables...gracias mil

Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Range("F1")) Is Nothing Then
    Dim hoja As Worksheet
    Dim td As PivotTable
         'Recorrer todas las hojas del libro
    For Each hoja In ThisWorkbook.Worksheets
                 'Recorrer las tablas dinámicas de la hoja
        For Each td In hoja.PivotTables
                         'En base al campo de la tabla dinámica:
            With td.PivotFields("Tiendas")
                             'Limpiar todos los filtros
                .ClearAllFilters
                                 'Filtrar por el valor de la celda F1
                On Error Resume Next
               .CurrentPage = Range("F1").Value
             End With
             Next td
Next
End If
'**************************************************************
If Not Intersect(Target, Range("F2")) Is Nothing Then
'    Dim hoja As Worksheet
'    Dim td As PivotTable
         'Recorrer todas las hojas del libro
    For Each hoja In ThisWorkbook.Worksheets
                 'Recorrer las tablas dinámicas de la hoja
        For Each td In hoja.PivotTables
                         'En base al campo de la tabla dinámica:
            With td.PivotFields("CRITERIOF2")
                             'Limpiar todos los filtros
                .ClearAllFilters
                                 'Filtrar por el valor de la celda F1
                On Error Resume Next
               .CurrentPage = Range("F2").Value
             End With
             Next td
Next
End If
'**************************************************************
If Not Intersect(Target, Range("F3")) Is Nothing Then
'    Dim hoja As Worksheet
'    Dim td As PivotTable
         'Recorrer todas las hojas del libro
    For Each hoja In ThisWorkbook.Worksheets
                 'Recorrer las tablas dinámicas de la hoja
        For Each td In hoja.PivotTables
                         'En base al campo de la tabla dinámica:
            With td.PivotFields("CRITERIOF3")
                             'Limpiar todos los filtros
                .ClearAllFilters
                                 'Filtrar por el valor de la celda F1
                On Error Resume Next
               .CurrentPage = Range("F3").Value
             End With
             Next td
Next
End If
End Sub

Creo que así nos acercaríamos a lo que quieres; donde dice CRITERIOF2 y CRITERIOF3 (en la línea del PivotFields) prueba a poner los criterios que quieras, justo como tienes puesto en Tiendas.

A ver si hay suerte y sacamos esto adelante.

Por cierto, que para activar la macro en cada table, tendrías que tener como celda activa F1, F2 o F3.

Si te funciona, añadir F4 es fácil.

vale, manuel, voy a probar...gracias, gracias, gracias....yo te cuento como quedo...

Manuel, lo probé y me sirvió mucho, gracias de verdad, gracias viejo por su ayuda y guía... Me atrevo a realizar otra consulta, estas macros funcionan para un libro, si requiero tener un libro por año, y que funcionen de la misma forma todos, pues tienen la misma estructura y campos en común, se puede utilizar la misma macro, ¿solo qué se cambiarían en la macro hojas por libros? ¿Esto se puede hacer? Si es posible me ayudas por favor... de antemano gracias, buen día

Pues en principio no deberías tener ningún problema en usar la macro tal como está, ya que no tiene una referencia obligada a un libro concreto, sólo a celdas; siempre que respetes la estructura que tiene tu libro actual, es decir, que los campos tengan los datos en las mismas celdas, las hojas se llamen igual, etc.

Si hubiese modificaciones, simplemente con cambiar en la macro las referencias de celdas viejas por las nuevas, debería funcionar sin problema.

Manuel, buena noche

Primero mil gracias por ayudarme y tomarte el tiempo de leer. Manuel, creo no he sido claro, con lo que en teoría quiero hacer ahora; espero me ayudes y me guíes para aprender cómo hacerlo....

Ya tengo un libro llamado 2015, bajo la macro que me ayudaste a reacondicionar. Esta mira las tablas dinámicas que hay en el libro 2015 y las filtra en unas celdas en específico; la macro filtra todas las dinámicas que hay en el libro. Hasta ahí vamos muy bien.

Ahora, si quiero hacer los libros 2010 a 2014 de la misma forma que se hizo el libro 2015, porque son las mismas variables y se llaman de la misma forma, los datos también son muy similares; para desde otro libro aparte que se llamara ejemplo, COMPILACIÓN, poder hacer un macro que haga lo mismo de la referencia a unas celdas en específico, F1,F2,F3...etc...Pero que me filtre de 2010 a 2015...y en el nuevo libro COMPILACIÓN  poder hacer un histórico de la información porque ahí es donde se referenciaría las celdas F1, F2...etc

La macro no sé cómo quedaría y necesito me ayudes por favor a ver cómo quedaría el código. Ahora, si esto se puede hacer, pues creería que sí, tengo que tener todos los libros, 2010 a 2015 en un misma carpeta en el PC o pueden estar en carpetas diferentes?

Como la nueva macro (la que me vas a ayudar a realizar) buscaría los libros 2010 a 2015  y filtraría todas las dinámicas que hay en ellas, es necesario darles nombres específicos a todas las dinámicas de cada libro?.

El insumo de la nueva macro creería es el mismo que me ayudaste a realizar, pero se ampliaría a los libros 2010 a 2015 a las dinámicas de cada libro, que tiene la mismas estructura, datos y nombre de columna…No sé si es claro o necesito ser un poco más específico...espero tus comentarios y valiosa ayuda...gracias Manuel, feliz noche...

Mejor crea un tema nuevo, César; así no se mezclan y queda mejor organizado.

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas