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 02/01/2007, 13h04   #1
Candidat au titre de Membre du Club
 
Inscription : juin 2005
Messages : 50
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 50
Points : 10
Points : 10
Par défaut [VBA]prise de tête

J'EN AI MARRE


franchement, c'est une horreur ce logiciel

Bon voici la situation : je voudrais que mes requêtes ce déroulent la nuit et s'enregistrent en format excel automatiquement.

Voici où j'en suis : raffraîchier automatiquement la requête OK
code pour enregistrer la requpete en format excel OK

Prblème : BO accepte d'enregistrer un document en format excel que s'il est afficher à l'écran, or lorsque je met le code correspondant à l'enregistrement en format excel après le code demandant le raffraîchissement automatique, cela bug car il ne trouve pas le document à enregistrer et pour cause lorsqu'il lit la phrase d'enregistrement le document n'est toujours pas à l'écran.
J'ai donc mit un temps de latence entre le mot du raffraîchessement et le moment de l'enregistrement, mais toujours beuggué car tant qu'une macro ce déroule il n'affiche pas la document à l'écran.
J'ai donc créé une nouvelle requête, dont le but est d'ouvrir le document .rep et de l'enregistrer ensuite et là c'est toujours la même chose.

Franchement, je ne sait plus comment faire. Mon code pour enregistrer un document non actif n'est peut être pas le bon, mais je l'ai tourné dans tout les sens qui me venait à l'esprit et rien.

PLEASE UN COUP DE MAIN.......

jazziestan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 13h50   #2
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
Ca m'étonne que ceci ne marche pas (ExportAsExcel est une fonction approximative, je n'ai pas d'export en Excel dans ma version 5) :
Code :
1
2
3
Application.Documents.Item(1).Activate
Application.Documents.Item(1).Refresh
Application.Documents.Item(1).ExportAsExcel
__________________
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/01/2007, 13h50   #3
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 37
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 37
Points : 27
Points : 27
Bonjour,

Effectivement, BO n'attend pas que le tableau soit rempli avant de lancer l'exportation ; Résultat : un fichier Excel vide.

J'ai essayé de placer le contrôle d'intégrité juste avant le code d'exportation et cela semble fonctionner :

Code :
1
2
 dpInterface.CheckDataIntegrity (boCheckAll)
ActiveReport.ExportAsExcel ("C:\truc.xls")
A noter que si le fichier Xl existe déja, BO ne semble pas faire l'exportation.
Dans ce cas, le seul moyen que j'ai trouvé est d'ajouter : Kill ("C:\truc.xls")

