[Calc] Imprime – export.pdf avec bouton

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 !
Grande Ourse
Membre OOrganisé
Membre OOrganisé
Messages : 56
Inscription : 29 janv. 2024 00:06

[Calc] Imprime – export.pdf avec bouton

Message par Grande Ourse »

Bonjour,
Suite à mes recherches, j’ai trouvé plusieurs exemples de code (± 30 macros) auxquelles j’ai retenu certaines parties du code.

Voiçi ce que j’essai de faire :

1) Sur la feuille « Feuille de Brassage » je voudrais imprimer 2 plage de cellules (zones) $A:1$G:64 et $A:64$G :122 sur une seule feuille de papier soit en recto-verso. J’ai réussi à imprimer les 2 zones mais sur une seule feuille de papier (non recto-verso; le résultat et trop petit pour être bien lisible.

2) Suite à l’impression papier, je veux exporter les 2 zones au format .PDF dans un dossier nommé Recettes et nommé le fichier Feuille de brassage + contenu de la cellule A1. Le dossier recette doit être dans le même répertoire que le classeur. Le classeur étant partagé avec plusieurs personnes, cela permettera de l’installer dans le répertoire de son choix sans inconvénient. Suite à la céation du dossier, est-ce qu’il faut une boucle pour éviter l’arrêt de la macro lors de l’appui successif du bouton « Impression »?

3) Au nom du fichier, j’ai ajouté un dateur pour éviter les doublons.

4) Tout cela à partir d’un clic sur le bouton « Impression »

5) J’ai un erreur d’exécution basic « 9 » à la ligne 30 (index hors de la plage définie) que je ne trouve pas.

Voiçi le code :

Code : Tout sélectionner

sub Impression_click '-------impression papier Feuille de Brassage-------
Dim aOptions(5) as New com.sun.star.beans.PropertyValue
Dim MonDocument as object, Mesfeuilles as object, Mafeuille as object, MaZone As Object, MaCellule As Object
Dim adrZone(0) As New com.sun.star.table.CellRangeAddress
aOptions(1).Name = "PaperFormat" : aOptions(1).Value = com.sun.star.view.PaperFormat.A4
aOptions(2).Name = "PaperOrientation" : aOptions(2).Value 1

