Filtrer TCD depuis IHM

Résolu/Fermé
debutanteVBA - 17 oct. 2013 à 10:21
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 - 21 oct. 2013 à 10:34
Bonjour,

Bonjour,
je dispose de TCD sur 2 feuilles differentes filtrés par date et par scenario type
j'ai créee un user form avec un textbox "date et un combox scenario type
je souhaite changer les filtre des 2 TCD depuis l'IHM
vu que je débute en VBA j'ai enregistré une macro pour avoir le code que je n'arrive pas a adapter pour l'automatiser
Sub change_filter()
'
' change_filter Macro
'
Dim prodWorksheet As Worksheet, testWorksheet As Worksheet
Dim IHMdate As String
Dim ScenType As String
Set prodWorksheet = ThisWorkbook.Worksheets("ProdDATA")
Set testWorksheet = ThisWorkbook.Worksheets("TestDATA")
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''' variable a insérer pour automatiser les changement de filtres via ihm
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
IHMdate = UserForm1.TB_Date.Value
ScenType = UserForm1.CB_scenariotype.Value
'
prodWorksheet.Select
prodWorksheet.PivotTables("PROD").PivotFields( _
"[As Of Date].[As Of Date].[As Of Date]").ClearAllFilters
prodWorksheet.PivotTables("PROD").PivotFields( _
"[As Of Date].[As Of Date].[As Of Date]").CurrentPageName = _
"[As Of Date].[As Of Date].&[20131007]"
ActiveSheet.PivotTables("PROD").PivotFields( _
"[Scenario].[Scenario Type].[Scenario Type]").ClearAllFilters
prodWorksheet.PivotTables("PROD").PivotFields( _
"[Scenario].[Scenario Type].[Scenario Type]").CurrentPageName = _
"[Scenario].[Scenario Type].&[DELTABASISINTERCUR]"
testWorksheet.Select
testWorksheet.PivotTables("TEST").PivotFields( _
"[As Of Date].[As Of Date].[As Of Date]").ClearAllFilters
testWorksheet.PivotTables("TEST").PivotFields( _
"[As Of Date].[As Of Date].[As Of Date]").CurrentPageName = _
"[As Of Date].[As Of Date].&[20131007]"
testWorksheet.PivotTables("TEST").PivotFields( _
"[Scenario].[Scenario Type].[Scenario Type]").ClearAllFilters
testWorksheet.PivotTables("TEST").PivotFields( _
"[Scenario].[Scenario Type].[Scenario Type]").CurrentPageName = _
"[Scenario].[Scenario Type].&[DELTABASISINTERCUR]"


après plusieurs syntaxes essayées , dans le code généré par excel je n'ai pas trouvée la bonne syntaxe pour mettre mes 2 variables décalarés afin d'automatiser le changement de date et de scenario type
merci pour votre préciseuse aide

1 réponse

Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
17 oct. 2013 à 14:09
Bonjour,

Le code généré automatiquement est un peu bizarre.
Essaie ça :
    For Each sel In ActiveSheet.PivotTables("PROD").PivotFields("Date").PivotItems
ActiveSheet.PivotTables("PROD").PivotFields("Date").PivotItems(sel.Name).Visible = True
Next sel
For Each sel In ActiveSheet.PivotTables("PROD").PivotFields("Date").PivotItems
If sel.Name <> IHMdate Then
ActiveSheet.PivotTables("PROD").PivotFields("Date").PivotItems(sel.Name).Visible = False
End If
Next sel

NB : avec les TCD à aucun moment il n'est possible d'avoir toutes les valeurs décochées, d'où l'idée de cocher tout puis de décocher celles qui ne correspondent pas à ta valeur saisie das le UserForm.

A+
0
merci pour l'aide j'ai essayée d'adapter votre code

au fait le sel vous le éclarez de quel type ? string , variant...?

voici mon code réadapter mais en erreur


Sub changer_fi()

'
' changer_filter_zoom Macro

Dim prodWorksheet As Worksheet, testWorksheet As Worksheet
Dim IHMdate As String
Dim ScenType As String
Dim ScenID As String
Dim TradeTyp As String
Dim Book As String
Dim sel As Variant

Set prodWorksheet = ThisWorkbook.Worksheets("ProdDATA")
Set testWorksheet = ThisWorkbook.Worksheets("TestDATA")


IHMdate = UserForm1.TB_Date.Value
ScenType = UserForm1.CB_scenariotype.Value

For Each sel In prodWorksheet.PivotTables("Tableau croisé dynamique3").PivotFields("AS of Date").PivotItems
prodWorksheet.PivotTables("Tableau croisé dynamique3").PivotFields("AS of Date").PivotItems(sel.Name).Visible = True
Next sel

For Each sel In prodWorksheet.PivotTables("Tableau croisé dynamique3").PivotFields("AS of Date").PivotItems
If sel.Name <> IHMdate Then
prodWorksheet.PivotTables("Tableau croisé dynamique3").PivotFields("AS of Date").PivotItems(sel.Name).Visible = False
End If
Next sel

End Sub


encore merci pour l'aide :)
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
17 oct. 2013 à 15:11
Re,

Il faut faire un boulot d'analyse (je parierais sur la date qui n'est pas reconnue ce qui amène à décocher toutes les valeurs)... :
- à quel niveau le code bloque-t-il ?
- la première boucle For s'exécute-t-elle correctement ?
- ...

Peux-tu mettre ton fichier à disposition sur https://www.cjoint.com/ ?

Je n'avais pas typé "sel", mais si on m'avait mis le couteau sous la gorge, j'aurais aussi choisi Variant.
Par curiosité : pourquoi utiliser un UserForm pour filtrer ?

A+
0
au fait le message d'erreur se fait au niveau de la 1ere boucle
ici :

For Each sel In prodWorksheet.PivotTables("Tableau croisé dynamique3").PivotFields("AS of Date").PivotItems

et le msg dis " impossible de lire la propriété PivotFields de la classe pivotItable


cette erreur apparait en 2eme apres un msg me demandant de déclarer la variable sel

je suis au bureau je n'arrive pas a mettre mon fichier en ligne :s et ca me bloque


si vous avez une idée je suis prenante
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
17 oct. 2013 à 15:30
Pourquoi le TCD ne s'appelle-t-il plus prod ? Est-ce que tu en génères un par Macro ?
Je ne peux pas t'aider plus à l'aveuglette
0
au fait le tcd ne s'appelle plus PROD parce que je tester ton code sur une version antecedante

mais cela ne change rien car j'ai adapté le code

sinon non je n'arrive pas a generer un TCD par macro( meme si c'était mon 1er souhait ) car j'ai un CUBE OLAP derrier et non une base de donnée que je peux intérroger ou une plage de données dans une feuille

du coup c'est vraiment juste un ensemble de champs sur un USERFORM qui correspondent aux filtres établis dans une feuille


le but et de modifier ces filtres via IHM pour éviter de modifier a la main a chaque fois ( car a la base j'ai 2 TCD a gérer )


merci de la patience et de l'aide je sais que ce n'est pas évident sans fichier
0