[Résolu][Calc] Enregistrer un fichier en PDF suivant une zone d'impression
Modérateur : Vilains modOOs
Règles du forum
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 !
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 !
-
- Membre OOrganisé
- Messages : 69
- Inscription : 15 déc. 2009 22:16
[Résolu][Calc] Enregistrer un fichier en PDF suivant une zone d'impression
Bonjour,
Je souhaite imprimer en PDF une facture, qui se trouve sur la feuille "Facture" à l'aide du bouton dédié. Mon problème, c'est que les 3 feuilles du fichiers se retrouvent dans le PDF.
J'ai pourtant défini une zone d'impression, mais comme cela ne semblait pas suffire, j'ai également défini une zone d'impression dans la macro. Avec la macro, je vois que la zone est sélectionnée, mais le résultat est le même : 3 feuilles dans le PDF. Par contre si j'utilise aperçu avant impression, j'ai bien une seule feuille à l'écran. La boite de dialogue Fichier - exporter en PDF - Option PDF général est coché : sélection/Feuille(s)...
Ayant récupérer des bouts de code sur le forum (sans trop comprendre ce qu'il y avait dedans), je me dis qu'il y a quelque chose dans le code qui annihile la zone d'impression. Quelqu'un peut-il m'aider à trouver ce qu'il faut changer.
merci d'avance
PS: en anonymisant le fichier joint (suppression de texte et des formules sur la feuille calc j'ai cassé la dernière ligne de la macro ???
Erreur d'exécution BASIC.
Une exception s'est produite :
Type: com.sun.star.io.IOException
Message: SfxBaseModel::impl_store <file:///C:/Septembre%202024.pdf> failed: 0x507(Error Area:Io Class:Access Code:7).
Luc
Je souhaite imprimer en PDF une facture, qui se trouve sur la feuille "Facture" à l'aide du bouton dédié. Mon problème, c'est que les 3 feuilles du fichiers se retrouvent dans le PDF.
J'ai pourtant défini une zone d'impression, mais comme cela ne semblait pas suffire, j'ai également défini une zone d'impression dans la macro. Avec la macro, je vois que la zone est sélectionnée, mais le résultat est le même : 3 feuilles dans le PDF. Par contre si j'utilise aperçu avant impression, j'ai bien une seule feuille à l'écran. La boite de dialogue Fichier - exporter en PDF - Option PDF général est coché : sélection/Feuille(s)...
Ayant récupérer des bouts de code sur le forum (sans trop comprendre ce qu'il y avait dedans), je me dis qu'il y a quelque chose dans le code qui annihile la zone d'impression. Quelqu'un peut-il m'aider à trouver ce qu'il faut changer.
merci d'avance
PS: en anonymisant le fichier joint (suppression de texte et des formules sur la feuille calc j'ai cassé la dernière ligne de la macro ???
Erreur d'exécution BASIC.
Une exception s'est produite :
Type: com.sun.star.io.IOException
Message: SfxBaseModel::impl_store <file:///C:/Septembre%202024.pdf> failed: 0x507(Error Area:Io Class:Access Code:7).
Luc
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par micmac le 28 oct. 2024 08:03, modifié 2 fois.
Raison : Ajout de la coche verte
Raison : Ajout de la coche verte
LibreOffice Version:7.3.7.2 - Windows 10 (version de mon travail. Le service informatique ne veut pas changer de version)
-
- IdOOle de la suite
- Messages : 25602
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression
Salut,
On va encore le répéter mais il faut systématiquement :
C'est quoi cette définition de la variable repertoire ?
A minima, il faut convertir un chemin avec ConvertToUrl
Et je ne suis pas fan de la génération de fichier à la racine du disque.
On va encore le répéter mais il faut systématiquement :
- Poster le code dans le message car cela nous évite de télécharger inutilement un document.
- Eviter de nommer le document "essai", "test", c'est pénible.
Code : Tout sélectionner
Sub Essai_Facture_pdf
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, MonTxt as string
mondocument = thisComponent
repertoire = "file:C:\"
rem ----------------------------------------------------------------------
rem Récupération du contenu de la cellule D5
rem ----------------------------------------------------------------------
MaFeuil = MonDocument.CurrentController.ActiveSheet
MonTxt = MaFeuil.GetCellRangeByName("D5").String
extension = ".pdf"
url = repertoire + MonTxt + extension
'-------- définition zone impression
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$D$46"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())
'---------- fin zone impression
adressedoc = converttourl(url)
propFich(0).Name = "FilterName"
propFich(0).Value = "calc_pdf_Export"
mondocument.storeToURL( adressedoc, propFich())
''''''''''''''EFFACER LA ZONE D'IMPRESSION''''''''''''''''''''
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:DeletePrintArea", "", 0, Array())
End Sub
A minima, il faut convertir un chemin avec ConvertToUrl
Et je ne suis pas fan de la génération de fichier à la racine du disque.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
-
- SuppOOrter
- Messages : 1466
- Inscription : 18 janv. 2008 09:02
- Localisation : Val de Marne
Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression
Bonsoir,
Dude a raison,
m'est tout aussi bizarre et ne correspond à rien. Puisqu'ensuite tu convertis :
Pour que ça fonctionne correctement, il faut que tu définisse ton répertoire Windows comme un chemin classique :
Pour éviter l'impression des trois pages, il faudrait trouver le paramètre qui correspond au bouton "Sélection/Feuilles"
Pour la définition de la zone d'impression, tu codes :
Ca fonctionnerait mieux avec args1()
Cordialement,
Dude a raison,
Code : Tout sélectionner
repertoire = "file:C:\"
Code : Tout sélectionner
adressedoc = converttourl(url)
Code : Tout sélectionner
repertoire = "C:\"
Pour la définition de la zone d'impression, tu codes :
Code : Tout sélectionner
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())
Cordialement,
Jean-Michel
LibO 24.2 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 24.8 sur OpenSuse & Linux MX
LibO 24.2 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 24.8 sur OpenSuse & Linux MX
-
- Membre OOrganisé
- Messages : 69
- Inscription : 15 déc. 2009 22:16
Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression
Bonjour,
Merci pour vos informations.
Le code, je ne l'ai pas écrit moi-même, je l'ai trouvé sur le forum et comme je l'ai dit je ne comprends pas tout ce qui est écrit et même très très peu.
J'ai modifié la variable repertoire comme vous me l'avez conseillée, mais sur mon fichier original cela fonctionne tel quel (sans qu'il soit nécessaire de modifier).
Concernant la zone d'impression, elle fonctionne puisqu'elle se voit sur le fichier calc (impression écran de Dude). Pour le code de création et de suppression de la zone d'impression, j'ai enregistré une macro que j'ai inséré au programme.
merci et bonne journée
Luc
Merci pour vos informations.
Le code, je ne l'ai pas écrit moi-même, je l'ai trouvé sur le forum et comme je l'ai dit je ne comprends pas tout ce qui est écrit et même très très peu.
J'ai modifié la variable repertoire comme vous me l'avez conseillée, mais sur mon fichier original cela fonctionne tel quel (sans qu'il soit nécessaire de modifier).
Concernant la zone d'impression, elle fonctionne puisqu'elle se voit sur le fichier calc (impression écran de Dude). Pour le code de création et de suppression de la zone d'impression, j'ai enregistré une macro que j'ai inséré au programme.
Avez-vous un indice qui me permettrait de trouver où chercher , un post, une doc, un site ?Pour éviter l'impression des trois pages, il faudrait trouver le paramètre qui correspond au bouton "Sélection/Feuilles"
merci et bonne journée
Luc
LibreOffice Version:7.3.7.2 - Windows 10 (version de mon travail. Le service informatique ne veut pas changer de version)
-
- IdOOle de la suite
- Messages : 25602
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression
Publie à nouveau le code corrigé et le document.
-
- Membre OOrganisé
- Messages : 69
- Inscription : 15 déc. 2009 22:16
Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression
Bonjour,
J'ai corrigé la variable repertoire, mais cela ne change rien, le code ne fonctionne toujours pas. Je cherche...
J'ai corrigé la variable repertoire, mais cela ne change rien, le code ne fonctionne toujours pas. Je cherche...
Code : Tout sélectionner
REM ***** BASIC *****
Sub Essai_Facture_pdf
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, MonTxt as string
mondocument = thisComponent
repertoire = "C:\"
rem ----------------------------------------------------------------------
rem Récupération du contenu de la cellule D5
rem ----------------------------------------------------------------------
MaFeuil = MonDocument.CurrentController.ActiveSheet
MonTxt = MaFeuil.GetCellRangeByName("D5").String
extension = ".pdf"
url = repertoire + MonTxt + extension
'-------- définition zone impression
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$D$46"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())
'---------- fin zone impression
adressedoc = converttourl(url)
propFich(0).Name = "FilterName"
propFich(0).Value = "calc_pdf_Export"
mondocument.storeToURL( adressedoc, propFich())
''''''''''''''EFFACER LA ZONE D'IMPRESSION''''''''''''''''''''
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:DeletePrintArea", "", 0, Array())
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par lucno le 25 oct. 2024 08:56, modifié 1 fois.
LibreOffice Version:7.3.7.2 - Windows 10 (version de mon travail. Le service informatique ne veut pas changer de version)
-
- Membre OOrganisé
- Messages : 69
- Inscription : 15 déc. 2009 22:16
Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression
Voici le document avec un nouveau nom
LibreOffice Version:7.3.7.2 - Windows 10 (version de mon travail. Le service informatique ne veut pas changer de version)
-
- RespOOnsable forum
- Messages : 9580
- Inscription : 28 août 2010 08:45
Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression
Lorsque votre message n'est pas suivi d'une réponse, merci de ne pas poster plusieurs messages à la suite. Vous disposez d'un bouton Modifier le message en haut à droite de chaque message et d'un autre bouton ajout si vous désirez ajouter un complément.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur macOS
Outils > Options sur Windows = OpenOffice > Préférences sur macOS
-
- Membre OOrganisé
- Messages : 69
- Inscription : 15 déc. 2009 22:16
Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression
Ok, j'ai fait la modif, mais je ne peux pas supprimer le message inutile !
LibreOffice Version:7.3.7.2 - Windows 10 (version de mon travail. Le service informatique ne veut pas changer de version)
-
- IdOOle de la suite
- Messages : 25602
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression
Dans ce cas, tu devrais utiliser l'extension Export feuille en PDF.
Ce code ne peut fonctionner en l'état :
Code : Tout sélectionner
propFich(0).Name = "FilterName"
propFich(0).Value = "calc_pdf_Export"
mondocument.storeToURL( adressedoc, propFich())
Code : Tout sélectionner
dim propFich(3) as new com.sun.star.beans.PropertyValue
dim filtreProps(0) as new com.sun.star.beans.PropertyValue
filtreProps(0).Name = "PageRange"
filtreProps(0).Value = "1"
propFich(0).Name = "FilterName"
propFich(0).Value = "Calc_pdf_Export"
propFich(1).Name = "FilterData"
propFich(1).Value = filtreProps()
propFich(2).Name = "URL"
propFich(2).Value = adressedoc
propFich(3).Name = "Overwrite"
propFich(3).Value = true
dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, PropFich())
-
- Membre OOrganisé
- Messages : 69
- Inscription : 15 déc. 2009 22:16
Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression
J'ai modifié, maintenant j'ai la boite "Option PDF" qui s'ouvre et lorsque je clique sur le bouton enregistrer, j'ai un message d'erreur (en pièce jointe). Le ficher PDF ne se crée pas
Code : Tout sélectionner
REM ***** BASIC *****
Sub Essai_Facture_pdf
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, MonTxt as string
mondocument = thisComponent
repertoire = "C:\"
rem ----------------------------------------------------------------------
rem Récupération du contenu de la cellule D5
rem ----------------------------------------------------------------------
MaFeuil = MonDocument.CurrentController.ActiveSheet
MonTxt = MaFeuil.GetCellRangeByName("D5").String
extension = ".pdf"
url = repertoire + MonTxt + extension
'-------- définition zone impression
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$D$46"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())
'---------- fin zone impression
adressedoc = converttourl(url)
'propFich(0).Name = "FilterName"
'propFich(0).Value = "calc_pdf_Export"
'mondocument.storeToURL(adressedoc, propFich())
dim propFich(3) as new com.sun.star.beans.PropertyValue
dim filtreProps(0) as new com.sun.star.beans.PropertyValue
filtreProps(0).Name = "PageRange"
filtreProps(0).Value = "1"
propFich(0).Name = "FilterName"
propFich(0).Value = "Calc_pdf_Export"
propFich(1).Name = "FilterData"
propFich(1).Value = filtreProps()
propFich(2).Name = "URL"
propFich(2).Value = adressedoc
propFich(3).Name = "Overwrite"
propFich(3).Value = true
dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, PropFich())
''''''''''''''EFFACER LA ZONE D'IMPRESSION''''''''''''''''''''
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:DeletePrintArea", "", 0, Array())
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice Version:7.3.7.2 - Windows 10 (version de mon travail. Le service informatique ne veut pas changer de version)
-
- IdOOle de la suite
- Messages : 25602
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
-
- Membre OOrganisé
- Messages : 69
- Inscription : 15 déc. 2009 22:16
Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression
Non, je ne vois rien s'ouvrir et mon lecteur de PDF n'est pas déjà ouvert.
Le fichier PDF ne se crée pas.
Le fichier PDF ne se crée pas.
LibreOffice Version:7.3.7.2 - Windows 10 (version de mon travail. Le service informatique ne veut pas changer de version)
-
- SuppOOrter
- Messages : 1466
- Inscription : 18 janv. 2008 09:02
- Localisation : Val de Marne
Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression
Salut,
Probablement un problème de permissions.
Cordialement.
Chez moi, la procédure copiée telle quelle ne fait rien. Si je change dossier en D:\Travail\, ça fonctionne.
Probablement un problème de permissions.
Cordialement.
Jean-Michel
LibO 24.2 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 24.8 sur OpenSuse & Linux MX
LibO 24.2 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 24.8 sur OpenSuse & Linux MX
-
- Membre OOrganisé
- Messages : 69
- Inscription : 15 déc. 2009 22:16
Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression
Bonjour,
Malgré mes recherches, je n'arrivais à trouver, j'allais laisser tomber
Merci pour votre réponse.
Dube avait raison :
Luc
Malgré mes recherches, je n'arrivais à trouver, j'allais laisser tomber
Merci pour votre réponse.
Dube avait raison :
Bonne journéeEt je ne suis pas fan de la génération de fichier à la racine du disque.
Luc
LibreOffice Version:7.3.7.2 - Windows 10 (version de mon travail. Le service informatique ne veut pas changer de version)