com.sun.star.view.PaperOrientation.PORTRAIT
aOptions(3).Name = "Sort" : aOptions(3).Value = FALSE
aOptions(4).Name = "Copies" : aOptions(4).Value = 1
aOptions(5).Name = "Collate" : aOptions(5).Value = true
MonDocument = ThisComponent '------Sélectionne le document en cours------
'----Enregistrement du fichier original si ce n'est pas encore fait pour être sûr que les
'dernières modifications soient bien dans le fichier destination------
If oDoc.IsModified Then
oDoc.Store
msgbox "Le fichier sera enregistré pour inclure les dernières modifications avant de poursuivre cette macro"
EndIf
MesFeuilles = monDocument.Sheets
MaFeuille = MesFeuilles.getByName("Feuille de Brassage")
monDocument.CurrentController.ActiveSheet = maFeuille
'-------Sélection de la zone 1 à imprimer------
MaZone = MaFeuille.getCellRangeByName("$A$1:$G$64") '------zone1------
adrZone(0) = MaZone.RangeAddress
'-------Sélection de la zone 2 à imprimer------
MaZone = MaFeuille.getCellRangeByName("$A$64:$G$122") '------ zone2-------
adrZone(1) = MaZone.RangeAddress
MaFeuille.PrintAreas = adrZone()
MonDocument.Print(aOptions())
Wait 150
MaFeuille = MesFeuilles.getByName("Feuille de Brassage")
'-------Je me replace en A1 pour sortir de la sélection--------
MaCellule = MaFeuille.getCellRangeByName("A1")
MonDocument.currentController.Select(MaCellule)
end sub
'-------Création du nouveau dossier dans le répertoire existant-----
Sub Main
GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
oDoc = ThisComponent '------Sélectionne le document en cours------
oFeuil = oDoc.Sheets.getByName("Feuille de Brassage")
URLActuel = ThisComponent.getURL()
'-----On recherche la position du dernier slash dans la chaine-----
i = InStr(URLActuel, "/")
Do While i > 0
dernierePos = i
i = InStr(i+1, URLActuel, "/")
Loop
'----Suppression de tout ce qu'il y a derrière le dernier slash pour récupérer le répertoire------
Dim DirActuel as string
DirActuel = Left(URLActuel, dernierePos)
sSousRep = array("Recettes")
sRep = convertToUrl
for j = 0 to UBound(sSousRep)
MkDir ConvertToUrl(sRep & "\" & sSousRep(j))
next
End Sub
Sub Export_Calc_Vers_PDF '------Exporte au format .pdf-------
dim ArgsProprietes(2) as new com.sun.star.beans.PropertyValue
dim Fichier as string
dim oDoc as object

'----Indique le nom de la sauvegarde au format pdf
'----Nom de la feuille + cellule A1 + Date'
'----soit /Recettes/Feuille de Brassage-Centennial Blonde Ale_BierMuncher-le 24.11.2025.pdf
'----(Le fichier pdf sera créé dans le même répertoire que le classeur.)
oCell = oFeuille.getCellRangeByName("A1")
Fichier = ocell.getString & ".pdf"
Fichier = Left( ThisComponent.URL , Len(ThisComponent.URL) - 4 ) & "/Recettes/" &"-" & Feuille_de_Brassage & A1 & " - le " & Format (Now, "DD-MM-YY-HH-MM" ) & ".pdf"
'----&CStr(Day(Date()))&"."&CStr(Month(Date()))&"."&CStr(Year(Date()))&".pdf"-------

'------ Spécifie le filtre de conversion ------
ArgsProprietes(0).Name = "FilterName" 'permet de dire sur quelle propriété je vais travailler
ArgsProprietes(0).Value = "calc_pdf_Export" 'indique l'export PDF
ArgsProprietes(1).Name = "CompressMode"
ArgsProprietes(1).Value = 1

'------exporte au format .PDF-------
ThisComponent.storeToUrl(convertToUrl( Fichier , ArgsProprietes())
'-------Message de confirmation------
MsgBox "Le PDF a été créé avec succès." , 0, "ExportToPDF()"
End Sub '-----------------------------------------------------
Je débute et ma compréhension du code est limitée, alors votre aide serait très apprécié.
Voir fichier joint que j'ai purgé au minimum.

Merçi.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 25.2.5.2 (X86-64), Window7 et Linux_Ubuntu 20.04.6LTS, 64 bits, Libre office 6.4.7.2
Avatar de l’utilisateur
rollmops
PassiOOnné
PassiOOnné
Messages : 734
Inscription : 20 déc. 2017 14:45

Re: [Calc] Imprime – export.pdf avec bouton

Message par rollmops »

Bonjour,

Le classeur joint contient des dizaines de modules de macros. Pouvez-vous donner un mode opératoire ?
J’ai un erreur d’exécution basic « 9 » à la ligne 30 (index hors de la plage définie) que je ne trouve pas.
Que donne Xray sur la variable que vous interrogez ?
Grande Ourse a écrit : 30 nov. 2025 01:41 Je débute et ma compréhension du code est limitée, alors votre aide serait très apprécié.
Pourquoi n'utilisez-vous pas l'extension Export des feuilles dans des PDF distincts ?

A+
OpenOffice 4.1.16 - Windows 11
Grande Ourse
Membre OOrganisé
Membre OOrganisé
Messages : 56
Inscription : 29 janv. 2024 00:06

Re: [Calc] Imprime – export.pdf avec bouton

Message par Grande Ourse »

Bonjour rollmops,

Merçi d'avoir répondu.

1) Pour le classeur voiçi comment je procède:
Outils--> Macros -->Gérer les macros--> Basic--> Impression exportpdf.ods-->VBaPrjects-->Objets du documents-->Feuille12(Feuille de brassage)--> Impression_click--éditer ou exécuter.

2) Xray, je l'ai téléchargé, il est dans mes macros mais je ne sais pas l'utiliser.

3) J'ai bien vu cet extension mais cela demande plusieurs manipulations que les utilisateurs auront peu être de la difficulté à comprendre et accomplir, d'ou l'utilisation de la macro sur un clic de bouton qui accompli tout automatiquement.

