[Résolu] [Calc] Export PDF dans un dossier précis

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
french_attempt
NOOuvel adepte
NOOuvel adepte
Messages : 19
Inscription : 17 janv. 2007 18:12

[Résolu] [Calc] Export PDF dans un dossier précis

Message par french_attempt »

Bonjour,
j'essaie de faire marcher une macro qui sauve automatiquement mes docs fait sur calc au format pdf dans un dossier precis
J'ai bien regarde sur les autres post mais meme quand je fais un copier coller d'une macro qui est cense marche, j'obtiens un message d'erreur...
Voici ma macro :

Code : Tout sélectionner

Dim propFich(0) as New com.sun.star.beans.PropertyValue
	repertoire = "//home/paul/Desktop/Bc_magasin/" 
	nomclient = InputBox("Entrer le nom du fichier:")
	extension = ".pdf"
	url = repertoire + nomclient + extension
	adressedoc = converttourl(url)
	propFich(0).Name = "FilterName"
	propFich(0).Value = "calc_pdf_Export"
	mondocument.storeToURL(adressedoc, propFich()) 
et voici le message d'erreur que j'obtiens , la derniere ligne du code etant soulignee:

Code : Tout sélectionner

Runtime error Basic
Exception
Type : com.sun.star.task.errorcodeoExecption
Message : .
Quelqu'un sait ce que ca veut dire ? ?

Lorsque j'utilise le code

Code : Tout sélectionner

 mondocument.storeToURL( adressedoc, Array( makePropertyValue( "FilterName", "calc_pdf_Export" ) ) ) 
au lieu de passer par des variables, j'obtiens un autre message d'erreur :

Code : Tout sélectionner

la procedure fonctionnelle n'est pas definie
je comprend pas bien comment une procedure OOo pourrait ne pas etre definie...

Merci de votre aide
[/code]
Dernière modification par french_attempt le 19 janv. 2007 16:11, modifié 1 fois.
OOo 2.4.0
Linux / Ubuntu 8.04 sur eee pc
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

Message par bm92 »

Bonsoir,
La première erreur est bizarre si le codage est correct. As-tu le droit d'écrire sur le répertoire cible?

