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 '-----------------------------------------------------Voir fichier joint que j'ai purgé au minimum.
Merçi.