Salutations,
LibreOffice 25.2.5.2 (X86-64), Window7 et Linux_Ubuntu 20.04.6LTS, 64 bits, Libre office 6.4.7.2
Avatar de l’utilisateur
rollmops
PassiOOnné
PassiOOnné
Messages : 734
Inscription : 20 déc. 2017 14:45

Re: [Calc] Imprime – export.pdf avec bouton

Message par rollmops »

Grande Ourse a écrit : 30 nov. 2025 15:42 Outils--> Macros -->Gérer les macros--> Basic--> Impression exportpdf.ods-->VBaPrjects-->Objets du documents-->Feuille12(Feuille de brassage)--> Impression_click--éditer ou exécuter.
VBA ? C'est pas pour Microsoft, ça ?
Pourquoi ne mettez-vous pas vos macros dans la bibliothèque Standard.


Grande Ourse a écrit : 30 nov. 2025 15:42 2) Xray, je l'ai téléchargé, il est dans mes macros mais je ne sais pas l'utiliser.
Il y a un mode d'emploi dans le document qui sert à l'installer. Il faut le lire.


Grande Ourse a écrit : 30 nov. 2025 15:42 3) J'ai bien vu cet extension mais cela demande plusieurs manipulations que les utilisateurs auront peu être de la difficulté à comprendre et accomplir, d'ou l'utilisation de la macro sur un clic de bouton qui accompli tout automatiquement.
Il vous suffit d'intégrer les macros de l'extension dans votre document dans ce cas.
Et vous la lancez depuis le bouton au lieu du menu.


Bon courage
OpenOffice 4.1.16 - Windows 11
Grande Ourse
Membre OOrganisé
Membre OOrganisé
Messages : 56
Inscription : 29 janv. 2024 00:06

Re: [Calc] Imprime – export.pdf avec bouton

Message par Grande Ourse »

Bonjour rollmops,
VBA ? C'est pas pour Microsoft, ça ?
Pourquoi ne mettez-vous pas vos macros dans la bibliothèque Standard.
Le classeur d'origine était du Excel que j'ai porté sous Libre Office, alors les codes que j'ai modifiés sont localisés aux mêmes endroits qu'à l'origine.Je peux surement déplacer le code dans la bibliothèque standard; est-ce qu'il y a une procédure particulière?

Xray est installé.
Il vous suffit d'intégrer les macros de l'extension dans votre document dans ce cas.
Et vous la lancez depuis le bouton au lieu du menu.
Avez-vous un exemple!
LibreOffice 25.2.5.2 (X86-64), Window7 et Linux_Ubuntu 20.04.6LTS, 64 bits, Libre office 6.4.7.2
Avatar de l’utilisateur
rollmops
PassiOOnné
PassiOOnné
Messages : 734
Inscription : 20 déc. 2017 14:45

Re: [Calc] Imprime – export.pdf avec bouton

Message par rollmops »

Bonjour,
Grande Ourse a écrit : 02 déc. 2025 14:33 Xray est installé.
Et donc que donne Xray sur la variable qui provoque l'erreur ?
Avez-vous un exemple!
Tutoriel à lire : viewtopic.php?t=40146
OpenOffice 4.1.16 - Windows 11
Grande Ourse
Membre OOrganisé
Membre OOrganisé
Messages : 56
Inscription : 29 janv. 2024 00:06

Re: [Calc] Imprime – export.pdf avec bouton

Message par Grande Ourse »

Re-bonjour rollmops,
Pour le transfert des macro vers la bibliothèque standard, j'ai suivi le tutoriel sur ce fil de discussion et cela fonctionne assez bien.
viewtopic.php?p=217928#p217928

J'ai séparé le problème de code en 2;
soit un bouton pour l'impression papier qui donne ceci: 1 code pour 2 zones et 1 code pour 3 zones, cela fonctionne sauf que je doit régler l'imprimante au format de papier légal car au format lettre il n'imprime pas tout.
J'ai essayer de modifier le A4 pour lettre ou legal mais il ne veut pas le prendre,

Code : Tout sélectionner

aOptions(1).Name = "PaperFormat" : aOptions(1).Value = com.sun.star.view.PaperFormat.A4 
Voiçi le code pour l'impression de 2 et 3 zones.

