|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : octobre 2006 Messages : 7 ![]() |
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. |
|
|
00
|
|
|
#2 |
|
Futur Membre du Club
![]() Inscription : octobre 2006 Messages : 18 ![]() |
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). |
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 812 ![]() |
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. |
|
|
00
|
|
|
#4 |
|
Futur Membre du Club
![]() Inscription : octobre 2006 Messages : 18 ![]() |
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
|
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : octobre 2006 Messages : 7 ![]() |
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. |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 812 ![]() |
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. |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : octobre 2006 Messages : 7 ![]() |
Je ne sais pas si la solution me convient. Je n'ai pas encore eu le temps d'essayer.
En as-tu une meilleur ? |
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 812 ![]() |
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. |
|
|
00
|
|
|
#9 |
|
Invité régulier
![]() Inscription : octobre 2006 Messages : 14 ![]() |
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. |
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 812 ![]() |
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. |
|
|
00
|
|
|
#11 |
|
Invité régulier
![]() Inscription : octobre 2006 Messages : 14 ![]() |
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 ? |
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 812 ![]() |
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. |
|
|
00
|
|
|
#13 |
|
Invité de passage
![]() Inscription : octobre 2006 Messages : 7 ![]() |
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. |
|
|
00
|
|
|
#14 |
|
Futur Membre du Club
![]() Inscription : octobre 2006 Messages : 18 ![]() |
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""" |
|
|
00
|
|
|
#15 |
|
Invité de passage
![]() Inscription : octobre 2006 Messages : 7 ![]() |
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. |
|
|
00
|
|
|
#16 |
|
Futur Membre du Club
![]() Inscription : octobre 2006 Messages : 18 ![]() |
Ah oui j'ai omis ce détail: il faut rafraichir les rapports via la méthode Report.Item(i).ForceCompute
|
|
|
00
|
|
|
#17 |
|
Invité de passage
![]() Inscription : octobre 2006 Messages : 7 ![]() |
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. |
|
|
00
|
|
|
#18 |
|
Futur Membre du Club
![]() Inscription : octobre 2006 Messages : 18 ![]() |
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) |
|
|
00
|
|
|
#19 |
|
Invité de passage
![]() Inscription : octobre 2006 Messages : 7 ![]() |
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. |
|
|
00
|
|
|
#20 | ||
|
Futur Membre du Club
![]() Inscription : octobre 2006 Messages : 18 ![]() |
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 :
Voilà pour les exemples de syntaxe |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com