TCD+filtres=casse-tête

Résolu
rafou29 Messages postés 29 Date d'inscription lundi 8 mars 2010 Statut Membre Dernière intervention 14 avril 2010 - 7 avril 2010 à 11:19
rafou29 Messages postés 29 Date d'inscription lundi 8 mars 2010 Statut Membre Dernière intervention 14 avril 2010 - 14 avril 2010 à 11:15
Bonjour,

J'ai créer des tableaux croisés dynamiques (x,y,z) dans différents onglets dont les résultats sont affichés sous forme d'histogramme empilé. Mes TCD utilisent, tous, les valeurs issues de ma base de données situé dans l'onglet "Sheet1".

Or il m'arrive parfois d'appliquer des filtres automatiques sur ma base de données afin d'affiner mes graphes.

Mon problème: Je souhaite, par exemple, observer mes données entre le 3/8/2010 et le 3/9/2010, ma base de données va me filtrer les autres valeurs mais mes TCD vont refuser de m'afficher UNIQUEMENT les valeurs "visibles".
[u]
Voici le code que j'utilise pour créer un TCD et son histogramme empilé:/u

Dim plage1, maplage1

Set plage1 = Sheets("Sheet1").Range("A1").CurrentRegion

Application.ScreenUpdating = False
Sheets("Sheet1").Activate
Set maplage1 = Range("A1").CurrentRegion
maplage1.Name = "TCD"
Sheets("1").Activate

    With ActiveSheet
        .PivotTableWizard SourceType:=xlDatabase, SourceData:="TCD", TableDestination:="R1C1", TableName:="TCD1"
        .PivotTables("TCD1").SmallGrid = False
        .PivotTables("TCD1").AddFields RowFields:="Date", ColumnFields:=Array("Type d'arrêt")
        .PivotTables("TCD1").PivotFields("%").Orientation = xlDataField
        .PivotTables("TCD1").PivotFields("x").Orientation = xlPageField 'ajout d'un filtre
    End With
    With Application
        .CommandBars("PivotTable").visible = False
        .ScreenUpdating = False
    End With
                               
    Charts.Add
    ActiveChart.ChartType = xlColumnStacked
    ActiveChart.SetSourceData Source:=Sheets("1").Range("A3:E6"), PlotBy:= _
    xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="1"
    ActiveChart.SeriesCollection(1).Select
    ActiveChart.ChartArea.Select
    With ActiveChart
        .HasTitle = True
    'Si l'on choisit "x" dans la combobox30 alors le titre du graphe correspondra à la valeur de la Textbox40 autrement le titre sera ""
    If ComboBox30.Value "x" Then .ChartTitle.Characters.Text TextBox40.Value Else .ChartTitle.Characters.Text = ""
        .Axes(xlCategory, xlPrimary).HasTitle = False
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "%"
    End With
    ActiveChart.HasLegend = True
    ActiveChart.HasDataTable = False

    ActiveChart.Axes(xlCategory).Select
    With ActiveChart.Axes(xlCategory)
        .CrossesAt = 1
        .TickLabelSpacing = 1
        .TickMarkSpacing = 1
        .AxisBetweenCategories = True
        .ReversePlotOrder = False
    End With
    'code permettant de positionner le graphe sur la feuille Excel
    With Sheets("1").ChartObjects(1)
        .Top = 125 'position verticale graphique
        .Left = 300 'position horizontale graphique
    End With
    'code permettant de controler l'affichage des valeurs en abscisse
    With ActiveChart.Axes(xlCategory).TickLabels
    .NumberFormat = "m/d/yyyy" 'affichage des dates
    .Orientation =  45 'affichage à 45° des valeurs en abscisse
    End With


Voici le code que j'emploie pour filtrer mes valeurs en fonction de leur date:

Sheets("Sheet1").Select

With Worksheets("Sheet1") 'Code permettant de remettre à zéro les filtres automatiques
    If .FilterMode  = True Then .ShowAllData
End With

Dim a As Single
Dim b As Single

a = DTPicker10.Value
b = DTPicker11.Value

Selection.autofilter Field:=3, Criteria1:=">=" & a, Operator:=xlAnd, Criteria2:="<=" & b 'filtre la colonne "Date" en fonction des 2 dates choisies dans les DTPicker


L'idéal serait que je puisse filtrer mon abscisse "Date" avec mon filtre automatique.

Merci de votre attention !

5 réponses

rafou29 Messages postés 29 Date d'inscription lundi 8 mars 2010 Statut Membre Dernière intervention 14 avril 2010 1
14 avril 2010 à 11:15
Pour info, j'ai trouvé la solution à mon problème.

Je copie et colle mes données après avoir été filtrer par mon filtre auto. "Date". Ensuite j'ai utilisé l'enregistreur de macro pour sélectionner mes données, créer mon TCD et mon histogramme empilé.

Ce n'est pas la méthode la plus directe mais comme elle me permet d'obtenir ce que je souhaite, je ne serais pas plus pointilleux.

Je remercie ceux qui ont jeté un oeil à mon soucis et me félicite d'avoir trouver la solution car j'ai fait tout le topic
1
rafou29 Messages postés 29 Date d'inscription lundi 8 mars 2010 Statut Membre Dernière intervention 14 avril 2010 1
8 avril 2010 à 08:47
Bonjour,

J'ai peut être trouvé un début de solution à mon problème avec l'enregistreur de macro.
Voici le code qu'il m'a donné:

With ActiveSheet.PivotTables("TCD1").PivotFields("Date")
        .PivotItems("3/9/2010").visible = False
        .PivotItems("3/15/2010").visible = False
        .PivotItems("3/25/2010").visible = False
    End With


Maintenant ce que je souhaiterais c'est qu'il émette une condition qui me permette d'automatiser de manière à ce qu'en fonction des 2 dates que je choisis dans mes DTPicker il ne m'affiche dans mon Tableau Croisé Dynamique que les dates comprises entre ces 2 dates.

Le filtre auto. que j'employais ressemblait à cela:

Sheets("Sheet1").Select

With Worksheets("Sheet1") 
    If .FilterMode = True Then .ShowAllData
End With

Dim a As Single
Dim b As Single

a = DTPicker10.Value
b = DTPicker11.Value

Selection.autofilter Field:=3, Criteria1:=">=" & a, Operator:=xlAnd, Criteria2:="<=" & b filtre la colonne "Date" en fonction des 2 dates choisies dans les DTPicker 


Cela me permettrait ainsi de résoudre mes problèmes sur 2 de mes 3 TCD. En espérant que mon message vous inspire plus ...


Merci par avance de votre aide.
0
rafou29 Messages postés 29 Date d'inscription lundi 8 mars 2010 Statut Membre Dernière intervention 14 avril 2010 1
8 avril 2010 à 14:54
J'ai trouvé un code qui pourrait répondre à mes attentes mais maintenant ma question est: Ou dois-je le mettre pour pouvoir faire en sorte que mes TCD ne prennent en compte que les cellules visibles de mon tableau ?

Mon code :

Selection.SpecialCells(xlCellTypeVisible).Select 
0
rafou29 Messages postés 29 Date d'inscription lundi 8 mars 2010 Statut Membre Dernière intervention 14 avril 2010 1
9 avril 2010 à 15:18
Personne n'a une petite idée ?
0

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

Posez votre question
rafou29 Messages postés 29 Date d'inscription lundi 8 mars 2010 Statut Membre Dernière intervention 14 avril 2010 1
12 avril 2010 à 08:53
Personne n'a été inspiré pendant ce week-end ? car mon problème reste d'actualité et assez urgent !

Merci
0
Rejoignez-nous