Code : Tout sélectionner

REM  *****  BASIC  *****

Sub Main
End Sub
 
sub Impression_Feuille_de_Brassage
'----imprimerDeuxZonesEnregistreur-----
Dim MesFeuilles as Object 
Dim MaFeuille as Object 
Dim MaCellule as Object 
dim document as Object 
dim dispatcher as Object 
Dim aOptions(5) as New com.sun.star.beans.PropertyValue 
Dim adrZone(0) As New com.sun.star.table.CellRangeAddress 
aOptions(1).Name = "PaperFormat" : aOptions(1).Value = com.sun.star.view.PaperFormat.A4 
aOptions(2).Name = "PaperOrientation" : aOptions(2).Value = com.sun.star.view.PaperOrientation.PORTRAIT 
aOptions(3).Name = "Sort" : aOptions(3).Value = FALSE 
aOptions(4).Name = "Copies" : aOptions(4).Value = 1 
aOptions(5).Name = "Collate" : aOptions(5).Value = true 
document = ThisComponent.CurrentController.Frame 
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") 
dim args1(0) as new com.sun.star.beans.PropertyValue 
args1(0).Name = "ToPoint" 
args1(0).Value = "$A$1:$G$64" 
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1()) 
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array()) 
dim args2(0) as new com.sun.star.beans.PropertyValue 
args2(0).Name = "ToPoint" 
args2(0).Value = "$A$64:$G$122" 
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2()) 
dispatcher.executeDispatch(document, ".uno:AddPrintArea", "", 0, Array()) 
dispatcher.executeDispatch(document, ".uno:Print", "", 0, Array()) 
dim args3(0) as new com.sun.star.beans.PropertyValue 
args3(0).Name = "ToPoint" 
args3(0).Value = "$A$1" 
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3()) 
End sub 

Code : Tout sélectionner

Private sub Impression_Recette

'----imprimerTroisZonesEnregistreur ----
Dim MesFeuilles as Object 
Dim MaFeuille as Object 
Dim MaCellule as Object 
dim MonDocument as Object 
dim dispatcher as Object 
Dim aOptions(5) as New com.sun.star.beans.PropertyValue 
Dim adrZone(0) As New com.sun.star.table.CellRangeAddress 
aOptions(1).Name = "PaperFormat" : aOptions(1).Value = com.sun.star.view.PaperFormat.A4 
aOptions(2).Name = "PaperOrientation" : aOptions(2).Value = com.sun.star.view.PaperOrientation.PORTRAIT 
aOptions(3).Name = "Sort" : aOptions(3).Value = FALSE 
aOptions(4).Name = "Copies" : aOptions(4).Value = 1 
aOptions(5).Name = "Collate" : aOptions(5).Value = true 
MonDocument = ThisComponent '------Sélectionne le document en cours------
'----Enregistrement du fichier original si ce n'est pas encore fait pour être sûr que les
'dernières modifications soient bien dans le fichier destination------
If MonDocument.IsModified Then
MonDocument.Store
msgbox "Le fichier sera enregistré pour inclure les dernières modifications avant de poursuivre cette macro"
EndIf
document = ThisComponent.CurrentController.Frame 
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") 
'-------Sélection de la zone 1 à imprimer------
dim args1(0) as new com.sun.star.beans.PropertyValue 
args1(0).Name = "ToPoint" 
args1(0).Value = "$A$1:$H$68" 
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1()) 
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array()) 
'-------Sélection de la zone 2 à imprimer------
dim args2(0) as new com.sun.star.beans.PropertyValue 
args2(0).Name = "ToPoint" 
args2(0).Value = "$I$1:$O$68" 
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2()) 
dispatcher.executeDispatch(document, ".uno:AddPrintArea", "", 0, Array()) 
'-------Sélection de la zone 3 à imprimer------
dim args3(0) as new com.sun.star.beans.PropertyValue 
args3(0).Name = "ToPoint" 
args3(0).Value = "$P$1:$V$15" 
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3()) 
dispatcher.executeDispatch(document, ".uno:AddPrintArea", "", 0, Array()) 
dispatcher.executeDispatch(document, ".uno:Print", "", 0, Array()) 
'-------Je me replace en A1 pour sortir de la sélection--------
dim args4(0) as new com.sun.star.beans.PropertyValue 
args4(0).Name = "ToPoint" 
args4(0).Value = "$A$1" 
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3()) 
msgbox " L'imprimante doit être réglé au format légal et à recto-verso pour une économie de papier "
End sub 
Pour le bouton "exporter en .PDF"
Voiçi le code en cours que je doit compléter et corriger pour qu'il exporte les mêmes zones que ci-haut, tout en travaillant avec la bête Xray que je doit apprivoiser.

