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 04/10/2006, 12h17   #1
Invité de passage
 
Inscription : octobre 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 7
Points : 1
Points : 1
Par défaut [VBA] - Appliquer un filtre

Bonjour,

Je souhaite trouver la fonction en VBA qui me permettrait de filtrer les données sur une colonne sélectionnée.
Ensuite j'exporte le résultat obtenu en fichier PDF (mais ça je sais faire).

Merci.
ChristineTine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2006, 09h53   #2
Futur Membre du Club
 
Inscription : octobre 2006
Messages : 18
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 18
Points : 15
Points : 15
Salut,

Pour ajouter un filtre à l'aide d'une macro tu dois utiliser la fonction AddComplexFilter(variable_a_filtrer, formule_du_filtre) de l'objet Report (exemple: ThisDocument.Reports.Item(1).AddComplexFilter "toto", "=<toto> = 1")

Par contre je n'ai pas trouvé comment supprimer un filtre créé par macro. Du coup je le remplace par un filtre bidon (1=1).
_GôTô_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2006, 10h46   #3
Membre Expert
 
Avatar de nuke_y
 
Inscription : mai 2004
Messages : 1 812
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 1 812
Points : 1 609
Points : 1 609
Pourquoi ne pas filtrer directement dans la requête ? Pour se servir du même fournisseur de données pour plusieurs rapports ?

Et pourquoi ne pas filtrer dans le rapport directement alors ? Pour actionner des filtres à coup de requêtes ? C'est une technique intéressante effectivement, je me la garde dans un coin du cerveau
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

Mon combat pour les droits des consommateurs face aux abus des grandes marques.
nuke_y est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2006, 10h53   #4
Futur Membre du Club
 
Inscription : octobre 2006
Messages : 18
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 18
Points : 15
Points : 15
Dans mon cas je dois générer des rapports pour de nombreuses personnes, qui ne sont pas abilitées à voir les mêmes choses. Du coup je filtre pour chaque groupe de personnes et j'exporte à chaque fois. Bien pratique
_GôTô_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2006, 14h54   #5
Invité de passage
 
Inscription : octobre 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 7
Points : 1
Points : 1
Par défaut Pourquoi des filtres en VBA

Pour ma part, j'ai un tableau avec une rupture par destinataire. Je dois générer un fichier PDF par destinataire en ayant au préalable filtrer sur le destinantaire.
J'ai plus 20 destinataires et la macro m'évitera de le faire manuellement.
ChristineTine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2006, 15h02   #6
Membre Expert
 
Avatar de nuke_y
 
Inscription : mai 2004
Messages : 1 812
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 1 812
Points : 1 609
Points : 1 609
Est-ce que la solution donnée te convient ?
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

Mon combat pour les droits des consommateurs face aux abus des grandes marques.
nuke_y est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2006, 15h36   #7
Invité de passage
 
Inscription : octobre 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 7
Points : 1
Points : 1
Je ne sais pas si la solution me convient. Je n'ai pas encore eu le temps d'essayer.
En as-tu une meilleur ?
ChristineTine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2006, 17h23   #8
Membre Expert
 
Avatar de nuke_y
 
Inscription : mai 2004
Messages : 1 812
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 1 812
Points : 1 609
Points : 1 609
Celle là me parait idéale pour ta problèmatique alors je n'en ai pas cherchée une autre en fait.
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

Mon combat pour les droits des consommateurs face aux abus des grandes marques.
nuke_y est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2006, 09h17   #9
Invité régulier
 
Inscription : octobre 2006
Messages : 14
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : octobre 2006
Messages : 14
Points : 6
Points : 6
Et la solution de poser des filtres (via le SUPERVISEUR) sur les univers pour chaque utilisateur ne peut-elle pas te convenir ?

Ensuite lorsque tu envoies ton document via DocAgentOption, c'est lui qui se charge du reste.

L'intéret est double car si ces utilisateurs ont un accès à BO pour consulter les rapports, ta confidentialité est déjà posée.
cyfranco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2006, 09h56   #10
Membre Expert
 
