Filtro en tabla dinámica

20/04/2006 - 16:23 por kusflo | Informe spam
Tengo una tabla dinámica con tres campos en en el sector Pagina y varios mas
en los sectores de fila y datos. Los campos son: Empresa, Cuenta de
cotización y Centros de trabajo. Teniendo en cuenta que estamos hablando de
cerca de 200 Empresas de las cuales cada una de ellas tiene varias cuentas de
cotización y cada cuenta de cotización tiene uno o mas centros de trabajo, Lo
que me sucede es que cuando selecciono una empresa y quiero seleccionar una
cuenta de cotizacion de dicha empresa me aparecen todas las cuentas de
cotización de todas las empresas y lo mismo con los centros de trabajo. Lo
que pretendo es que cuando selecciono una empresa en el campo de cuentas de
cotizacion se muestren solo las cuentas de dicha empresa seleccionada y lo
mismo cuando toque seleccionar los centros de trabajo.

Buff no sé si me explique con claridad.
"Saber que se sabe lo que se sabe y que no se sabe lo que no se sabe; he
aquí el verdadero saber." Confucio.

Preguntas similare

Leer las respuestas

#6 kusflo
24/04/2006 - 09:44 | Informe spam
Perdona por no haberte informado antes del origen de datos. El origen de
datos es una consulta sql realizada con el msquery a una base de datos. Con
lo cual el origen de datos no esta en otra hoja de calculo y esto complica
mas el asunto no??
"Saber que se sabe lo que se sabe y que no se sabe lo que no se sabe; he
aquí el verdadero saber." Confucio.


"Héctor Miguel" escribió:

hola, 'anonimo/a' !

> El caso que me muestras en el link es lo mismo que me sucede a mi
> Yo pretendo realizar la opcion 2 es decir la de utilizar la formula y la macro.
> Lo estoy intentando pero no consigo entender la formula. Para mi no tiene sentido: =o($h$3="(Todas)",$h$3¢)
> Podrias explicarme un poco a que viene?.
> Si tienes... ese ejemplo desarrollado te agradeceria que me enviases... a mi email para poder estudiarlo [...]

1) si partimos de tu consulta original...
> ... tabla dinamica con tres campos en... Pagina y varios... en... fila y datos.
> Los campos son: Empresa, Cuenta de cotizacion y Centros de trabajo.

2) y le agregamos [del mensaje anterior] que...
>> supongo que el ejemplo que expones es [o pretende ser] mas bien... 'ilustrativo' -?-
>> [y me parece que]... en tanto NO expongas -tambien- cual es la ubicacion de los datos de origen...
>> [hoja/rango y/o si se trata de datos 'externos'...]...

3) podemos intentar con otro [tipo de] 'acercamiento' si copias/pegas el ejemplo al final del presente...
-> en el modulo de codigo de 'la hoja' donde esta la tabla dinamica
[te comento que estoy suponiendo que los datos 'de origen' de la TD... pudieran estar en otra hoja] -?-

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

Dim FLR As String, Origen As String, Hoja As String, Rango As String, Sig As Byte, _
Busca, Compara, Campo As PivotItem
Private Sub Worksheet_Calculate()
Application.ScreenUpdating = False: Application.EnableEvents = False: On Error GoTo Salida
FLR = Application.International(xlUpperCaseRowLetter): ReDim Busca(3): ReDim Compara(3)
With Me.PivotTables(1): Origen = .PivotCache.SourceData
If InStr(Origen, "]") > 0 Then Origen = Mid(Origen, InStr(Origen, "]") + 1)
Hoja = IIf(InStr(Origen, "!") > 0, Left(Origen, InStr(Origen, "!") - 1), Parent.Name)
Rango = Application.ConvertFormula( _
Application.Substitute(Mid(Origen, InStr(Origen, "!") + 1), FLR, "R"), xlR1C1, xlA1)
With Worksheets(Hoja).Range(Rango)
Rango = .Offset(1).Resize(.Rows.Count - 1).Address: End With
For Sig = 0 To 2: Compara(Sig) = .PageFields(Sig + 1).CurrentPage.Name
With Worksheets(Hoja).Range(Rango).Resize(, 1)
Busca(Sig) = "'" & Hoja & "'!" & .Offset(, Sig).Address: End With
For Each Campo In .PageFields(Sig + 1).PivotItems
Select Case Sig
Case 1
If Compara(0) <> "(All)" Then
Campo.Visible = Evaluate("sumproduct(--(" & _
Busca(0) & "=""" & Compara(0) & """),--(" & _
Busca(1) & "=""" & Campo.Name & """))>0")
Else: Campo.Visible = True
End If
Case 2
If Compara(0) <> "(All)" Then
If Compara(1) <> "(All)" Then
Campo.Visible = Evaluate("sumproduct(--(" & _
Busca(0) & "=""" & Compara(0) & """),--(" & _
Busca(1) & "=""" & Compara(1) & """),--(" & _
Busca(2) & "=""" & Campo.Name & """))>0")
Else: Campo.Visible = Evaluate("sumproduct(--(" & _
Busca(0) & "=""" & Compara(0) & """),--(" & _
Busca(2) & "=""" & Campo.Name & """))>0")
End If
Else: Campo.Visible = True
End If
End Select: Next: Next: End With
Salida:
Application.EnableEvents = True
End Sub



Respuesta Responder a este mensaje
#7 Héctor Miguel
24/04/2006 - 20:31 | Informe spam
hola, marcos !

... por no haberte informado antes del origen de datos
... es una consulta sql realizada con el msquery a una base de datos
... no esta en otra hoja de calculo y esto complica mas el asunto no?



[supongo que si] .-((
no se que tan 'facil' sea 'manupular' [desde afuera] un arreglo o re-acomodo de tus datos de origen -?-
[creo que] en el 'peor de los casos' -> y si tus registros NO exceden las 65,536 lineas de una hoja en excel -?-
-> podrias 'volcar' [los registros necesarios de] esa base de datos -> en una hoja de excel
y luego, definir el rango resultante como el origen de datos de tu TD
[con lo cual] ya podrias usar/adaptar/complementar/... el codigo del mensaje anterior ;)
[probablemente] incluso, podrias asignar celdas como parametros de dicha consulta ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida