Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Business Objects > SDK
SDK Forum d'entraide pour la programmation des outils BO par des API (VBA, ASP, Java)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/10/2007, 15h56   #1
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 103
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 103
Points : 32
Points : 32
Par défaut [VBA]Filtre automatique suivant onglet

Bonjour,

J'ai un rapport d'environ 200 onglets, il y a un filtre sur le libellé société sur chacun de ces onglets.

Les libellés sociétés ont été modifiés, donc plus aucun filtre ne fonctionne.

Avez vous une solution pour faire un filtre suivant le nom de l'onglet en automatique pour ne pas avoir à refaire tous les onglets 1 par 1 ?

Les onglets se nomment par exemple 012 LYON AAA
012 code magasin
LYON libellé magasin
AAA code société

Rapport sur Desktop 11.5.0.0

Merci,
cdumas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2007, 16h18   #2
Rédacteur
 
Avatar de Bruno2r
 
Bruno ROMAN-RUIZ
Inscription : décembre 2006
Messages : 2 183
Détails du profil
Informations personnelles :
Nom : Bruno ROMAN-RUIZ
Âge : 57

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : décembre 2006
Messages : 2 183
Points : 2 720
Points : 2 720
Salut
Le plus simple est de récupérer en VBA le nom de chaque onglet

Code :
1
2
3
4
5
6
7
8
Private Sub RecupReportName()
Dim nbreports AS Integer, i AS Integer, ongletname  AS String
 nbreports = Application.ActiveDocument.Reports.Count
 FOR i = 1 TO nbreports
    ongletname = Application.ActiveDocument.Reports.Item(i).Name
 
  Loop
End Sub
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO
"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"
Bruno2r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2007, 17h55   #3
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 103
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 103
Points : 32
Points : 32
J'ai testé le filtre mais je ne sais pas comment lui dire de prendre la valeur de ongletname comme point de comparaison

Code :
1
2
3
4
5
6
7
8
9
10
Sub RecupReportName()
Dim nbreports As Integer, i As Integer, ongletname  As String
 nbreports = Application.ActiveDocument.Reports.Count
 For i = 1 To nbreports
    ongletname = Application.ActiveDocument.Reports.Item(i).Name
    Application.ActiveDocument.Reports.Item(i).AddComplexFilter "Code Societe", "=<Code Societe> = ""ongletname"" "
Next

End Sub
cdumas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2007, 19h02   #4
Rédacteur
 
Avatar de Bruno2r
 
Bruno ROMAN-RUIZ
Inscription : décembre 2006
Messages : 2 183
Détails du profil
Informations personnelles :
Nom : Bruno ROMAN-RUIZ
Âge : 57

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : décembre 2006
Messages : 2 183
Points : 2 720
Points : 2 720
Citation:
Envoyé par cdumas Voir le message
J'ai testé le filtre mais je ne sais pas comment lui dire de prendre la valeur de ongletname comme point de comparaison
En VBA on pose le filtre à l'aide de

Code :
 Application.ActiveDocument.Reports.Item(i).AddComplexFilter(Variable,Formula AS String)
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO
"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"
Bruno2r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2007, 08h26   #5
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 103
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 103
Points : 32
Points : 32
Mais ongletname est un string,

Est-ce possible ou/non de prendre dans la formule du filtre le nom de l'onglet :
Filtre souhaité : =<Code Societe> = valeur de l'onglet

Si oui quel est la syntaxe

J'ai essayé :
Code :
"=<Code Societe> = ""ongletname"" "
Résultat filtre avec comme valeur ongletname

Code :
"=<Code Societe> = "" & ongletname & "" "
Résultat filtre avec comme valeur & ongletname &

Code :
"=<Code Societe> = " & ongletname & " "
Résultat type de données incorrect

Je n'ai pas vraiment d'autres idées, si vous pouvez m'aider ?

Merci,
cdumas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2007, 09h07   #6
Rédacteur
 
Avatar de Bruno2r
 
Bruno ROMAN-RUIZ
Inscription : décembre 2006
Messages : 2 183
Détails du profil
Informations personnelles :
Nom : Bruno ROMAN-RUIZ
Âge : 57

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : décembre 2006
Messages : 2 183
Points : 2 720
Points : 2 720
Ouh la! Tu n'as pas du tout compris...

Les indices que je t'ai filés ont pour objectif de rétablir tes filtres en VBA au travers de VisualBasic Editor Alt+F11

Tu peux créer une procédure qui
Compte le nb de Reports (onglets) de ton activeDocument
Fait une boucle pour récupérer le nom de chaque onglet
Récupérer dans ce nom le dernier terme (code société)
Le stock dans une variable
L'applique au rapport à l'aide de la méthode Report.AddComplexFilter

Mais si tu 'as jamais fait de VBA dans BO je dois te parler Hébreux
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO
"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"
Bruno2r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2007, 14h18   #7
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 103
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 103
Points : 32
Points : 32
J'arrive avec ce code à récupérer le code societe la fin du nom de mes onglets sans problème.

