Nommer le nouvel onglet d'un tcd issu d'une macro

Bonsoir chers membres,

je viens vous solliciter pour m'aider à solutionner le problème résumé dans le titre du sujet.

En effet, j'ai un message d'erreur lorsque j'essaye de lancer la macro.

ça me met erreur de compilation: argument nommé introuvable.

Je vous laisse découvrir le code généré par ma macro. (Je rappelle que je l'ai bidouillé après lecture de la solution

apportée en de @kakabouda qui avait semble-t-il un probleme similaire.

Sub macro4()

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"regroupement!R1C1:R5436C10", Version:=6).CreatePivotTable TableDestination:="Feuille12!R3C1", TableName:= _
"Tableau croisé dynamique4", DefaultVersion:=6

Sheets("Feuille12").Select
Sheets("Feuille12").Name = "Tableau croisé dynamique4"
With ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("code")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Taux")
        .Orientation = xlRowField
        .Position = 2
    End With
    ActiveSheet.PivotTables("Tableau croisé dynamique4").AddDataField ActiveSheet.PivotTables("Tableau croisé dynamique4"). _
        PivotFields("Encours"), "Somme de Encours", xlSum
    With ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("PF")
        .Orientation = xlColumnField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Source")
        .Orientation = xlPageField
        .Position = 1
    End With
    ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Source").CurrentPage = " Source PF"

end sub

Vous remerciant par avance

Excellemment votre

Bonjour,
Pas très clair !...
Joins un fichier pour une aide adpatée du forum.
Cdlt.

Option Explicit

Sub CreatePivotTable()
'Declaration des variables
Dim wb As Workbook
Dim wsData As Worksheet, wsPT As Worksheet
Dim rngData As Range
Dim PTCache As PivotCache, PT As PivotTable
Dim strName As String
Dim n As Long

    '1 - Initialisation des variables
    Set wb = ActiveWorkbook
    Set wsData = wb.Worksheets("Regroupement")
    Set rngData = wsData.Cells(1).CurrentRegion
    n = CountPivotsInWorkbook(wb)

    '2 - Creation nouvelle feuille pour TCD
    Set wsPT = wb.Worksheets.Add(after:=wb.Worksheets(Worksheets.Count))
    strName = "PT_" & n + 1
    wsPT.Name = strName

    '3 - Creation TCD
    Set PTCache = wb.PivotCaches.Create(Source:=xlDatabase, SourceData:=rngData)
    Set PT = PTCache.CreatePivotTable(wsPT.Cells(3, 1), strName)

    With PT
        .ManualUpdate = True
        .AddFields RowFields:=Array("Code", "Taux"), ColumnFields:="PF", PageFields:="Source"
        With .PivotFields("Encours")
            .Orientation = xlDataField
            .Function = xlSum
        End With
        .ManualUpdate = False
        .PivotFields("Source").CurrentPage = "Source PF"
    End With

End Sub

Private Function CountPivots(ByVal wb As Workbook) As Long
Dim ws As Worksheet, ptCount As Long
    For Each ws In wb.Worksheets
        ptCount = ptCount + ws.PivotTables.Count
    Next ws
    CountPivots = ptCount
End Function

Bonjour chers tous et puis merci infiniment très cher @Jean-Eric pour ton soutien énorme.

En effet je sais que ce serait plus parlant avec un fichier joint, mais mon entreprise ne permet pas l'export de fichier.

Pour ce qui est du code que tu m'as fournis, j'ai un message d'erreur au niveau collé ci-dessous; je reçois le message "Erreur de Compilation" "sub ou function non définie". (J'ai laissé le commentaire pour que tu te retrouves assez vite ).

Merci d'avance pour votre aide à tous.

Excellemment votre

    n = CountPivotsInWorkbook(wb)  

    '2 - Creation nouvelle feuille pour TCD
    

Re,
Une mise à jour avec les données sous forme de tableau structuré.
Cdlt.

4excellerateur.xlsm (22.71 Ko)
Option Explicit

