Afficher la liste des PivotItems dans une collone

camaytoc Messages postés 4 Date d'inscription mercredi 25 janvier 2012 Statut Membre Dernière intervention 26 janvier 2012 - 26 janv. 2012 à 18:34
camaytoc Messages postés 4 Date d'inscription mercredi 25 janvier 2012 Statut Membre Dernière intervention 26 janvier 2012 - 26 janv. 2012 à 20:22
Bonjour,

J'ai une liste déroulante qui doit contenir la liste complète des PivotItems d'un PivotFieds en particulier. Je veux donc afficher la liste dans une collone et que cette liste s'actualise au moins à l'ouverture du document.

J'ai essayer plusieurs choses grapillées sur Internet, mais mon niveau VBA ne me permet pas de modifier comme je le souhaite le code.

J'ai besoin d'aide.

Merci!

6 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
26 janv. 2012 à 18:46
Bonjour,

J'ai essayer plusieurs choses grapillées sur Internet, mais mon niveau VBA ne me permet pas de modifier comme je le souhaite le code.


"Sur Internet" !
Et pourquoi pas d'abord dans ton aide VBA ?
En y recherchant PivoItems, tu y trouve presque le code dont tu as besoin !
Montre-nous ce que tu as au moins tenté

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
camaytoc Messages postés 4 Date d'inscription mercredi 25 janvier 2012 Statut Membre Dernière intervention 26 janvier 2012
26 janv. 2012 à 19:29
Bonjour,

Comme je le mentionnait, je n'ai pas de formation en VBA, mais je m'efforce de compléter un outil en "standalone" sur mon projet.

Mon point de départ est bien sûr l'aide VBA. J'ai essayé avec PivotItem.ChildItems mais je me perd.

Voici le code que j'ai tenter d'adapter, mais il ne liste que le PivotItems visible.


Sub ListPivotFields()
Dim lRow As Long
Dim wsList As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Dim strList As String
Dim strLoc As String
On Error GoTo errHandler

Set pt = ActiveSheet.PivotTables(1)
strList = "Pivot_Fields_List"

Application.DisplayAlerts = False
On Error Resume Next
Sheets(strList).Delete
On Error GoTo errHandler

Set wsList = Sheets.Add
lRow = 2

With wsList
.Name = strList
.Cells(1, 1).Value = "Caption"
.Cells(1, 2).Value = "Source Name"
.Cells(1, 3).Value = "Location"
.Cells(1, 4).Value = "Position"
.Cells(1, 5).Value = "Sample Item"
.Cells(1, 6).Value = "Formula"
.Cells(1, 7).Value = "Description"
.Rows(1).Font.Bold = True

For Each pf In pt.PivotFields
If pf.Caption <> "Values" Then
.Cells(lRow, 1).Value = pf.Caption
.Cells(lRow, 2).Value = pf.SourceName
Select Case pf.Orientation
Case xlHidden
strLoc = "Hidden"
Case xlRowField
strLoc = "Row"
Case xlColumnField
strLoc = "Column"
Case xlPageField
strLoc = "Page"
Case xlDataField
strLoc = "Data"
End Select
.Cells(lRow, 3).Value = strLoc
.Cells(lRow, 4).Value = pf.Position

On Error Resume Next
If pf.PivotItems.Count > 0 Then
.Cells(lRow, 5).Value = pf.PivotItems(1).Value
End If
On Error GoTo errHandler

'print the formula for calculated fields
If pf.IsCalculated = True Then
.Cells(lRow, 6).Value = _
Right(pf.Formula, Len(pf.Formula) - 1)
End If

lRow = lRow + 1
End If
Next pf
End With

exitHandler:
Application.DisplayAlerts = True
Exit Sub
errHandler:
MsgBox "Could not create list"
Resume exitHandler

End Sub



