Filtrer TCD depuis IHM
Résolu
debutanteVBA
-
Zoul67 Messages postés 2001 Statut Membre -
Zoul67 Messages postés 2001 Statut Membre -
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
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
A voir également:
- Filtrer TCD depuis IHM
- Tcd excel - Guide
- Code ihm non valide free ✓ - Forum Huawei
- Actualiser tcd google sheet - Forum Bureautique
- Ihm terminé ✓ - Forum LG
- Champs calculé tcd formule si ✓ - Forum Excel
1 réponse
Bonjour,
Le code généré automatiquement est un peu bizarre.
Essaie ça :
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+
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+
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 :)
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+
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
Je ne peux pas t'aider plus à l'aveuglette
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