Code : Tout sélectionner

Private Sub Exporter_recette
'----Exporter la recette sous l'extension .pdf pour archives-----
'-------Création du nouveau dossier dans le répertoire existant-----
 Main
GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
oDoc = ThisComponent '------Sélectionne le document en cours------
oFeuil = oDoc.Sheets.getByName("Brassage")
URLActuel = ThisComponent.getURL()
'-----On recherche la position du dernier slash dans la chaine-----
i = InStr(URLActuel, "/")
Do While i > 0
dernierePos = i
i = InStr(i+1, URLActuel, "/")
Loop
'----Suppression de tout ce qu'il y a derrière le dernier slash pour récupérer le répertoire------
Dim DirActuel as string
DirActuel = Left(URLActuel, dernierePos)
sSousRep = array("Recettes")
'sRep = convertToUrl
for j = 0 to UBound(sSousRep)
MkDir ConvertToUrl(sRep & "\" & sSousRep(j))
next
End Sub
Sub Export_Calc_Vers_PDF '------Exporte au format .pdf-------
dim ArgsProprietes(2) as new com.sun.star.beans.PropertyValue
dim Fichier as string
dim oDoc as object

'----Indique le nom de la sauvegarde au format pdf
'----Nom de la feuille + cellule A1 + Date'
'----soit /Recettes/Feuille de Brassage-Centennial Blonde Ale_BierMuncher-le 24.11.2025.pdf
'----(Le fichier pdf sera créé dans le même répertoire que le classeur.)
oCell = oFeuille.getCellRangeByName("A1")
Fichier = ocell.getString & ".pdf"
Fichier = Left( ThisComponent.URL , Len(ThisComponent.URL) - 4 ) & "/Recettes/" &"-" & Brassage & A1 & " - le " & Format (Now, "DD-MM-YY-HH-MM" ) & ".pdf"
'----&CStr(Day(Date()))&"."&CStr(Month(Date()))&"."&CStr(Year(Date()))&".pdf"-------

'------ Spécifie le filtre de conversion ------
ArgsProprietes(0).Name = "FilterName" 'permet de dire sur quelle propriété je vais travailler
ArgsProprietes(0).Value = "calc_pdf_Export" 'indique l'export PDF
ArgsProprietes(1).Name = "CompressMode"
ArgsProprietes(1).Value = 1

'------exporte au format .PDF-------
ThisComponent.storeToUrl(convertToUrl( Fichier , ArgsProprietes))
'-------Message de confirmation------
MsgBox "Le PDF a été créé avec succès." , 0, "ExportToPDF()"
End Sub '-----------------------------------------------------
Je te reviens avec les erreurs du code "exporter .pdf, il y a un peut de lecture en attendant.

Salutations.
LibreOffice 25.2.5.2 (X86-64), Window7 et Linux_Ubuntu 20.04.6LTS, 64 bits, Libre office 6.4.7.2
Avatar de l’utilisateur
rollmops
PassiOOnné
PassiOOnné
Messages : 734
Inscription : 20 déc. 2017 14:45

Re: [Calc] Imprime – export.pdf avec bouton

Message par rollmops »

Grande Ourse a écrit : 03 déc. 2025 20:04 cela fonctionne sauf que je doit régler l'imprimante au format de papier légal car au format lettre il n'imprime pas tout.
J'ai essayer de modifier le A4 pour lettre ou legal mais il ne veut pas le prendre,

Code : Tout sélectionner

aOptions(1).Name = "PaperFormat" : aOptions(1).Value = com.sun.star.view.PaperFormat.A4 
Vous êtes localisé ailleurs qu'en France pour être dans ce format américain ?
Les formats sont décrits ici https://www.openoffice.org/api/docs/com ... ormat.html
OpenOffice 4.1.16 - Windows 11
Grande Ourse
Membre OOrganisé
Membre OOrganisé
Messages : 56
Inscription : 29 janv. 2024 00:06

Re: [Calc] Imprime – export.pdf avec bouton

Message par Grande Ourse »

Bonjour rollmops,

Merçi pour l'information pour les formats de papier.

Localisation : Québec "Canada pour l'instant"

Salutations,
LibreOffice 25.2.5.2 (X86-64), Window7 et Linux_Ubuntu 20.04.6LTS, 64 bits, Libre office 6.4.7.2
Grande Ourse
Membre OOrganisé
Membre OOrganisé
Messages : 56
Inscription : 29 janv. 2024 00:06

Re: [Calc] Imprime – export.pdf avec bouton

Message par Grande Ourse »

Bonjours rollmops,

Code : Tout sélectionner

aOptions(1).Name = "PaperFormat" : aOptions(1).Value = com.sun.star.view.PaperFormat.Letter 
Erreur d'exécution BASIC. '423' Propriété ou méthode non trouvée : Letter.

Une solution?
LibreOffice 25.2.5.2 (X86-64), Window7 et Linux_Ubuntu 20.04.6LTS, 64 bits, Libre office 6.4.7.2
cwolan
Membre hOOnoraire
Membre hOOnoraire
Messages : 142
Inscription : 14 févr. 2021 22:15

Re: [Calc] Imprime – export.pdf avec bouton

Message par cwolan »

Bonjour,

Attention à la casse !
La constante nommée de l’API doit être écrite en respectant les majuscules et les minuscules, sinon elle ne sera pas reconnue.
Donc :

Code : Tout sélectionner

aOptions(1).Value = com.sun.star.view.PaperFormat.LETTER
OpenOffice 1.1.5 – 4.1.16
LibreOffice 3.3.0.4 – 25.8
Windows 7,10,11 64-bit
Grande Ourse
Membre OOrganisé
Membre OOrganisé
Messages : 56
Inscription : 29 janv. 2024 00:06

Re: [Calc] Imprime – export.pdf avec bouton

Message par Grande Ourse »

Merçi cowlan,
Un erreur d'attention.
LibreOffice 25.2.5.2 (X86-64), Window7 et Linux_Ubuntu 20.04.6LTS, 64 bits, Libre office 6.4.7.2
Avatar de l’utilisateur
rollmops
PassiOOnné
PassiOOnné
Messages : 734
Inscription : 20 déc. 2017 14:45

Re: [Calc] Imprime – export.pdf avec bouton

Message par rollmops »

Re,
Grande Ourse a écrit : 05 déc. 2025 20:45 Merçi pour l'information pour les formats de papier.

Localisation : Québec "Canada pour l'instant"
Ce paramètre linguistique est à indiquer dans les options
Votre classeur sera alors dans le bon format
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.16 - Windows 11
Grande Ourse
Membre OOrganisé
Membre OOrganisé
Messages : 56
Inscription : 29 janv. 2024 00:06

Re: [Calc] Imprime – export.pdf avec bouton

Message par Grande Ourse »

Merçi rollmops,

C'était déjà fait.
LibreOffice 25.2.5.2 (X86-64), Window7 et Linux_Ubuntu 20.04.6LTS, 64 bits, Libre office 6.4.7.2
Grande Ourse
Membre OOrganisé
Membre OOrganisé
Messages : 56
Inscription : 29 janv. 2024 00:06

Re: [Calc] Imprime – export.pdf avec bouton

Message par Grande Ourse »

Bonjour,

Lorsque je clic sur le bouton Exporter . pdf , il ne se passe rien. Pas de dossier créé et pas d'export du fichier en .pdf et je n'ai pas de code d'erreur.

Pouvez-vous me dire ce qui ne fonctionne pas , voir classeur ci-joint.

J'ai basé le code de la macro sur ces discussions;
viewtopic.php?p=50710#p50710
viewtopic.php?p=236840#p236840
viewtopic.php?p=381258#p381258
viewtopic.php?p=215002#p215002
viewtopic.php?p=209014&sid=196622cb662e ... 67#p209014
viewtopic.php?p=264151#p264151
viewtopic.php?p=177055#p177055

Merçi de votre aide.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 25.2.5.2 (X86-64), Window7 et Linux_Ubuntu 20.04.6LTS, 64 bits, Libre office 6.4.7.2
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26126
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Imprime – export.pdf avec bouton

Message par Dude »

Salut,
Grande Ourse a écrit : 07 déc. 2025 20:28 Lorsque je clic sur le bouton Exporter . pdf , il ne se passe rien. Pas de dossier créé et pas d'export du fichier en .pdf et je n'ai pas de code d'erreur.
Déjà, il faut publier la dite macro afin qu'on puisse voir le problème :

Code : Tout sélectionner

Private Sub Exporter_Feuille_de_Brassage
'-------Exporter la Feuille de Brassage sous l'extension .pdf pour archivage et partage-----
'-------Création du nouveau dossier dans le répertoire existant-----
 Main
GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
MonDoc = ThisComponent '------Sélectionne le document en cours------
MaFeuille = MonDoc.Sheets.getByName("Feuille de Brassage")
'-----Récupère l'adresse du fichier-----
URLActuel = ThisComponent.getURL()
URL = ThisComponent.URL
'-----On recherche la position du dernier slash dans la chaine-----
i = InStr(URLActuel, "/")
Do While i > 0
dernierePos = i
i = InStr(i+1, URLActuel, "/")
Loop
'----Suppression de tout ce qu'il y a derrière le dernier slash pour récupérer le répertoire------
Dim DirActuel as string
DirActuel = Left(URLActuel, dernierePos)
sSousRep = array("Recettes")
'sRep = convertFromUrl
for j = 0 to UBound(sSousRep)
If Dir(Url,16) = "" Then 'si le répertoire n'existe pas, on le crée
		MkDir Url
	End If
	
'MkDir ConvertToUrl(sRep & "\" & sSousRep(j))
next
End Sub
Il est normal que cela ne fonctionne pas puisque :
  1. La ligne MkDir est commentée
  2. Il n'y a rien qui exporte en PDF
  3. Je ne vois pas l'intérêt de déclarer la Sub en routine privée
  4. Tu appelles la routine Main qui est vide
Enfin, tu charges la bibliothèque Tools mais tu ne t'en sers pas.
Ainsi pour créer ton sous-répertoire, tu peux juste coder ceci :

Code : Tout sélectionner

GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
MonDoc = ThisComponent '------Sélectionne le document en cours------
MaFeuille = MonDoc.Sheets.getByName("Feuille de Brassage")
'-----Récupère l'adresse du fichier-----
sURL = MonDoc.URL
sRep = DirectoryNameOutOfPath(sURL, "/")
sSousRep = sRep & "/Recettes"
'si le répertoire n'existe pas, on le crée
If Dir(sSousRep,16) = "" Then MkDir sSousRep
Grande Ourse
Membre OOrganisé
Membre OOrganisé
Messages : 56
Inscription : 29 janv. 2024 00:06

Re: [Calc] Imprime – export.pdf avec bouton

Message par Grande Ourse »

Bonjour Dude,

Merçi pour les correctifs, la création du sous répertoire "Recettes" fonctionne tel que souhaité.

Maintenant il reste l'export du pdf dans le sous répertoire "Recettes" qui ne fonctionne pas.
1) Le fichier .PDF est créé mais dans le répertoire du classeur et non dans le sous répertoire.
2) Dans le nom du fichier "Impression - export pdfFeuille_de_Brassage - Recette – Centennial Blonde Ale_BierMuncher - le 08-12-25-18-23.pdf" le Impression - export pdf est de trop.
3) L'année devrait être 2025 au lieu de 25.
4) De plus, la macro ne se poursuit pas après la création du sous répertoire "Recettes"

