Bonjour,
Je ne sais toujours pas pour quelle raison, tu utilises un format de fichier xls (Excel 97-2003) !...
Sinon, ta procédure initiale peut se résumer à celle-ci.
Elle doit être enregistrée dans ton classeur de macros personnelles (Personal.xlsb).
Elle doit être exécutée à partir de la feuille active du classeur.
L'idéal, étant de placer un bouton dans la barre d'accès rapide pour l'exécuter.
* Ne pas lancer 2 fois la procédure dans le même classeur (pas prévu de sécurité pour cet exemple).
A te relire.
Cdlt.
Public Sub CreatePivotTable()
'D?claration des variables
Dim wb As Workbook
Dim ws As Worksheet
Dim rngPT As Range
Dim PTCache As PivotCache
Dim PT As PivotTable
'Classeur actif
Set wb = ActiveWorkbook
'Donn?es source (plage de cellules) du TCD ? cr?er
'? partir de la feuille active
Set rngPT = ActiveSheet.Cells(1).CurrentRegion
'Cr?ation du cache du TCD
Set PTCache = wb.PivotCaches.Create(xlDatabase, rngPT)
'Insertion feuille pour restitution du TCD
Set ws = wb.Worksheets.Add(after:=wb.Worksheets(Worksheets.Count))
ws.Name = "TCD"
'Cr?ation du TCD
Set PT = PTCache.CreatePivotTable(ws.Cells(3, 1), "TCD_1")
'Mise en forme du TCD
With PT
.ManualUpdate = True
.AddFields RowFields:="Country"
With .PivotFields("Actual__YTD_")
.Orientation = xlDataField
.Function = xlSum
.NumberFormat = "# ##0,00_ ;[Red]-# ##0,00\ ;"
.Caption = ChrW(931) & " Actual__YTD_"
End With
.RowAxisLayout xlTabularRow
.TableStyle2 = "PivotStyleMedium1"
.ManualUpdate = False
End With
ActiveWindow.DisplayGridlines = False
End Sub