(En fait, je n'ai pas vraiment cherché...)
Ashaar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 14h11   #4
Candidat au titre de Membre du Club
 
Inscription : juin 2005
Messages : 50
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 50
Points : 10
Points : 10
pour le fait d'écraser un dossier excel pré existant, je m'organise autrement

Par contre sur la phrase

dpInterface.CheckDataIntegrity (boCheckAll)

il me bug : "objet requis".........
jazziestan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 14h24   #5
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 37
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 37
Points : 27
Points : 27
Le nom de ta macro (placée dans ThisDocument) doit ressembler à cela :

Public Sub Xxxxx(dpInterface As DpVBAInterface)
End Sub

Le code de tout à l'heure doit être placé dans ce module (Celui qui s'exécute lors d'un refresh).
Ashaar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 14h35   #6
Candidat au titre de Membre du Club
 
Inscription : juin 2005
Messages : 50
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 50
Points : 10
Points : 10
visiblement je suis pas doué sur ce point là.

Donc voici le code

Code :
1
2
3
4
5
6
7
 public sub mldsrh(dpinterface AS dpvbainterface)
 
refresh
pdinterface.checkdataintegrity (bocheckall)
activereport.exportasexcel (c:\bidulle.xls")
 
end sub
je l'ai mis dans this document

et là c'est le drame, car je cherche à ce que les données se raffraîchissent à l'ouverture du document, donc il me faut un private sub document_open

????????????
jazziestan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 15h27   #7
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
Citation:
Envoyé par Ashaar
Effectivement, BO n'attend pas que le tableau soit rempli avant de lancer l'exportation ; Résultat : un fichier Excel vide.
Je trouve ça dingue parce que mes exportations en PDF n'ont pas ce problème...

Et si tu essayes de l'enregistrer en Excel au moment de la fermeture ? Du genre tu rafraichis puis tu fermes et tu interceptes la fermeture du document pour l'enregistrer en Excel ?
__________________
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/01/2007, 15h30   #8
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 37
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 37
Points : 27
Points : 27
Si tu places ton Me.Refresh dans le module document_open(),
BO devrait logiquement lancer ensuite la macro mldsrh(dpinterface as dpvbainterface) non ?
et donc tout le code qui en découle.
Ashaar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 15h46   #9
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
Effectivement Ashaar, c'est pas bête non plus. Mais je ne m'explique toujours pas ce comportement ABERRANT de BO qui entame la ligne suivante (export) sans avoir finit la précédente (refresh).
__________________
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 03/01/2007, 16h45   #10
Candidat au titre de Membre du Club
 
Inscription : juin 2005
Messages : 50
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 50
Points : 10
Points : 10
je ne me l'explique pas non plus mais les voix de BO sont impénettrable.

Bon le tout étant que vous êtes géniaux, CA MARCHE


j'ai utiliser la technique Ashaar, et forcément quand on réfléchi un peu plus loin que ces neurones.....
En faite je voulais tout mettre en une seule fois, ce qui je le conçoit n'est pas franchement réfléchit dans la situation actuelle.


Enfin c'est génial, j'ai enfin ma solution..


MERCI MERCI MERCI
jazziestan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2007, 18h08   #11
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
Ah mais non, pardon. Ta façon de faire était logique et AURAIT du marcher. Enfin heureusement qu'on peut feinter
__________________
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 04/01/2007, 10h14   #12
Candidat au titre de Membre du Club
 
Inscription : juin 2005
Messages : 50
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 50
Points : 10
Points : 10
et bien voilà je me suis encore embalée trop vite............

Désolé pour la note résolu puisque ce n'est pas le cas.

Je l'ai lancer cematin et planter, il me raffraichit les données et s'arrête. Franchement là j'en peux plus, je vous mets le code exacte que j'utilise

'dans thisdocument
Code :
1
2
3
4
5
 Private Sub document_open()
 
Refresh
 
End Sub
Code :
1
2
3
4
5
6
7
 Public Sub mldsrh(dpinterface AS DpVBAInterface)
 
dpinterface.CheckDataIntegrity (boCheckAll)
test
 
 
End Sub
'dans module1
Code :
1
2
3
4
5
6
7
8
9
10
 Sub test()
 
    Dim doc AS Report
 
    SET doc = Application.ActiveDocument.Reports.Item(1)
    doc.Activate
 
    ActiveReport.ExportAsExcel ("T:\Vigie\reporting for fod\sbi\export\SBI.xls")
 
End Sub
Et il est où là le problème...................

jazziestan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2007, 10h28   #13
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 37
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 37
Points : 27
Points : 27
Coucou,

Et en mode debug pas à pas (F8), ca donne quoi ?

Et si tu déplaces le code contenu dans "Sub test()" directement dans la macro principale "Sub mldsrh(dpinterface As DpVBAInterface)", ça donne quoi ?
Ashaar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2007, 10h34   #14
Invité de passage
 
Inscription : avril 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 6
Points : 3
Points : 3
salut, je sais pas si tu peu utiliser ca

( je l'avous, ce n'ai pas moi qui l'ai développé, j'ai juste repris ce qui était deja fais )

dans mon cas, j'ouvre un rapport depuis Excel ( je modifie quelques paramêtres de requettes)
j'effectue un refresh et j'exporte sous excel

mais tout ce fait a partir d'Excel, je n'ai aucune macro BO
Code :
1
2
3
4
SET BOApp = CreateObject("BusinessObjects.Application")
AppActivate "BusinessObjects"
SET myBOreport = BOApp.Documents.Open(NomCompletFichierTemplateBO)
DoEvents
...
... 'modification des requetes BO
...

Code :
1
2
3
4
5
6
7
8
9
10
11
 myBOreport.Application.Interactive = False
myBOreport.Refresh
DoEvents
 
'On exporte les données rafraîchies dans un fichier Excel
NomFichierExcelExportDepuisBO = CheminDeCeFichier & "\Export temporaire.xls"
myBOreport.Reports(NomOngletAExporter).Activate
myBOreport.activereport.ExportAsText NomFichierExcelExportDepuisBO
 
myBOreport.Close True
BOApp.Quit
alsips est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2007, 10h48   #15
Candidat au titre de Membre du Club
 
Inscription : juin 2005
Messages : 50
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 50
Points : 10
Points : 10
ok

Merci

Je vois cela un peu plus tard dans la journée et je te redis
jazziestan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h34.


 
 
 
 
Partenaires

Hébergement Web