Code :
1
2
3
4
5
6
7
8
9
10
11
Sub RecupReportName()
Dim nbreports AS Integer, i AS Integer, ongletname  AS String
Dim code_soc AS String
 
 nbreports = Application.ActiveDocument.Reports.Count
 FOR i = 1 TO nbreports
    ongletname = Application.ActiveDocument.Reports.Item(i).Name
    code_soc = RIGHT(ongletname, 2)  
    Application.ActiveDocument.Reports.Item(i).AddComplexFilter "Code Societe", "=<Code Societe> = "" code_soc "" "
Next
End Sub
C'est cette étape que je n'arrive pas à faire.
Citation:
L'applique au rapport à l'aide de la méthode Report.AddComplexFilter
J'ai fait un peu de VB6 il y a des années donc j'ai quelques souvenirs mais c'est un peu loin .

Je n'arrive pas à faire la syntaxe du AddComplexFilter.
cdumas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2007, 15h02   #8
Rédacteur
 
Avatar de Bruno2r
 
Bruno ROMAN-RUIZ
Inscription : décembre 2006
Messages : 2 183
Détails du profil
Informations personnelles :
Nom : Bruno ROMAN-RUIZ
Âge : 57

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : décembre 2006
Messages : 2 183
Points : 2 720
Points : 2 720
Citation:
Application.ActiveDocument.Reports.Item(i).AddComplexFilter "Code Societe", "=<Code Societe> = "" code_soc "" "
Next
End Sub
Ce srait pas plutôt :
Code :
1
2
3
Application.ActiveDocument.Reports.Item(i).AddComplexFilter "Code Societe", "=<Code Societe> = " & code_soc 
Next
End Sub
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO
"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"
Bruno2r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2007, 15h08   #9
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 103
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 103
Points : 32
Points : 32
Avec :
Code :
1
2
 
Application.ActiveDocument.Reports.Item(i).AddComplexFilter "Code Societe", "=<Code Societe> = " & code_soc
J'obtiens l'erreur :
Erreur d'execution '20' :
Bad Formula : Type de données incorrects (DMB0003.
cdumas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2007, 17h28   #10
Rédacteur
 
Avatar de Bruno2r
 
Bruno ROMAN-RUIZ
Inscription : décembre 2006
Messages : 2 183
Détails du profil
Informations personnelles :
Nom : Bruno ROMAN-RUIZ
Âge : 57

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : décembre 2006
Messages : 2 183
Points : 2 720
Points : 2 720
Je pense qu'il manque un espace entre = et <
Code :
1
2
Application.ActiveDocument.Reports.Item(i).AddComplexFilter "Code Societe", "=<Code Societe> = " & code_soc 
Application.ActiveDocument.Reports.Item(i).ForceCompute
Bye à lundi
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO
"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"
Bruno2r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2007, 08h27   #11
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 103
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 103
Points : 32
Points : 32
J'ai testé en arrivant mais c'est toujours la même erreur.
Vu qu'il n'y a que 5 codes sociétés différents j'ai fait un select case pour résoudre l'appel.
Mon code devient :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
Sub RecupReportName()
Dim nbreports AS Integer, i AS Integer, ongletname  AS String
Dim code_soc AS String
 
 nbreports = Application.ActiveDocument.Reports.Count
    nbreports = 2
 
 FOR i = 1 TO nbreports
    ongletname = Application.ActiveDocument.Reports.Item(i).Name
    code_soc = RIGHT(ongletname, 3)
 
 
    SELECT Case code_soc    ' Evaluation du code_soc
     Case "CAD"    ' Societe 01
        Application.ActiveDocument.Reports.Item(i).AddComplexFilter "Code Societe", "=<Code Societe> = ""01"""
      Case "AGO"  ' Societe 25
        Application.ActiveDocument.Reports.Item(i).AddComplexFilter "Code Societe", "=<Code Societe> = ""25"""    
    Case "ASE"  ' Societe 26
        Application.ActiveDocument.Reports.Item(i).AddComplexFilter "Code Societe", "=<Code Societe> = ""26"""
    Case "ALP"   ' Société 27
        Application.ActiveDocument.Reports.Item(i).AddComplexFilter "Code Societe", "=<Code Societe> = ""27"""
    Case "IRI"  ' Societe 36
        Application.ActiveDocument.Reports.Item(i).AddComplexFilter "Code Societe", "=<Code Societe> = ""36"""
    Case Else    ' Autres cas pas de filtre
 
    End Select
 
Next
 
End Sub
Merci pour l'aide,
cdumas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2007, 09h08   #12
Rédacteur
 
Avatar de Bruno2r
 
Bruno ROMAN-RUIZ
Inscription : décembre 2006
Messages : 2 183
Détails du profil
Informations personnelles :
Nom : Bruno ROMAN-RUIZ
Âge : 57

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : décembre 2006
Messages : 2 183
Points : 2 720
Points : 2 720
Ah bon ?
Mais je ne me souviens pas que tu ais mentionné que la valeur à poser en filtre était "01" ,"25","27","36" ....

Le select case dans ton cas est tout indiqué. Si tu devais avoir plus d sociétés il te sufirait d'ajouter une requête du type
Code :
SELECT COESOC, NAMESOC FROM TSOC
En utilants la même méthode qu'avec Report (count puis boucle) sur les Providers tu pourrait récupérer le code correpondant au nom.
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO
"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"
Bruno2r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h29.


 
 
 
 
Partenaires

Hébergement Web