Paramétrer le champ valeur (datafields) d'un tcd
Bonjour à tous,
Pour les besoins d'un graphique bâton avec avec des données à la demi-journée cumulées sur un même jour de la semaine (lundi matin et après midi cumulés sur baton lundi, etc sur mardi, mer...), j'utilise un tcd.
Je place en Axe (catégories = lignes) ma donnée "jour", en légende (série = colonnes) ma donnée demi-journée.
Je dispose de 5 indicateurs fonction du niveau d'avancement de mes utilisateurs dans leur processus d'usage.
chacun de ces niveau est donc un champ de mon tcd ("connexions", "instances", etc...)
Afin de faciliter l'affichage des graphs pour chacun de ces 5 indicateurs sans passer par :
- affichage des champs du tcd,
- désélection du champ Valeur,
- sélection du nouveau champ valeur,
J'implémente une macro pour changer mon datafield si changement de ma sélection
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim tcd As PivotTable
Set tcd = Sheets("daily").PivotTables("tcd_dataKPI")
If Target.Address = "$J$2" And Target.count = 1 Then
SendKeys "%{down}"
If Target = "" Then
Target = Range("Liste")(1)
End If
With tcd
.PivotCache.Refresh
.AddDataField tcd.PivotFields(Target), "Somme de " & Target, xlSum
End With
End If
End Submais j'obtiens le msg suivant :
Impossible de lire la propriété PivotFields de la classe Pivot Table.
Dans ma variable Target le débogage me donne pourtant bien la valeur sélectionnée en J2 donc le nom du champ à afficher.
Merci par avance de m'aider à comprendre ce qui ne va pas dans ce que j'ai défini ?
Bonjour,
Une proposition à étudier.
Cdlt.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim pt As PivotTable, pf As PivotField
If Target.Address = "$J$2" Then
Application.ScreenUpdating = False
Set pt = Me.PivotTables(1)
With pt
For Each pf In .DataFields
pf.Orientation = xlHidden
Next pf
With .PivotFields(Target.Text)
.Orientation = xlDataField
.Function = xlSum
.Caption = ChrW(931) & " " & Target.Text
End With
End With
End If
End SubExcellentissime
Du coup en conservant simplement un
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$J$2" And Target.count = 1 Then
SendKeys "%{down}"
End If
End Subje conserve qui plus est la fonctionnalité qui ouvre automatiquement ma liste de valeur en cliquant sur $J$2.
C'est absolument tout ce que je souhaitais !!!
1000 Mercis !!!
TF