Afficher les détails d'un TCD en permanence
J'ai un tableau croisé dynamique issue d'une base de données comportant des milliers de ligne et une vingtaine de colonnes
J'aurais besoin d'afficher en permanence dans un onglet les détails d'une cellule du tableau croisé dynamique (une cellule faisant partie de la ligne total général)
Manuellement je peux le faire en cliquant sur boutton droit, afficher les détails , ou avec le code vba (Selection.ShowDetail = True), ca m'ouvre bien un nouvel onglet avec ma base de données filtrés..
Comment faire pour que les détails de cet onglet s'actualise en permanence avec ttes modifications du Tableau croisé dynamique ??? Et l'actualisation doit tjrs se faire dans le meme onglet
Un fichier juste pr l'exemple ci joint
je voudrais que l'onglet qui s'ouvre quand on clique sur afficher les détails s'actualise en permanence à ttes modifications du TCD !
Bonjour
Fournir un exemple aussi pauvre et manifestement sans aucun rapport avec la réalité n'aide pas...
Il n'existe aucun lien entre l'extrait et le TCD donc pas d'actualisation possible.
Je repose donc les mêmes questions que dans la 1ère mouture de ta demande : entre 2 extractions qu'est ce qui change ?
bonjour, on a pas de choix, un détail est toujours dans une nouvelle feuille, alors, il faut copier&coller le contenu de cette feuille dans "Détails" ...
Sub TCD_Detail()
With Sheets("Base de données et TCD").PivotTables(1).TableRange1
.Cells(.Rows.Count, .Columns.Count).ShowDetail = True 'detail du Total
End With
Set c = ActiveSheet.Range("A1").CurrentRegion 'les détails dans une nouvelle feuille
With Sheets("Détails") 'votre feuille "Details"
.Range("A1").Resize(, c.Columns.Count).EntireColumn.Clear 'vider x colonnes
c.Copy .Range("A1") 'copier les détails
End With
Application.DisplayAlerts = False
ActiveSheet.Delete 'delete nouvelle feuille
Application.DisplayAlerts = False
End SubMerci pour le code qui fait exactement ce que je recherchais !
nb j'affiche mon code retouché qui me permet d'avoir des courbes en fonction des filtres du tableau dynamique
Sub graphique()
For Each Legraph In ActiveSheet.ChartObjects
Legraph.Delete
Next
Sheets("Détails").Select
Application.DisplayAlerts = False
ActiveSheet.Delete 'delete nouvelle feuille
Application.DisplayAlerts = True
With Sheets("Résultats").PivotTables(1).TableRange1
.Cells(.Rows.Count, .Columns.Count).ShowDetail = True 'detail du Total
End With
Range("AE1").Select
ActiveCell.FormulaR1C1 = "Cumul"
Range("AE2").Select
ActiveCell.FormulaR1C1 = "=SUM(R2C20:RC[-11])"
Sheets("Résultats").Select
On Error Resume Next
ActiveSheet.PivotTables("Tableau SNG").PivotCache.Refresh
Range("M30").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlLine
ActiveChart.SetSourceData Source:=Sheets("Détails").Columns("AE:AE")
Application.DisplayAlerts = True
On Error GoTo 0
End Subet dans this workbook
Private Sub Workbook_NewSheet(ByVal Sh As Object)
If ActiveSheet.ListObjects.Count = 0 Then Exit Sub
If ExistWorkSheet("Détails") = False Then ActiveSheet.Name = "Détails"
End Sub
Function ExistWorkSheet(FEUILLE) As Boolean
'Principe : évalue la formule Feuille!A1 et vérifie si elle renvoie #REF
ExistWorkSheet = Evaluate("ISREF('" & FEUILLE & "'!A1)")
End Functionvoilà alors je ne sais pas si mon code est idéal mais en tt les cas ca marche parfaitement
Merci bcp à tt le monde, je bloquais completement pr afficher des courbes en fonction des filtres de mon tableau dynamique désormais ca marche... (je n'ai aps réussi d'une autre façon)
bonjour,
je ne sais pas exactement ce que vous voulez montrer dans le graphique, mais il faut éviter "Select" & "Activate" dans son code VBA
Sub graphique()
Dim iDétails
With Sheets("Résultats") 'dans cette feuille se passe presque tout, sauf les détails
For Each Legraph In .ChartObjects 'les chartobjets dans cette feuille
Legraph.Delete
Next
On Error Resume Next 'continuer si la feuille "Détails" n'existe pas
Application.DisplayAlerts = False 'no messages
Sheets("Détails").Delete 'delete l'ancienne feuille "Détails"
Application.DisplayAlerts = True
On Error GoTo 0
With .PivotTables("Tableau SNG") 'ce tableau croisé dynamique dans Résultats
.PivotCache.Refresh 'actualiser
With .TableRange1 'dans cette plage
.Cells(.Rows.Count, .Columns.Count).ShowDetail = True 'detail de la cellule TOTAL
End With
End With
ActiveSheet.Name = "Détails" 'renommer la nouvelle feuille créé par showdetail
iDétails = Range("A1").CurrentRegion.Rows.Count - 1 '=nombre de lignes sans l'entête
Range("AE1").Value = "Cumul" 'sans select
Range("AE2").FormulaR1C1 = "=SUM(R2C20:RC[-11])"
Application.Goto .Range("A1") 'retourner vers "Résultat"
Application.CutCopyMode = False
Set c = .Range("M20") 'cellule à gauche en haut du graphique
With ActiveSheet.Shapes.AddChart(xlLine, c.Left, c.Top, 100, 100) 'créer dans cette cellule un graphique xlLine avec ces dimensions
With .Chart
With .FullSeriesCollection(1) 'la première série
.Name = Sheets("Détails").Range("D1") 'nom de la série
.XValues = Sheets("Détails").Range("A2").Resize(iDétails) 'X-valeurs
.Values = Sheets("Détails").Range("D2").Resize(iDétails) 'Y-valeurs
End With
End With
End With
End With
End SubMerci pr votre code modifié mais il bugg sur
With .FullSeriesCollection(1) 'la première série
bonjour,
votre Excel2010 ne connait pas encore ".FullSeriesCollection", si vous supprimez le "Full", donc ".Seriescollection", ca fonctionne ?
je vois aussi que le graphique est assez petit, vous pouvez changer le largeur et hauteur avec ces 2 derniers chiffres
With ActiveSheet.Shapes.AddChart(xlLine, c.Left, c.Top, 400, 300)
Merci bcp ça fonctionne