Avatar de nuke_y
 
Inscription : mai 2004
Messages : 1 812
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 1 812
Points : 1 609
Points : 1 609
Oui mais dans ce cas, chaque utilisateur doit rafraichir son rapport. Ce qui peut être une bonne solution car, comme tu le disais, ça permet de mettre en place la sécurité sur chaque utilisateur.

Mais on se rend compte que parfois le client préfère qu'une seule personne rafraichisse les rapports pour tous les autres, et dans ce cas il faut gérer avec les logins, etc.

A moins que le DocAgentOption soit une commande VBA qui permette de rafraichir le rapport avec les paramètres liés à un utilisateur précis, ce qui effectivement serait une solution plus intéressante que les filtres.
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

Mon combat pour les droits des consommateurs face aux abus des grandes marques.
nuke_y est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2006, 10h47   #11
Invité régulier
 
Inscription : octobre 2006
Messages : 14
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : octobre 2006
Messages : 14
Points : 6
Points : 6
DocAgentOption est bien une solution VBA pour c'eux et celles qui n'ont pas les moyens de s'offrir BCA.

Tu poses ton filtre sur l'univers (via SUPERVISEUR), tu envoies ton doc via (BCA ou DocAgentOption) avec l'action Refresh au groupe d'utilisateurs sur lequel tu as posés ton filtre et le travail se fait tout seul.

Il te reste juste à ajouter dans le AfterRefreh un ExportAsPDF avec un nom de fichier générique suivit du BOUSER.

PS: je n'ai jamais utilisé la solution DocAgentOption car justement je dispose de BCA (très pratique)

Je n'arrive pas à joindre un fichier ?
cyfranco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2006, 11h14   #12
Membre Expert
 
Avatar de nuke_y
 
Inscription : mai 2004
Messages : 1 812
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 1 812
Points : 1 609
Points : 1 609
Hum dans ce cas effectivement, ça serait plus intéressant de D'ABORD définir la sécurité dans le superviseur pour chaque utilisateur PUIS d'utiliser DocAgentOption pour rafraichir le rapport pour la liste des utilisateurs, en utilisant les paramètres de chacun.
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

Mon combat pour les droits des consommateurs face aux abus des grandes marques.
nuke_y est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 15h14   #13
Invité de passage
 
Inscription : octobre 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 7
Points : 1
Points : 1
HELP !
J'ai passé un certain temps sur la ligne de commande et ça bloque.
La voici :
Application.Documents.Item("Datamart - Chiffres Carts").Reports.Item("A").AddComplexFilter "Secteur(Cart N-1)", "=<Secteur(Cart N-1)> = 94"
Message : "Erreur d'éxecution '20' : Bad formula : Type de données incorrect (DMB0003)"

Après plusieurs recherches, je sais qu'il bloque sur la valeur de la variable (dans le cas ci-dessus : 94). J'ai essayé de passer cette valeur dans une variable ... Rien n'y change.

Un p'tit coup de pouce, merci.
ChristineTine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 11h23   #14
Futur Membre du Club
 
Inscription : octobre 2006
Messages : 18
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 18
Points : 15
Points : 15
Il s'agit bien d'une variable numérique et pas alphanumérique ? En général c'est ça. Si c'est alphanumérique il te faudra mettre des guillemets à 94 :

Application.Documents.Item("Datamart - Chiffres Carts").Reports.Item("A").AddComplexFilter "Secteur(Cart N-1)", "=<Secteur(Cart N-1)> = ""94"""
_GôTô_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 14h51   #15
Invité de passage
 
Inscription : octobre 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 7
Points : 1
Points : 1
Impeccable !
Mais alors maintenant le problème est que lorsque je retourne dans le rapport, il ne m'affiche rien. Il faut que j'aille dans "Format" "Filter". Là, je visualise bien mon filtre et lorsque je fait "OK", il m'affiche bien le rapport avec la valeur filtrer.
Y a t'il un moyen de lui simuler cette dernière manipulation par le code ?

Merci.
ChristineTine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2006, 19h00   #16
Futur Membre du Club
 
