Macro automática filtrar tabla dinámica relacionada a una celda en excel

Tengo una hoja donde tengo datos desde A3 y una tabla dinámica desde A8.

La idea es poder filtrar la tabla dinámica en función de lo que está escrito y que puede cambiar de la celda A3 y B3.

La equivalencia de datos vs tabla dinámica es:

A3=B8 (tabla dinámica) y B3=A12 (tabla dinámica) .

La idea es que la tabla dinámica cambie de forma automática sin necesidad de ejecutar la macro.

1 respuesta

Respuesta
1

Pon el siguiente código en los eventos de tu hoja

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim sCliente As String, sCodigo As Variant, mensaje As String
  Dim pItem As PivotItem, n As Long
  '
  Application.ScreenUpdating = False
  '
  If Not Intersect(Target, Range("A3:B3")) Is Nothing Then
    sCliente = [A3]
    sCodigo = [B3]
    With ActiveSheet.PivotTables("Tabla1").PivotFields("NombreCliente")
      .ClearAllFilters
      '
      If sCliente <> "" Then
        For Each pItem In .PivotItems
          If LCase(pItem) <> LCase(sCliente) Then
            n = n + 1
            If n < .PivotItems.Count Then
              pItem.Visible = False
            Else
              .ClearAllFilters
              mensaje = "El cliente no existe"
            End If
          End If
        Next
      End If
    End With
    '
    n = 0
    With ActiveSheet.PivotTables("Tabla1").PivotFields("CodItem")
      .ClearAllFilters
      '
      If sCodigo <> "" Then
        For Each pItem In .PivotItems
          If LCase(pItem) <> LCase(sCodigo) Then
            n = n + 1
            If n < .PivotItems.Count Then
              pItem.Visible = False
            Else
              .ClearAllFilters
              mensaje = "El Código no existe"
            End If
          End If
        Next
      End If
    End With
    Application.ScreenUpdating = False
    If mensaje <> "" Then MsgBox mensaje
  End If
End Sub

Sigue las Instrucciones para poner la macro en los eventos de worksheet

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(tu hoja)
  4. En el panel del lado derecho copia la macro

Muchísimas gracias, funciona perfecto!!!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas