Macro filtros en tablas dinamicas
Hola, de antemano gracias por leerme, tengo problema con una macro
que va y lee una tabla dinámica y en base a eso hace 2 filtros, yo no hice
la macro, pero me están pidiendo una actualización, y no soy muy diestra, se filtra por
coordinador y luego por ciudad, necesito agregar 2 campos mas a filtrar,
pero no se como hacerlo, si me pudieran ayudar, les dejo las macros:
MACRO 1
Private Sub cmdFiltroCD_Click()
If ActiveSheet.Range("o2").Text = "" Then
MsgBox "Debe Seleccionar un Coordinador", vbCritical, "Red"
Else
Application.ScreenUpdating = False
Call Habilita
vfin = ActiveSheet.lblFin.Caption
Sheets("AC").Select
ActiveSheet.Range("b1").Select
ActiveSheet.PivotTables("tablaciudades").ChangePivotCache ActiveWorkbook.PivotCaches _
.Create(SourceType:=xlDatabase,
SourceData:="FORMATO DE PRENOMINA!R7C25:R" & vfin & "C95",
Version:=xlPivotTableVersion14)
ActiveSheet.PivotTables("tablaciudades").PivotFields("coordinador").ClearAllFilters
valor = Range("o2").Text
If valor = "Todos" Or valor = "" Then
ActiveSheet.PivotTables("tablaciudades").PivotFields("COORDINADOR").ClearAllFilters
Else
ActiveSheet.PivotTables("tablaciudades").PivotFields("COORDINADOR").CurrentPage = valor
End If
vfint = ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Row 'encuentra el ultimo de la tabla ciudades
For i = 4 To vfint
frmCiudad.lstCD.AddItem ActiveSheet.Range("B" & i).Text
Next
frmCiudad.Caption = valor
Sheets("formato de prenomina").Select
Call Inhabilita
Application.ScreenUpdating = True
frmCiudad.Show
End If
End Sub
Por favor, si me pudieran ayudar, les agradezco.
MACRO 2
Public Sub Filtrarxcoordinador()
'
' Filtrarxcoordinador Macro
'
Call Habilita
'aquí primero quita el filtro para que si selecciono un coordinador filtre a partir de todos los datos
If ActiveSheet.FilterMode = True Then ' si hay filtro de valores
ActiveSheet.Range("A7:CR7").AutoFilter
vult = Cells(Rows.Count, "F").End(xlUp).Row
ActiveSheet.lblFin.Caption = vult
End If
vult = Cells(Rows.Count, "bk").End(xlUp).Row
If Range("o2").Value = "" Or Range("o2").Value = "Todos" Then
If ActiveSheet.FilterMode = True Then ' si hay filtro de valores
ActiveSheet.Range("A7:CR7").AutoFilter
End If
vult = Cells(Rows.Count, "F").End(xlUp).Row
ActiveSheet.lblFin.Caption = vult
Else
vfin = ActiveSheet.lblFin.Caption
vAutomatico = "Si"
ActiveSheet.Range("AI8:BM" & vfin).ClearContents
ActiveSheet.Range("BP8:CL" & vfin).ClearContents
vAutomatico = "No"
valor = ActiveSheet.Range("O2")
Rows("7:7").Select
ActiveSheet.Range("$A$7:$CR$" & vfin).AutoFilter Field:=95, Criteria1:=valor
End If
Call Inhabilita
End Sub
MACRO 3
Public Sub FiltraCiudad()
Dim vfinFC As Integer, vFiltro As String, vfilaF As Integer
Call Habilita
vfinFC = Cells(Rows.Count, "y").End(xlUp).Row
vFiltro = Range("o4").Value
If Range("o4").Value = "" Or Range("o4").Value = "Todos" Then
Call Filtrarxcoordinador
Exit Sub
Else
ActiveSheet.Range("$Y$5:$Y" & vfinFC).AutoFilter Field:=1, Criteria1:=Range("o4").Value
End If
Call Inhabilita
End Sub
MACRO 4
Public Sub FiltroCiudad()
Dim vListaCd As Variant
Application.ScreenUpdating = False
Call Habilita
vcuenta = 0
If ActiveSheet.FilterMode = True Then ' si hay filtro de valores
ActiveSheet.Range("A7:CR7").AutoFilter
End If
For i = 0 To frmCiudad.lstCD.ListCount - 1 'cuenta las ciudades seleccionadas
If frmCiudad.lstCD.Selected(i) = True Then
vcuenta = vcuenta + 1
End If
Next
ReDim vListaCd(vcuenta) 'redimensiona el largo del arreglo
vcuenta = 0
vlistadocd = ""
For i = 0 To frmCiudad.lstCD.ListCount - 1 'recorre todo el listbox
If frmCiudad.lstCD.Selected(i) = True Then 'si esta seleccionada la ciudad
vcuenta = vcuenta + 1
If vlistadocd <> "" Then
vlistadocd = vlistadocd & ", "
End If
vlistadocd = vlistadocd & frmCiudad.lstCD.List(i)
vListaCd(vcuenta) = frmCiudad.lstCD.List(i) 'agrega la ciudad al arreglo
End If
Next
valor = Range("o2:w2").Text
vfin = Sheets("FORMATO DE PRENOMINA").lblFin.Caption 'obtiene el ultimo renglón lleno
If vcuenta = frmCiudad.lstCD.ListCount Then
ActiveSheet.Range("o6") = "General"
If valor <> "Todos" And valor <> "" Then
ActiveSheet.Range("$A$7:$CR$" & vfin).AutoFilter Field:=95, Criteria1:=valor 'filtra por coordinador
ActiveSheet.Range("$A$7:$CR$" & vfin).AutoFilter Field:=96, Criteria1:=valor 'filtra por gerente
End If
Else
Rows("7:7").Select
If valor <> "Todos" And valor <> "" Then
ActiveSheet.Range("$A$7:$CR$" & vfin).AutoFilter Field:=95, Criteria1:=valor 'filtra por coordinador
ActiveSheet.Range("$A$7:$CR$" & vfin).AutoFilter Field:=96, Criteria1:=valor 'filtra por Gerente
End If
ActiveSheet.Range("$A$7:$CR$" & vfin).AutoFilter Field:=25, Criteria1:=Array(vListaCd), Operator:=xlFilterValues
ActiveSheet.Range("o6") = vlistadocd
End If
Unload frmCiudad
Call Inhabilita
Application.ScreenUpdating = True
ActiveSheet.Range("o6").Select
End Sub
En espera de su valioso apoyo, me despido.
Gracias :)