D'autre part je pense que tu ne montres qu'une partie du codage. Si c'est la totalité, c'est normal que cela ne marche pas (monDocument n'est pas initialisé).
Dans la deuxième variante, il te faut un sous-programme appelé makePropertyValue.

Si ta macro est plus complexe, essaie d'écrire une macro réduite au minimum (pratiquement ce que tu as écris) et reproduis ici la totalité.

Désolé si mes réponses te semblent basiques, mais je ne connais pas ton niveau de connaissances en programmation.
Nicolas
Membre hOOnoraire
Membre hOOnoraire
Messages : 121
Inscription : 30 nov. 2006 13:28
Localisation : Chambéry (73)

Message par Nicolas »

Salut,
Le copier coller de macro ne fonctionne pas fiablement, et il est des fois préférable de réécrire en totalité la macro.
@+
nicolas.
OoO 3.0.1 XP home SP3
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

Bonjour

En complément, même si ce n'est pas la réponse à ta question, je voudrais attirer ton attention sur l'importance de déclarer les variables utilisées et sur l'opérateur de concaténation : tu emploies le "+" qui convient dans ton cas de figure mais je te conseille, pour la concaténation de chaînes, d'utiliser plutôt le "&".

Par exemple le code suivant :

Code : Tout sélectionner

url = MaVar + extension 
print url
url = MaVar & extension 
print url
ne donnera pas le même résultat si MaVar est déclarée de type numérique...
french_attempt
NOOuvel adepte
NOOuvel adepte
Messages : 19
Inscription : 17 janv. 2007 18:12

Message par french_attempt »

Bonjour a tous et merci de votre reactivite.
Ce forum est super.

Voici mon code (j'ai commente les parties de la macro qui marchent deja)

Code : Tout sélectionner

Sub impression
Dim mondocument as object, lesfeuilles as object, mafeuille as object, mazone as object
Dim Props(0) as New com.sun.star.beans.PropertyValue
Dim adrzones(1) as New com.sun.star.table.CellRangeAddress
Dim date as long
'Variable pour la sauvegarde
Dim dummy()
Dim propFich(0) as New com.sun.star.beans.PropertyValue
Dim adressedoc as string, adressebc as string
Dim numerobc as integer, nomclient as string, url as string, urlbc as string, repertoire as string, extension as string

'On se positionne sur l'onglet bon de commande
mondocument = thisComponent
lesfeuilles = mondocument.sheets
mafeuille = lesfeuilles.getbyname("Bon de commande")

'Fige la valeur de la date
'	date = mafeuille.getcellByPosition(9,5).value
'	mafeuille.getcellByPosition(9,5).value = date

'On selectionne la zone a imprimmer et imprime 2 ex. - ok
'	mazone = mafeuille.getcellrangebyname("C3:J55")
'	adrzones(0) = mazone.RangeAddress
'	Props(0).Name = "CopyCount"
'	Props(0).Value = 2
'	mondocument.Print(Props()) 'une page par zone

'Sauvegarde sous le nom demande dans le repertoire de transfert en ods- OK
'	repertoire = "//home/vendeur/.transfert/" 
'	nomclient = InputBox("Entrer le nom du fichier:")
'	extension = ".ods"
'	url = repertoire + nomclient + extension
'	adressedoc = converttourl(url)
'	mondocument.storeasurl(adressedoc, dummy() ) 

'Sauvegarde sous le nom demande dans le repertoire de transfert - en cours
	repertoire = "//home/paul/Desktop/Bc_magasin/" 
	nomclient = InputBox("Entrer le nom du fichier:")
	extension = ".pdf"
	url = repertoire + nomclient + extension
	adressedoc = converttourl(url)
	propFich(0).Name = "FilterName"
	propFich(0).Value = "calc_pdf_Export"
	mondocument.storeToURL( adressedoc, propFich()) 
'	mondocument.storeToURL( adressedoc, Array( makePropertyValue( "FilterName", "calc_pdf_Export" ) ) )

'Ouverture du Bc_magasin - OK
'	urlbc = "/home/vendeur/Desktop/Carnet_Bon_Commandes_v8,9.ods" 'remplacer par le vrai nom du carnet de commande
'	adressebc = converttourl(urlbc)
'	mondocument = StarDesktop.loadComponentFromURL(adressebc, "_blank", 0, dummy())
'	lesfeuilles = mondocument.sheets
'	mafeuille = lesfeuilles.getbyname("Bon de commande")

'Incremente le numero du BC - OK
	numerobc = mafeuille.getcellByPosition(12,4).value
	mafeuille.getcellByPosition(12,4).value =  numerobc + 1
	numerobc = mafeuille.getcellByPosition(12,4).value

'Sauvegarde du Bc_magasin - OK
'	mondocument.store
'	on error resume next
'	mondocument.close(true)
'	on error goto 0
	
	
End Sub
Pour la concatenation, ca marche bien avec +, en imprimant le resultat a l'ecran, j'ai bien une concatenation.
En plus ca marche pour la sauvegarde en ods dans le repertoir choisi.

J'ai bien la permission d'ecrire dans tous les repertoires du home

Lorsque je commente la ligne

Code : Tout sélectionner

 	propFich(0).Name = "FilterName"
Ca me sauve un fichier .pdf au bon endroit, mais le fichier ne s'ouvre pas. Un message d'erreur apparait dans evince (lecteur de pdf sous linux)
Des que je decommente la ligne j'ai le premier message d'erreur

Je bloque vraiment sur ce probleme...

Je precise a tout hasard que l'export pdf a partir de l'icone export to pdf marche bien. (Peut-on regarder le detail de cette macro ou l'appeler directement a partir d'une autre macro ? ?)

Merci

ps : Effectivmeent j'avais oublier la fontion
Function MakePropertyValue( Optional cName As String, Optional uValue ) As com.sun.star.beans.PropertyValue
oPropertyValue = createUnoStruct( "com.sun.star.beans.PropertyValue" )
If Not IsMissing( cName ) Then
oPropertyValue.Name = cName
EndIf
If Not IsMissing( uValue ) Then
oPropertyValue.Value = uValue
EndIf
MakePropertyValue() = oPropertyValue
End Function
depuis que je l'ai mise, j'ai le premier message d'erreur qui apparait...
OOo 2.4.0
Linux / Ubuntu 8.04 sur eee pc
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

Message par bm92 »

french_attempt a écrit :Lorsque je commente la ligne

Code : Tout sélectionner

 	propFich(0).Name = "FilterName"
Ca me sauve un fichier .pdf au bon endroit, mais le fichier ne s'ouvre pas. Un message d'erreur apparait dans evince (lecteur de pdf sous linux)
Oui, normal, tu as sauvegardé un fichier Calc avec une extension pdf. En renommant l'extension du fichier en ods il devrait s'ouvrir.

Pour simplifier, ce code résume ton problème

Code : Tout sélectionner

Sub impressionSimple 
Dim mondocument as object
Dim propFich(0) as New com.sun.star.beans.PropertyValue 
Dim adressedoc as string
Dim nomclient as string, url as string, repertoire as string, extension as string 

mondocument = thisComponent 
   repertoire = "//home/paul/Desktop/Bc_magasin/" 
   nomclient = "Tata" 
   extension = ".pdf" 
   url = repertoire + nomclient + extension 
   adressedoc = converttourl(url) 
   propFich(0).Name = "FilterName" 
   propFich(0).Value = "calc_pdf_Export" 
   mondocument.storeToURL( adressedoc, propFich()) 
End Sub
Crée un nouveau document Calc. Ecris quelques cellules. Fais un copier-coller de la macro impressionSimple dans le Module1 de la bibli Standard du document. Exécute la macro.
Si ça fait la même erreur, je sèche. :roll: Parce que chez moi (OOo 2.0.4 Win XP) ça donne bien un fichier Tata.pdf correct. 8)
Je commence à soupçonner ton OpenOffice façon Ubuntu.
french_attempt
NOOuvel adepte
NOOuvel adepte
Messages : 19
Inscription : 17 janv. 2007 18:12

Message par french_attempt »

merci bm92

ta macro ne marche pas chez moi.... meme message d'erreur
je commence a soupconner ubuntu et/ou ooo 2.0.2

Je vais faire un update de version et tester sur xp pour voir ce que ca donne.

encore merci de ton aide
OOo 2.4.0
Linux / Ubuntu 8.04 sur eee pc
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

J'ai testé ton code et n'ai pas d'erreur, que ce soit en utilisant ou non la fonction MakePropertyValue.

Ta remarque sur le fonctionnement de l'export "à la main" est pertinente : j'ai déjà rencontré un dysfonctionnement de ce genre de macro sur un poste "fraîchement" installé et sur lequel aucun export n'avait été fait. Ton problème ne vient donc pas de là non plus.

La remarque de Nicolas est également pertinente : il est arrivé que des personnes recopient du code sur ce forum et soient confrontés à des problèmes d'exécution (en l'occurrence caractères incorrects à la place des espaces et/ou tabulations). Toutefois, j'ai moi-même recopié ton code, donc...