Encore là, j'ai du oublié un bout de code.

Code : Tout sélectionner

Sub Exporter_Feuille_de_Brassage
'-------Exporter la Feuille de Brassage sous l'extension .pdf pour archivage et partage-----
'-------Création du nouveau dossier dans le répertoire existant-----
GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
MonDoc = ThisComponent '------Sélectionne le document en cours------
MaFeuille = MonDoc.Sheets.getByName("Feuille de Brassage")
'-----Récupère l'adresse du fichier-----
sURL = MonDoc.URL
sRep = DirectoryNameOutOfPath(sURL, "/")
sSousRep = sRep & "/Recettes"
'si le répertoire n'existe pas, on le crée
If Dir(sSousRep,16) = "" Then MkDir sSousRep 
End Sub
Sub Export_Calc_Vers_PDF '------Exporte au format .pdf-------
dim ArgsProprietes(2) as new com.sun.star.beans.PropertyValue
dim Fichier as string
'----Définir la Zone d'impresssion----
dim MonDoc as object
dim MaFeuille As Object, MaZone As Object
MonDoc = ThisComponent
MaFeuille = MonDoc.sheets.getByName("Feuille de Brassage")
dim Cible(1) As new com.sun.star.table.CellRangeAddress
        MaZone = MaFeuille.getCellRangeByName("$A$1:$G$64")
        Cible(0) = MaZone.RangeAddress
        MaZone = MaFeuille.getCellRangeByName("$A$64:$G$123")
        Cible(1) = MaZone.RangeAddress 
        Mafeuille.PrintAreas = Cible()
