rafou29
Messages postés29Date d'inscriptionlundi 8 mars 2010StatutMembreDernière intervention14 avril 2010
-
7 avril 2010 à 11:19
rafou29
Messages postés29Date d'inscriptionlundi 8 mars 2010StatutMembreDernière intervention14 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.
rafou29
Messages postés29Date d'inscriptionlundi 8 mars 2010StatutMembreDernière intervention14 avril 20101 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
rafou29
Messages postés29Date d'inscriptionlundi 8 mars 2010StatutMembreDernière intervention14 avril 20101 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 ...
rafou29
Messages postés29Date d'inscriptionlundi 8 mars 2010StatutMembreDernière intervention14 avril 20101 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 ?