Business Objects VBA Appliquer un filtre dynamique sur un rapport

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

Commentaires (La modération des commantaires est active. Votre commentaire apparaîtra après approbation.)
Marc's Gravatar Suite à une remarque d'un collègue (Landry pour ne pas le nommer), voici un petit complémént d'information :
L'utilisation de la fonction avec une variable date se fera comme décrit ci-dessus avec une simple quote :
Rep.AddComplexFilter tp, "=<maperiode>='" & Value & "'"

Par contre pour une variable texte il faudra utiliser la double quote comme ci-dessous:
Rep.AddComplexFilter tp, "=<montexte>=""" & Value & """"
# Publié par Marc | 8/08/08 20:49
Mathieu Moulard's Gravatar ET si l'on veut appliquer un filtre supplémentaire sur la variable quarter par exemple
# Publié par Mathieu Moulard | 22/08/08 16:11
Marc's Gravatar Bonjour Mathieu,

tu peux appliquer plusieurs filtres et les imbriquer par exemple !
...
Set tpquarter = Doc.DocumentVariables("quarter")
For Each Value In tp.Values(boUniqueValues)
For Each Value_quarter In tpquarter.Values(boUniqueValues)
   'On applique le filtre à notre rapport avec la valeur de la dimension
   Rep.AddComplexFilter tp, "=<maperiode>='" & Value & "'"
Rep.AddComplexFilter tpquarter, "=<quarter>=""" & Value_quarter & """"
   '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") & "_" & trim(Value_quarter) & ".pdf"
   'On passe à la valeur suivante de quarter
Next
'On passe à la valeur suivante
Next
# Publié par Marc | 22/08/08 18:45
Jeremy's Gravatar Bonjour,

Comment tu fais pr plus filtrer sur un Tableau Précis du Rapport ?
Merci
# Publié par Jeremy | 22/07/09 15:50
CF Marc's Gravatar @Jeremy,

Via du VBA tu ne sais pas appliquer ou modifier un filtre sur une partie
(tableau) d'un rapport. Les filtres utilisés s'appliquent de façon globale.
# Publié par CF Marc | 25/07/09 12:14
Krysztof von Murphy's Gravatar Tu devrais préciser que ce n'est utilisable qu'en BO à l'ancienne (v6, Desktop Intelligence). Avec XI et les « publications » de la v3, ça doit pouvoir se faire hors du rapport sans programmation.
# Publié par Krysztof von Murphy | 5/01/10 1:05
BlogCFC was created by Raymond Camden. This blog is running version 5.9.003.