Peut-être un problème lié à ton OOo ?

Si cela t'est possible, utilise le service "joindre un fichier" qui nous permettrait peut-être d'élucider davantage...


PS : bm92 est vraiment rapide en plus de ses compétences :D, mon post arrive après la bataille mais je le laisse pour ces deux premièrs points
french_attempt
NOOuvel adepte
NOOuvel adepte
Messages : 19
Inscription : 17 janv. 2007 18:12

Message par french_attempt »

bonjour,

j'ai teste ma macro sur OOo 2.0.4 sous ubuntu et ca pause le meme probleme. je commence a serieusement me poser des questions sur ubuntu
je vais installer la version ooo 2.1 pour voir.


pour Pierre-Yves Samyn:
j'ai pas trouve l'option pour joindre un fichier... ca ce trouve ou ? ?
moi je vois : quote code list img et url...[/list][/url]
OOo 2.4.0
Linux / Ubuntu 8.04 sur eee pc
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17219
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Message par jeanmimi »

Bonjour,

C'est ce service que Pierre Yves te signalait :
http://user.services.openoffice.org/fr/ci-joint/
LibreOffice : Version : 25.8.4 (x64)(23 février 2026)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
french_attempt
NOOuvel adepte
NOOuvel adepte
Messages : 19
Inscription : 17 janv. 2007 18:12

