Boucle dans un TCD
Bonjour à la communauté VBA,
Cela fait plusieurs jours que je me casse la tête sur un truc qui est certainement très simple pour la grande majorité d'entre vous mais, pas pour moi!
J'ai un fichier avec un TCD qui est filtré par un filtre Conseiller/ère. Le but de la macro que je cherche à faire, c'est de montrer tous les détails sur le CORP1 de l'enregistrer (dans le fichier annexé, cela signifie la plage A1:B45) en format .pdf (avec les 4 premières lignes comme titre si possible) sous le nom CORP 1.pdf puis de cacher les détails, montrer les détails du CORP 2 et, je pense que vous commencer à imaginer la suite... Ceci jusqu'au dernier mohican non je rigole, jusqu'au dernier conseiller (actuellement CORP 18)
Je n'arrive pas à créer la boucle qui liste l'ensemble des conseillers pour ensuite passer du CORP 1 au CORP 2. J'ai déjà passablement consulté le forum pour trouver mon bonheur mais, j'avoue que je m'y perd un peu avec les PivotFields, PivotItems avec ou sans "s" les list, count, name
Voici le fichier incriminé
Je me réjouis de vos retours pour me permettre de me frapper vigoureusement la tête en m'exclamant "Mais bon sang, bien sûr"
Bonjour à tous,
Devant l'afflux de réponse... j'ai continué à me creuser la tête et, après avoir pas mal galéré (il faut être honnête
Mais, bon vu que c'est la première fois que je publie le résultat de mes heures de travail j'ose espérer un peu de compassion
Sub MMT_pdf()
'Macro créée le 15.12.2016 par JMP pour permettre de créer les fichier .pdf individuels de la répartition des MMT
Dim CORP As String
Dim PvtTbl As PivotTable
Dim rng1 As Range
Dim rng2 As Range
Dim Plage As Range
Dim fichier As String
Set PvtTbl = ActiveSheet.PivotTables("MMT")
With PvtTbl.PivotFields("Conseiller/ère")
'Définir le nombre d'items
For i = 1 To .PivotItems.Count
'Développer les détails de l'item
.PivotItems(i).ShowDetail = True
'Définir le nom de l'item dans une variable
CORP = .PivotItems(i).LabelRange
'Sélectionner le données (data & label) de l'item
PvtTbl.PivotSelect Name:=CORP, Mode:=xlDataAndLabel, UseStandardName:=True
'Définir les plages dans une variable pour pouvoir les copier
Set rng1 = Selection
Set rng2 = Range("A1:B4")
Set Plage = Union(rng1, rng2)
'Copie des données sur une nouvelle feuille. Impossible de le faire sur la feuille du TCD pour la mise en page
Plage.Copy
Sheets.Add After:=Sheets(Sheets.Count)
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveSheet.Paste
'Donner le nom du fichier selon la variable du nom de l'item
fichier = "Répartition des MMT de " & CORP & ".pdf"
'Définir la mise en page
Application.CutCopyMode = False
Application.PrintCommunication = False
ActiveSheet.PageSetup.PrintArea = ""
With ActiveSheet.PageSetup
.CenterHorizontally = True
.CenterVertically = True
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
Application.PrintCommunication = True
'Suppression des alertes
Application.DisplayAlerts = False
'Enregistrement du fichier en .pdf dans le répertoire défini
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"F:\ORP\Planification\Répartition des MMT\" & fichier, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
'Suppression de la feuille (3) contenant les données à imprimer
Sheets(3).Delete
Application.DisplayAlerts = True
Sheets(1).Activate
'Réduire les détails de l'item
.PivotItems(i).ShowDetail = False
'Passer à la prochaine occurence de l'item
Next
End With
End SubPour ceux que le paramétrage des TCD dans VBA intéresse, je ne peux que vous recommander le site ci-dessous:
http://www.globaliconnect.com/excel/index.php?option=com_content&view=article&id=154:referencing-an-excel-pivot-table-range-using-vba&catid=79&Itemid=475
Salutations