' Enregistrement du fichier original si ce n'est pas encore fait 
     If MonDoc.IsModified Then 
     MonDoc.Store 
     EndIf 
'----Indique le nom de la sauvegarde au format pdf
'----Nom de la feuille + texte de la cellule A1 + Date----'Dans le sous rpertoire Recettes'
'----soit Feuille de Brassage - Centennial Blonde Ale_BierMuncher - le 24-11-2025-14-53.pdf
'----(Le fichier pdf sera créé dans le sous répertoire "Recettes" du répertoire du classeur.)
Mondoc = thisComponent 
MonTexte = MaFeuille.GetCellRangeByName( "A1" ).getString
Extension =  ".pdf"
'MonFichier = MaFeuille & MonTexte & Date & PDF
Fichier = Left( ThisComponent.URL , Len(ThisComponent.URL) - 4 ) & "Feuille_de_Brassage" & "  - " & MonTexte & " - le " & Format (Now, "DD-MM-YY-HH-MM" ) & ".pdf"
'----&CStr(Day(Date()))&"."&CStr(Month(Date()))&"."&CStr(Year(Date()))&".pdf"-------

'------ Spécifie le filtre de conversion ------
ArgsProprietes(0).Name = "FilterName" 'permet de dire sur quelle propriété je vais travailler
ArgsProprietes(0).Value = "calc_pdf_Export" 'indique l'export PDF
ArgsProprietes(1).Name = "CompressMode"
ArgsProprietes(1).Value = 1