Sub CreatePivotTable()
'Declaration des variables
Dim wb As Workbook
Dim wsData As Worksheet, wsPT As Worksheet
Dim rngData As Range
Dim PTCache As PivotCache, PT As PivotTable
Dim strName As String
Dim n As Long

    '1 - Initialisation des variables
    Set wb = ActiveWorkbook
    Set wsData = wb.Worksheets("Regroupement")
    Set rngData = wsData.Range("t_data").ListObject.Range
    n = CountPivots(wb)

    '2 - Creation nouvelle feuille pour TCD
    Set wsPT = wb.Worksheets.Add(after:=wb.Worksheets(Worksheets.Count))
    strName = "PT_" & n + 1
    wsPT.Name = strName

    '3 - Creation TCD
    Set PTCache = wb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=rngData)
    Set PT = PTCache.CreatePivotTable(tabledestination:=wsPT.Cells(3, 1), TableName:=strName)

    With PT
        .ManualUpdate = True
        .AddFields RowFields:=Array("Code", "Taux"), ColumnFields:="PF", PageFields:="Source"
        With .PivotFields("Encours")
            .Orientation = xlDataField
            .Function = xlSum
        End With
        .TableStyle2 = "PivotStyleLight1"
        .ManualUpdate = False
        .PivotFields("Source").CurrentPage = "Source PF"
    End With

    ActiveWindow.DisplayGridlines = False

End Sub

Private Function CountPivots(ByVal wb As Workbook) As Long
Dim ws As Worksheet, ptCount As Long
    For Each ws In wb.Worksheets
        ptCount = ptCount + ws.PivotTables.Count
    Next ws
    CountPivots = ptCount
End Function

Bonjour chers tous,

Merci encore Jean-Eric pour ta belle contrib.

Je t'avoue que depuis hier j'essaye de résorber une erreur de compilation qui est affichée mais j'y arrive pas. Il est marqué "erreur compilation" "Sub ou fonction non définie" et la partie ci-dessous du code est surlignée en bleu (uniquement le CountPivots)

n = CountPivots(wb)

    '2 - Creation nouvelle feuille pour TCD

Je ne sais donc pas si il fallait que je le définisse en tant que variable (déjà que c'est encore une notion compliquée pour moi).

Mais merci tout de même et je serai bien ravi si tu as une idée de la solution.

Bien excellement votre

Bonsoir,
As-tu correctement copié la fonction CountPivots ?
Cdlt.

Bonjour chers tous,

Salut @Jean, en effet je crois avoir bien copié la fonction CounPivots mais rien n'y fait.

J'ai réussi à créer un modèle similaire à ce que je veux.

Je voudrais en effet faire une macro qui va générer le tcd ici en copie sur l'onglet suivant celui de référence.

ça fait plusieurs jours que je m'y essaye mais rien n'y fait, je ne sais plus à quel saint me vouer...

merci pour toute aide

8classeur-test.xlsm (28.80 Ko)

Bonjour,
Une nouvelle proposition.
Cdlt.

9classeur-test.xlsm (26.35 Ko)
Public Sub CreatePivotTable()
'Declaration des variables
Dim wb As Workbook
Dim wsData As Worksheet, wsPT As Worksheet
Dim rngPT As Range
Dim PTCache As PivotCache, PT As PivotTable
Dim strName As String
Dim n As Long

    '1 - Initialisation des variables
    Set wb = ActiveWorkbook
    Set wsData = wb.Worksheets("Consolide")
    Set wsPT = wb.Worksheets("TCD")
    Set rngPT = wsData.Range("t_données").ListObject.Range

    '2 - Suppression TCD existant
    On Error Resume Next
    wsPT.PivotTables("TCD_1").TableRange2.Clear
    On Error GoTo 0

    '3 - Creation TCD
    Set PTCache = wb.PivotCaches.Create( _
        SourceType:=xlDatabase, _
        SourceData:=rngPT)
    Set PT = PTCache.CreatePivotTable( _
        tabledestination:=wsPT.Cells(3, 1), _
        TableName:="TCD_1")

    '4 - Mise en forme TCD
    With PT
        .ManualUpdate = True
        .AddFields RowFields:=Array("Code I", "TxP"), ColumnFields:="Sou"
        With .PivotFields("Enc")
            .Orientation = xlDataField
            .Position = 1
            .Function = xlSum
            .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 ;"
        End With
        With .PivotFields("Pf")
            .Orientation = xlDataField
            .Position = 2
            .Function = xlSum
            .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 ;"
        End With
        .TableStyle2 = "PivotStyleLight1"
        .RowAxisLayout xlTabularRow
        .DisplayFieldCaptions = False
        .ManualUpdate = False
    End With

End Sub
Rechercher des sujets similaires à "nommer nouvel onglet tcd issu macro"