F.A.Q. Business-Objects

F.A.Q. Business-ObjectsConsultez toutes les FAQ
Nombre d'auteurs : 15, nombre de questions : 101, dernière mise à jour : 15 juin 2021
Sommaire→VBA→VBA dans Reporter Deski- Comment récupérer les réponses utilisateur aux invites ?
- Comment lister les variables créées dans le document ?
- Comment supprimer le message : La requête ne retourne aucune donnée ?
- Comment produire un pdf par rapport ?
- Quels formats d'Export en VBA selon les versions ?
- Comment poser un filtre complexe et exporter en pdf ?
Public Sub mesinvites()
'Bruno Roman-Ruiz http://bruno-roman-ruiz.developpez.com/index/
'20080207 22:00 BO V6.5.1
'Lister les variables crées par l'utilisateur
Dim Doc As Document
Dim DpVars As Variables
Dim DpVar As Variable
Dim txt As String
Dim nbv As Integer
Application.Interactive = True
Set Doc = Application.ActiveDocument
Set DpVars = Doc.Variables
txt = ""
nbv = 0
For Each DpVar In DpVars
nbv = nbv + 1
txt = Chr(10)& Chr(10) & " [" & nbv & "] Variable "& DpVar.Name & Chr(10) & "Valeur : " & DpVar.Value
Debug.Print txt
Next
Debug.Print Chr(10) & Chr(10) & Doc.Name & " contient " & nbv & " variables :"
End SubVoici un petit script de procédure qui établit la liste dans la fenêtre d'exécution des variables créées par l'utilisateur :
Public Sub mesvariables()
'Bruno Roman-Ruiz http://bruno-roman-ruiz.developpez.com/index/
'20080207 22:00 BO V6.5.1
'Lister les variables crées par l'utilisateur
Dim Doc As Document
Dim DocVars As DocumentVariables
Dim DocVar As DocumentVariable
Dim txt As String
Dim nbv As Integer
Application.Interactive = True
Set Doc = Application.ActiveDocument
Set DocVars = Doc.DocumentVariables
txt = ""
nbv = 0
For Each DocVar In DocVars
If DocVar.Name élt; > "" Then
nbv = nbv + 1
txt = Chr(10) & Chr(10) & " [" & nbv & "] Variable " & DocVar.Name & Chr(10) & DocVar.Formula
Debug.Print txt
End If
Next
Debug.Print Chr(10) & Chr(10) & Doc.Name & " contient " & nbv & " variables :"
End Sub
Attention ! Ne pas confondre :
Application.ActiveDocument.DocumentVariables Collection des objets Variables créées dans le document par l'utilisateur
Application.ActiveDocument.Variables Collection des objets Variables créées dans le fournisseur de données (requête)
Utiliser la propriétée Application.Interactive
Cette méthode supprime ou autorise (False/True) les demandes de confirmation et les notifications à l'utilisateur.
Private Sub Document_BeforeRefresh(Cancel As Boolean)
Application.Interactive = False
End Sub
Private Sub Document_AfterRefresh()
Application.Interactive = True
End Sub
Attention ! Cette désactivation
* porte sur le rafraichissement du document (plus de message La Requête ne retourne pas de données)
* supprime également l'affichage des invites ! (conservant les réponses antérieures)
* ne fonctionne pas si on fait exécuter dans l'éditeur de requête
Pour désactiver l'interaction sur le SQL à la carte sans invite,
et la réactiver sur les autres requêtes avec invite,
il faudrait à l'ouverture par exemple :
* parcourir les dataproviders
* et avec un select case basé sur le nom ou le type faire précéder le refresh d'une gestion de l'interactivité
Dès la version 5 de Business Objects, il est possible d'appliquer la méthode ExportAsPdf à chaque rapport.
On peut également poser un test sur le non du rapport pour ne pas appliquer cet export à l'un d'entre eux.
Private Sub Document_AfterRefresh()
Dim Doc As Document
Dim reps As Reports
Dim rep As Report
Dim repname As String
Dim chemin As String
chemin = "C:\"
Set Doc = Application.ActiveDocument
'------- Récupération de la collection
Set reps = Doc.Reports
' -------- Récupérer les rapports -------
' -----Parcourir les objets de la collection rapports
For Each rep In reps
' ----- Limitation au rapports à exporter
repname = rep.Name
repname = Replace(repname, Chr(34), "_")
repname = Replace(repname, Chr(42), "_")
repname = Replace(repname, Chr(47), "_")
repname = Replace(repname, Chr(58), "_")
repname = Replace(repname, Chr(60), "_")
repname = Replace(repname, Chr(62), "_")
repname = Replace(repname, Chr(63), "_")
repname = Replace(repname, Chr(92), "_")
repname = Replace(repname, Chr(124), "_")
If repname < > "PasCeluiLà" Then
rep.ExportAsText chemin & repname & ".pdf"
End If
Next- DataProvider.ExportToRDBMS
- Document.ExportAsPDF
- Document.ExportSheetsAsHtml
- Report.ExportAsHtml
- Report.ExportAsPDF
- Report.ExportAsRtf
- Report.ExportAsText
- Document.ExportAsXML
- Report.ExportAsExcel
- Report.ExportAsHtmlPage
L'objectif est de réaliser automatiquement après chaque rafraichissement les tâches suivantes :
- Déterminer le nombre de rapports (onglets) dans le document.
- Parcourir ces différents rapports.
- Appliquer sur chacun d'eux un filtre.
- Recalculer le document BO.
- Exporter en pdf.
Document_AfterRefresh()
Dim Dpc As Document
Dim Reps As Reports, Rep As Report
Dim nbr As Integer, nir As Integer
'ces 3 premières déclarations seraient mieux positionnées
' dans Général Déclarations
Dim AnneeRef As String
Set Doc = Application.ActiveDocument
Set Reps = Doc.Reports
nbr = Reps.Count
'pour exemple on posera un filtre sur l'année 2008
AnneeRef = "2008"
'pose du filtre sur chaque rapport
For Each Rep In Reps
Rep.Activate
Rep.AddComplexFilter "Exercice", "[Exercice] = " & AnneeRef
'recalcul de l'ensemble du document
Rep.ForceCompute
Next
'export du document
Rep.ExportAsPDF ("C:\le chemin....\DocsPDF\NomFichier_" & AnneeRef & ".pdf")
End Sub