'------exporte au format .PDF-------
ThisComponent.storeToUrl( Fichier , ArgsProprietes())
'-------Message de confirmation------
msgBox "Le PDF a été créé avec succès." , 0, "ExportToPDF()"
End Sub '-----------------------------------------------------
Encore Merçi pour votre aide précieuse.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 25.2.5.2 (X86-64), Window7 et Linux_Ubuntu 20.04.6LTS, 64 bits, Libre office 6.4.7.2
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26126
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Imprime – export.pdf avec bouton

Message par Dude »

Grande Ourse a écrit : 08 déc. 2025 23:45De plus, la macro ne se poursuit pas après la création du sous répertoire "Recettes"
La macro s'arrête au End sub.
Est-ce que tu comprends au moins ce que tu codes ?
Grande Ourse a écrit : 08 déc. 2025 23:45 Maintenant il reste l'export du pdf dans le sous répertoire "Recettes" qui ne fonctionne pas.
Et bien, tu lances ta routine Export_Calc_Vers_PDF. :roll:
Le mieux serait de lui passer le nom du fichier directement.

Grande Ourse a écrit : 08 déc. 2025 23:45 2) Dans le nom du fichier "Impression - export pdfFeuille_de_Brassage - Recette – Centennial Blonde Ale_BierMuncher - le 08-12-25-18-23.pdf" le Impression - export pdf est de trop.
Tu sais bien sûr qu'il y a une limite de 260 caractères dans un chemin de fichier Windows ?
Même si on peut trafiquer aujourd'hui le registre pour la dépasser, il est déconseillé d'avoir des noms à rallonge.