[Résolu] Question sur les Tableaux Croisés Dynamiques.

PrinceCorwin

XLDnaute Occasionnel
Bonjour le forum,
Est-il possible dans un TCD de limiter la liste déroulante d'un filtre de rapport en fonction d'un autre champs filtre de rapport ?

Exemple:
Premier filtre : un produit.
Deuxième filtre : un composant.

Est-il possible de limiter la liste des composants par rapport au produit choisi ? ou alors, on a toujours la liste de tous les composants, même ceux qui ne sont pas dans le produit...

Merci pour vos réponse et vos éclaircissements.

Prince Corwin (ZeB, pour les intimes et les autres...)
 
Dernière édition:

PrinceCorwin

XLDnaute Occasionnel
Re : Quastion sur les Tableaux Croisés Dynamiques.

Bonjour, Bonjour,
Merci Pierrot pour cette réponse rapide. (Désolé de ne répondre que maintenant, dépannage qui m'a pris l'après midi...)

C'est effectivement ce que je craignais.

Proposition secondaire :
A partir de liste en cascade en VBA (ca, je sais faire), est-il possible de faire que ces listes soient les filtres du TCD en question (là, je sais pas faire) ?

Merci,
ZeB
 

Pierrot93

XLDnaute Barbatruc
Re : Quastion sur les Tableaux Croisés Dynamiques.

Bonjour,

A partir de liste en cascade en VBA (ca, je sais faire), est-il possible de faire que ces listes soient les filtres du TCD en question (là, je sais pas faire) ?
bah... sans doute.... A voir selon ton modèle de donnée.... regarde peut être du coté de l'événement "change" de la feuille de calcul pour le déclenchement....

bonne journée
@+
 

PrinceCorwin

XLDnaute Occasionnel
Re : Question sur les Tableaux Croisés Dynamiques.

Hello tout le monde,
Ca avance presque comme il faut. Reste un toutpetit point de détail à régler.

J'ai procédé comme suit :
Dans ma feuille de Données, je crée une liste des produits, et deux noms de plage
Produit =DECALER(Données!$J$2;;;NBVAL(Données!$J:$J)-1)
ListeProduit =DECALER(Données!$BB$2;;;NBVAL(Données!$BB:$BB)-1)

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Range("J1:K65000").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("BB1"), Unique:=True
Range("BB1:BB1000").Sort key1:=Range("BB1"), Order1:=xlAscending, Header:=xlGuess
End Sub

Dans la feuille du TcD :
mon TCD a les filtres actifs, mais les lignes sont masquées.

VB:
Private Sub Worksheet_Change(ByVal Target As Range)

'' Change le Produit
If Not Intersect([B1:B1], Target) Is Nothing And Target.Count = 1 Then
Application.EnableEvents = False
Set m = CreateObject("scripting.dictionary")
''Mettre à jour le TCD
    ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("DGN_CMP").ClearAllFilters
    ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("DGN").ClearAllFilters
    ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("DGN_CMP").CurrentPage = [B1].Value

''Mise à jour de la liste des matière du produit
    temp = "(Tous),"
    For Each c In [Produit]
        If c = Target Then
        ''Construction de la liste
            If Not m.Exists(c.Offset(, 2).Value) Then
                m.Add c.Offset(, 2).Value, c.Offset(, 2).Value
            End If
        End If
    Next c
    t = m.items
    If m.Count > 1 Then
        Call tri(t, LBound(t), UBound(t))
    End If
    For i = LBound(t) To UBound(t)
        temp = temp & t(i) & ","
    Next i
    '' Mettre à jour la liste de validation en B2
    On Error Resume Next
    [B2].Validation.Delete
    [B2].Validation.Add xlValidateList, Formula1:=Left(temp, Len(temp) - 1)
Application.EnableEvents = True
End If

''Mise à jour de la Matière
If Not Intersect([B2:B2], Target) Is Nothing And Target.Count = 1 Then
'' Mettre à jour le TCD
    ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("DGN").CurrentPage = [B2].Value
End If


''Mise à jour du graphique
ActiveSheet.ChartObjects("Graphique 1").Activate
ActiveChart.SetElement (msoElementChartTitleAboveChart)
ActiveChart.ChartTitle.Text = [B2].Value

End Sub

Cela fonctionne très bien, sauf que je ne sais pas comment mettre dans la cellule B2 la première valeur de ma liste de validation.
Je souhaite que si je change la valeur de B1 (Produit), la valeur de B2(Matière) se mette sur la valeur (Tous) par défaut.

Si vous avez une idée, je suis prenneur.

Merci bien à vous tous
ZeB
 

Pierrot93

XLDnaute Barbatruc
Re : Quastion sur les Tableaux Croisés Dynamiques.

Bonjour,

peut être ceci :
Code:
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("DGN").CurrentPage = "(Tous)"

ou bien :
Code:
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("DGN").CurrentPage = "(All)"
selon ta version
 

PrinceCorwin

XLDnaute Occasionnel
Re : Quastion sur les Tableaux Croisés Dynamiques.

Hello, bonjour,
Merci @Pierrot,

En fait, je change les valeurs des filtres composant et matière dès le début :
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("DGN_CMP").ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("DGN").ClearAllFilters

C'est dans la liste de validation que je souhaite mettre la première valeur.
Je construit la liste des matières séparées par une virgule, et cette liste commence par "(Tous),".
Ex : "(Tous), Cuir amarante, vilédon rouge fauviste, veau végétal naturel"
Une liste de 4 éléments. Mais quand elle est créée, elle ne se met pas sur le premier élément (Tous).
Est-ce posible ?


Merci
 

PrinceCorwin

XLDnaute Occasionnel
Re : Quastion sur les Tableaux Croisés Dynamiques.

Hello,

Bon je vais contourner le problème en mettant la valeur souhaitée.
Avant de créer la liste des matière, je mets la cellule [B2]="(Tous)".. et l'affaire et dans le sac..
C'est pas très élégent, mais ca fonctionne..

merci les gens.
 

Discussions similaires

Statistiques des forums

Discussions
312 330
Messages
2 087 347
Membres
103 525
dernier inscrit
gbaipc