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.
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
Bonjour,
Une nouvelle proposition.
Cdlt.
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