Inscription : octobre 2006
Messages : 18
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 18
Points : 15
Points : 15
Ah oui j'ai omis ce détail: il faut rafraichir les rapports via la méthode Report.Item(i).ForceCompute
_GôTô_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2006, 17h48   #17
Invité de passage
 
Inscription : octobre 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 7
Points : 1
Points : 1
Ca avance! Merci.
Le filtre fonctionne comme je veux.


Maintenant, j'ai le problème suivant :
Une fois que j'ai filtrer mes 2 onglets, je veux enregistrer le résultat en fichier PDF en donnant au fichier PDF un nom qui contient (entre autre) le contenu d'une variable qui se trouve dans mon document. Cette variable (appelons là <VAR - Période>) contient l'année et le mois d'une date saisie dans une invite.
Mais voilà, je ne trouve pas l'intruction qui permet de récupérer le contenu de cette variable.

De même, par la suite, j'aimerai récupérer les valeurs succéssives d'un objet pour les différents enregistrements rapporter lors d'un raffraichissement.
ChristineTine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 18h03   #18
Futur Membre du Club
 
Inscription : octobre 2006
Messages : 18
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 18
Points : 15
Points : 15
En fait, on ne peut pas récupérer le contenu d'une variable. On peut seulement récupérer sa formule, et l'évaluer (mais hors contexte, c'est à dire sans tenir compte des maitres. Tu risques donc de prendre des erreurs valeurmulti). Donc si tu souhaites récupérer les différentes valeurs d'une cellule en fonction d'un filtre, la seule solution est de lire directement dans le fournisseur de données (DataProvider) et de le parcourrir jusqu'à l'endroit qui t'intéresse.

Pour récupérer la formule d'une variable : ThisDocument.DocumentVariables.Item("nom_variable").Formula

Pour évaluer une formule :
ThisDocument.Evaluate(formule)
_GôTô_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 18h24   #19
Invité de passage
 
Inscription : octobre 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 7
Points : 1
Points : 1
Encore merci.
Je vais essayer de récupérer la donnée (qui ne vient pas d'un fournisseur de donnée) que je souhaite en la récupérant par la formule et en évaluant cette formule.
Maintenant, tu me parles de DataProvider pour parcourir les enregistrements d'un fournisseur de donnée.
Je ne trouve rien à ce sujet dans l'aide.
Peux tu me mettre sur la voie ?

Merci.
ChristineTine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 22h22   #20
Futur Membre du Club
 
Inscription : octobre 2006
Messages : 18
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 18
Points : 15
Points : 15
Le dataprovider est la structure qui retourne les résultats d'une requête, sous forme de lignes donc (on peut accéder à ces données via le cube). Il se décompose en colonnes, qui correspondent aux différentes variables, et pour chacune on peut accéder à la n-ième valeur. Dans mon j'applique mon filtre aux rapports sur une variable var1, puis je parcours le data provider pour tomber sur la valeur de var1 qui m'intéresse. Avant il faut avoir repéré la position de la colonne, car dans le dataprovider on y accède via un index et nom par le nom. En gros ça donne :

Code :
1
2
3
FOR i = 1 TO ThisDocument.DataProviders.Item(numero_requete).COLUMNS.Count<blockquote>IF ThisDocument.DataProviders.Item(numero_requete).COLUMNS.Item(i).Name = Nom_de_var1 Then Exit For</blockquote>Next
 
FOR cpt_var1 = 1 TO ThisDocument.DataProviders.Item(numero_requete).COLUMNS.Item(i).Count<blockquote>IF ThisDocument.DataProviders.Item(numero_requete).COLUMNS.Item(i).Item(cpt_var1)  = Valeur_var1 Then Exit For</blockquote>Next
cpt_var1 te donne le numéro de la première ligne pour laquelle ta variable vaut la valeur sur laquelle tu filtres. Tu accèdes donc à toute la ligne en faisant varier i.
Voilà pour les exemples de syntaxe
_GôTô_ 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 22h42.


 
 
 
 
Partenaires

Hébergement Web