BO - Faire une numérotation continue des pages sur plusieurs rapports en VBA
Business Objects permet d'afficher au travers des différents rapports la numérotation des pages en utilisant les fonctions Page() qui renvoie le numéro de la page courante et NumberOfPage() qui renvoie le nombre de pages au sein d'un rapport.
Soit pour afficher 1/5 (la page 1 sur 5) on utilisera dans une variable les fonctions comme suit : =Page() + "/" + NumberOfPage()
Lorsque vous disposer d'un document (.rep) contenant plusieurs rapports (onglets), il peut être intérressant de pouvoir disposer d'une numérotation de pages en continu sur l'ensemble des rapports de ce document. Ceci permettrait par exemple d'afficher une numérotation de 1 à n lors d'une sauvegarde du document en PDF et de ne pas avoir de coupure dans la numérotation pour chaque rapport du document.
Voici donc la situation de départ :

Comme vous le voyez notre document contient 3 rapports dont le premier contient 5 pages, le second 3 pages et le dernier 18 pages. Si j'utilise une numéroration normale =Page() + "/" + NumberOfPage(), j'aurai effectivement mon compteur de page qui recommence à 1 pour chaque rapport.
L'objectif est donc de disposer (sur base de l'exemple ci-dessus) d'une numérotation allant de 1 à 26 (3 + 5 + 18), comme représenté ci-dessous.

Avant de pouvoir rendre ce calcul automatique via du VBA, il va falloir créer quelques variables. En fait il y aura autant de variables que d'onglets -1.
Dans le cas ci-dessus il me faudra 3 - 1 variable soit 2 variables.
Créons donc ces variables. Pour nous faciliter la vie et povoir réutiliser facilement ces variables dans une boucle VBA, elles porteront le même nom (Page) et seront incrémentées de 1 à n.
Variable 1 :
Name : Page1
Formula : 0
Variable 2 :
Name : Page2
Formula : 0
Voilà, nous diposons des variables qui contiendront chacunes le nombre total de pages de chaque rapport.
Créez la variable qui contiendra le nombre total de pages pour l'ensemble du document.
Variable total :
Name : PageALL
Formula : 0
Dans chaque rapport nous allons adapter la formule qui présente le nombre de page =Page() + "/" + NumberOfPage().
Dans le rapport 1 notre formule devient : =Page() + "/" + <PageALL>
Dans le rapport 2 notre formule devient : =ToNumber(<Page1> + Page()) + "/" + <PageALL>
Dans le rapport 3 notre formule devient : =ToNumber(<Page2> + Page()) + "/" + <PageALL>
Vous l'avez certainement compris, continuer à incrémenter avec chacun de vos rapports.
Passons maintenant aux choses sérieuses, à savoir rendre le calcul des pages automatique.
Dim StrName As String
Dim VarPage As busobj.DocumentVariable
Dim Doc As busobj.Document
Dim Rep As busobj.Report
Dim i As Integer
Dim iPage As Integer
On Error goto Err_CalculPage
Set Doc = Application.ActiveDocument
i = 0
iPage = 0
For Each Rep In Doc.Reports
Rep.ForceCompute
iPage = iPage + CInt(Rep.NumberOfPages)
If i < Doc.Reports.Count Then
Set VarPage = Doc.DocumentVariables("Page" & i)
VarPage.Formula = iPage
Else
Set VarPage = Doc.DocumentVariables("PageALL")
VarPage.Formula = iPage
End If
i = i + 1
Set VarPage = Nothing
Next
Set Rep = Nothing
Set Doc = Nothing
Exit_CalculPage:
Exit Sub
Err_CalculPage:
MsgBox Err.Description
Resume Exit_CalculPage
End Sub
Faites un Run de la procédure, le rapport affiche bien une numérotation de page en continu.


Il n'y a pas de commentaires pour cet article.
[Ajouter un commentaire]