Message par french_attempt »

Voici le fichier avec uniquement la partie de la macro qui plante.

En gros ca sauvegarde au format ods, pas de soucis ca fonctionne
Par contre la deuxieme partie qui veut saver au format pdf plante.....

Code : Tout sélectionner

 Sub impression
Dim mondocument as object, lesfeuilles as object, mafeuille as object, mazone as object
Dim Props(0) as New com.sun.star.beans.PropertyValue
Dim adrzones(1) as New com.sun.star.table.CellRangeAddress
Dim date as long
'Variable pour la sauvegarde
Dim dummy()
Dim propFich(0) as New com.sun.star.beans.PropertyValue
Dim adressedoc as string, adressebc as string
Dim numerobc as integer, nomclient as string, url as string, urlbc as string, repertoire as string, extension as string

'On se positionne sur l'onglet bon de commande
mondocument = thisComponent
lesfeuilles = mondocument.sheets
mafeuille = lesfeuilles.getbyname("Bon de commande")

'Sauvegarde sous le nom demande dans le repertoire de transfert en ods- OK
	repertoire = "//home/paul/Desktop/Bc_magasin/" 
	nomclient = InputBox("Entrer le nom du fichier:")
	extension = ".ods"
	url = repertoire + nomclient + extension
	adressedoc = converttourl(url)
	mondocument.storeasurl(adressedoc, dummy() ) 

'Sauvegarde sous le nom demande dans le repertoire de transfert - en cours
	repertoire = "//home/paul/Desktop/Bc_magasin/" 
	nomclient = InputBox("Entrer le nom du fichier:")
	extension = ".pdf"
	url = repertoire + nomclient + extension
	adressedoc = converttourl(url)
	propFich(0).Name = "FilterName"
	propFich(0).Value = "calc_pdf_Export"
	mondocument.storeToURL( adressedoc, propFich()) 
'	mondocument.storeToURL( adressedoc, Array( makePropertyValue( "FilterName", "calc_pdf_Export" ) ) )

End Sub 
http://user.services.openoffice.org/fr/ ... 030707.ods


Exite t il un moyen de faire appel a la fonction savegarde en pdf a partir d'une macro?
Cette fonction du menu fichier fonctionnant chez moi, ce serait peut etre plus simple d'y faire appel ? ?


merci de votre aide [/code]
OOo 2.4.0
Linux / Ubuntu 8.04 sur eee pc
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17219
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Message par jeanmimi »

Bonjour,

Dans cette page, l'utilitaire "MultiSave" associe plusieurs Macros qui permettent de sauvegarder les documents dans trois types de formats.
En les éditant, tu trouverais peut être les lignes de codes que tu cherches :

http://www.starxpert.fr/spip/spip.php?article23
LibreOffice : Version : 25.8.4 (x64)(23 février 2026)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
french_attempt
NOOuvel adepte
NOOuvel adepte
Messages : 19
Inscription : 17 janv. 2007 18:12

Message par french_attempt »

j'utilise le meme code qu'eux et pourtant j'ai un message d'erreur....je seche completement
OOo 2.4.0
Linux / Ubuntu 8.04 sur eee pc
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

Bonjour

J'ai téléchargé et testé ta macro : elle fonctionne. Le problème ne vient donc pas d'elle.

Seule particularité, le fichier mis en ligne comprend plusieurs modules (Sheet1, etc.) issus d'une récupération VBA. Je ne vois pas en quoi cela pourrait gêner mais tu peux toujours essayer de les supprimer ou de voir au niveau des options "Chargement / VBA" si cela influe.

Sinon... les soupçons sur ta version se renforcent...
french_attempt
NOOuvel adepte
NOOuvel adepte
Messages : 19
Inscription : 17 janv. 2007 18:12

Message par french_attempt »

j'ai resolu le probleme ; il s'agissait d'une erreure dans le chemin d'enregistrement sous linux...
en fait je commencais l'adresse par // et il ne faut qu'un seul /

Voila , ca me conforte dans l'idee que je suis pas tres doue pour la programmation..

En tout cas merci beaucoup a vous tous pour votre aide et votre savoir.
OOo 2.4.0
Linux / Ubuntu 8.04 sur eee pc