Code pris sur http://www.contextures.com/excel-vba-pivot-table-field-list.html#Tutorials
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
26 janv. 2012 à 19:49
Dès lors que tu viens ici (un forum de développeur), tu n'es plus en situation de "standalone" ! Non ?
Tu te mets dans la peau d'un développeur et tu apprends les bases.
Je ne veux pas analyser ton code (pas la moindre de ses lignes) tant que tu n'auras pas supprimé cette utilisation de On error GoTo errHandler "cache misère" et ne nous auras pas dit, le cas échéant, l'erreur éventuelle dénoncée.

Quelques précisions, tout de même (et elles ressortent de la lecture de l'aide VBA)

La collection PivotTables est composée d'objets PivotTable identifiables par leur index chaque objet Pivotable est composé de collections PivotFields.
Chaque collection PivotFields est composée d'objets PivotField
Un objet PivotField contient une collection PivotItems composée d'objet PivotItem
Chaque objet PivotItem a ses propriétés propres.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
camaytoc Messages postés 4 Date d'inscription mercredi 25 janvier 2012 Statut Membre Dernière intervention 26 janvier 2012
26 janv. 2012 à 20:07
Voici le code que j'ai fait et que j'utilise. Le code mentionné plus haut est tiré d'un site où j'ai essayer de l'adapter pour mes fins, sans succès.

Je travail dans le développement de jeux vidéo et je me construit un outil de profillage mémoire.

Alors dans la feuille où j'ai ma liste déroulante, j'ai ce Worksheet_Change:


Private Sub Worksheet_Change(ByVal Target As Range)
If Range("C3") = "xbox360" Then Call TCDxbox360
If Range("C3") = "WII" Then Call TCDwii
If Range("C3") = "ps3" Then Call TCDps3
If Range("C3") = "PC" Then Call TCDpc
End Sub



Ensuite le code qui bind les string sélectionnées dans la liste déroulante avec le PivotItems correspondant (je cache tout et puis j'affiche cette item).



Dim monPivIt As Object, Mavariable
plateform = "xbox360"

Sheets("XML Parser").Visible = True
Sheets("XML Parser").Select
Application.ScreenUpdating = False

With ActiveSheet.PivotTables("XML_Parser").PivotFields("Console")
For Each monPivIt In .PivotItems
monPivIt.Visible = True
Next
On Error Resume Next
For Each monPivIt In .PivotItems
If monPivIt.Name <> plateform Then monPivIt.Visible = False
Next
End With

Application.ScreenUpdating = True

Sheets("XML Parser").Visible = False
Application.Goto Sheets("initialSetup").Range("A1")

Errormask:
MsgBox "Plateform not present in XGM LoadUnitType!"
End Sub



Comme vous pouvez le constater, vue que ma liste déroulante provient d'une source entré à la main, la sélection peut entrainer une erreur, auquel j'ai tenté d'afficher un message d'erreur (cela ne fonctionne pas, j'obtien toujours le message). Mais peut m'importe puisque j'ai décidé de créer ma source pour la liste déroulante a partir d'une macro VB qui va lister tous les items de mon .PivotTables("XML_Parser").PivotFields("Console")


Voilà, j'espère que cela n'est pas trop confus.
Merci!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
26 janv. 2012 à 20:12
et maintenant : un autre "cache misère" : On error resume next. !
et apparemment : dont le sens n'est pas compris, puisque tu dis :
j'obtien toujours le message

(et pour cause)
Bonne chance !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
camaytoc Messages postés 4 Date d'inscription mercredi 25 janvier 2012 Statut Membre Dernière intervention 26 janvier 2012
26 janv. 2012 à 20:22
Mais je disais aussi: "Mais peut m'importe puisque j'ai décidé de créer ma source pour la liste déroulante a partir d'une macro VB qui va lister tous les items de mon .PivotTables("XML_Parser").PivotFields("Console")".

En fait j'ai bien noté votre recommandation, mais j'ai poster ce message pour obtenir de l'aide afin de créer une liste des PivotItems de mon PivotFiels "console", ainsi je n'utiliserai plus le code précédemment cité contenant tous ces "On error resume next"
0