Dans mes activités de reporting, il m'est souvent demandé de faire une sauvegarde PDF d'un rapport en filtrant les données sur chaque valeurs d'une dimension. (Ex : produire un rapport pour chaque date d'une dimension "Période")
Lorsque qu'il y a peu de valeur pour cette dimension, le problème ne se pose pas trop. Par contre si cette dimension contient des dizaines voir des centaines de valeurs, la tâche peu vite s'avérée fastidieuse.
Je vais donc vous expliquer ci-dessous comment appliquer un filtre de façon dynamique et ensuite sauver le rapport en PDF via une petite procédure en VBA.
Public Sub FilterAndSavePdf()
'Déclaration de la variable document
Dim Doc As busobj.Document
'Déclaration de la variable rapport
Dim Rep As busobj.Report
'Déclaration de la variable dimension pour laquelle on va parcourir les valeurs
Dim tp As busobj.DocumentVariable
'Initialisation de la variable document avec le document actif
Set Doc = Application.ActiveDocument
'Initialisation de la variable rapport avec le rapport actif du document
Set Rep = Doc.ActiveReport
'Initialisation de la variable dimension, ici ma dimension s'appelle "maperiode"
Set tp = Doc.DocumentVariables("maperiode")
'On parcours toutes les valeurs unique de ma dimension "maperiode"
For Each Value In tp.Values(boUniqueValues)
'On applique le filtre à notre rapport avec la valeur de la dimension
Rep.AddComplexFilter tp, "=<maperiode>='" & Value & "'"
'On force BO à recalcculer les valeurs du rapport suite au changement de filtre
Rep.ForceCompute
'On fait la sauvegarde PDF en incluant la valeur de la date de notre dimension "maperiode" dans le nom du document PDF
Rep.ExportAsPDF "C:\Data\" & Rep.Name & "_" & Format(Value, "yyyymmdd") & ".pdf"
'On passe à la valeur suivante
Next
'On supprime la référence à nos variables
Set tp = Nothing
Set Rep = Nothing
Set Doc = Nothing
End Sub