Problème Macro et TCD
Bonjour,
Je débute en VBA et j'ai un problème avec ma macro qui tente de créer un tableau croisé dynamique.
J'aurais voulu créer à partir du premier tableau pour chaque valeur "15", "9", ... jusqu'à "5" en bas un tableau qui me donne : parmi tous les 15 on affiche la case maximale de la colonne "aire", parmi tous les "9", la case maximale de la colonne "aire" et ainsi de suite pour chaque valeur de la colonne "Valeur de LBP".
Seulement mon TCD résultant ne comporte que les valeurs "4", "8", "9", "15" et je ne sais pas pourquoi car je le sélectionne (il me semble) correctement en entier avec :
Sheets("Arc H").Select
Range("B13").CurrentRegion.Select
(en faisant une copie, j'ai pu vérifier qu'il y a bien l'entièreté du tableau qui est copié... )
Je vous joins mon fichier, pour plus de simplicité, veuillez ne prendre en compte que l'onglet "Arc H" et ne considérer que le tableau qui commence en B13 et qui termine en E336.
Si quelqu'un veut bien m'aider à résoudre mon problème,
Merci d'avance,
Bonne journée,
Oriane
Bonjour,
tu ne prends pas toutes les lignes de tes données pour créer ton TCD.
voici une correction
Sub create_TCD()
'
Dim wsTCD As Object, plagedonnées As String, dl As Long
'supprimer feuille TCD si elle existe
Application.DisplayAlerts = False
On Error Resume Next
Sheets("TCD").Delete
On Error GoTo 0
Application.DisplayAlerts = True
'ajouter feuille TCD
Sheets.Add After:=Sheets(Sheets.Count)
Set wsTCD = ActiveSheet
wsTCD.Name = "TCD"
' déterminer le tableau de données
With Sheets("Arc H")
dl = .Cells(Rows.Count, "B").End(xlUp).Row
plagedonnées = .Range("B13:E" & dl).Address
End With
'créer le TCD
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
plagedonnées, Version:=xlPivotTableVersion10).CreatePivotTable _
TableDestination:="TCD!R1C1", TableName:="Tableau croisé dynamique4", _
DefaultVersion:=xlPivotTableVersion10
With wsTCD
.PivotTables("Tableau croisé dynamique4").AddDataField .PivotTables("Tableau croisé dynamique4").PivotFields("Valeur de LBP")
.PivotTables("Tableau croisé dynamique4").AddDataField .PivotTables("Tableau croisé dynamique4").PivotFields("Aire"), "Max de Aire", xlMax
With .PivotTables("Tableau croisé dynamique4").PivotFields( _
"Valeur de LBP")
.Orientation = xlRowField
.Position = 1
End With
' Supprime les totaux
.PivotTables("Tableau croisé dynamique4").PivotFields( _
"Somme de Valeur de LBP").Orientation = xlHidden
End With
End Sub
Bonjour,
Une autre proposition à étudier (Fichier xlsm !?).
Les données sont mises sous former de tableau (dynamique).
Cdlt.
Public Sub Create_PT()
Dim wb As Workbook
Dim wsData As Worksheet, wsPT As Worksheet
Dim rngPT As Range
Dim PTCache As PivotCache, PT As PivotTable
With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
Set wb = ActiveWorkbook
Set wsData = wb.Worksheets("Arc H")
Set rngPT = wsData.ListObjects("Tableau1").Range
On Error Resume Next
wb.Worksheets("TCD").Delete
On Error GoTo 0
Application.DisplayAlerts = True
Set PTCache = wb.PivotCaches.Create(xlDatabase, rngPT)
Set wsPT = wb.Worksheets.Add(after:=Worksheets(Worksheets.Count))
wsPT.Name = "TCD"
Set PT = PTCache.CreatePivotTable(wsPT.Cells(1), "PT_1")
With PT
.ManualUpdate = True
.AddFields RowFields:="Valeur de LBP"
With .PivotFields("Aire")
.Orientation = xlDataField
.Function = xlMax
End With
.RowAxisLayout xlTabularRow
.ColumnGrand = False
.ManualUpdate = False
End With
End Subbonjour à tous
un TCD ne se crée pas en automatique, car par définition de TCD, on ne le crée qu'une fois. Et non 10 ou 100 fois le même.
bonne journée à tous
Bonjour,
Merci beaucoup pour vos réponses, cela correspond à ce que je souhaitais faire !