[Résolu][Calc] Exporter en PDF feuille par feuille

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 !
Daniel60
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 243
Inscription : 05 mars 2014 07:09

[Résolu][Calc] Exporter en PDF feuille par feuille

Message par Daniel60 »

Bonjour, et encore un énorme merci aux internautes de ce site.
J'ai puisé de ci de là une macro me permettant d'exporter ma feuille au format PDF dans le même dossier que le document.

Code : Tout sélectionner

'Enregistrement au format PDF Feuille PermMensuelle format Paysage


Sub ExportPDF(oEvt)
Dim oDoc As Object, oSheetM As Object, oSheetW01 As Object, oSheetW02 As Object, oSheetW03 As Object, oSheetW04 As Object, oSheetW05 As Object
Dim oRanges(0), oRange As New com.sun.star.table.CellRangeAddress
Dim aOptionsPrinter(0) As New com.sun.star.beans.PropertyValue
dim aFiltreExport(2) As new com.sun.star.beans.PropertyValue
dim aFiltreSelect(0) As new com.sun.star.beans.PropertyValue
Dim sBtn As String
	' Le document
	oDoc = thisComponent
	' La feuille Relevé Compteurs
	oSheetM = oDoc.Sheets.getByName("Relevé Compteurs")
	' La feuille Kms Parcourus Mensuels
	oSheetW01 = oDoc.Sheets.getByName("Kms Parcourus Mensuels")
	' Park Automobile SRT
	oSheetW02 = oDoc.Sheets.getByName("PARC AUTOMOBILE SRT")
	
	' On identifie le bouton qui a appellle la macro
	sBtn = oEvt.source.Model.Name
	' Orientation de la page
	aOptionsPrinter(0).Name = "PaperOrientation" 
	SELECT CASE sBtn
		CASE "Btn_PDFM" 
			' Orientation feuille Relevé Compteurs
			aOptionsPrinter(0).Value = com.sun.star.view.PaperOrientation.LANDSCAPE
			thisComponent.setPrinter( aOptionsPrinter() )
			' Option méthode setPrintAreas
			oRanges(0) = oSheetM.getCellRangeByName("A1:P22").RangeAddress
			oSheetM.setPrintAreas(oRanges()) : oSheetW01.setPrintAreas(ARRAY())
			' Option choix de la feuille par les options du Filtre
			' aFiltreSelect(0).Value = oSheetM
		CASE "Btn_PDFW01" 
			' Orientation  Kms Parcourus Mensuels
			aOptionsPrinter(0).Value = com.sun.star.view.PaperOrientation.LANDSCAPE
			thisComponent.setPrinter( aOptionsPrinter() )
			' Option méthode setPrintAreas
			oRanges(0) = oSheetW01.getCellRangeByName("A1:P22").RangeAddress
			oSheetW01.setPrintAreas(oRanges()) : oSheetM.setPrintAreas(ARRAY()) : oSheetW02.setPrintAreas(ARRAY())' : oSheetW03.setPrintAreas(ARRAY())
			' Option choix de la feuille par les options du Filtre
			' aFiltreSelect(0).Value = oSheetW
		CASE "Btn_PDFW02" 
			' Orientation Park Automobile SRT
			aOptionsPrinter(0).Value = com.sun.star.view.PaperOrientation.LANDSCAPE
			thisComponent.setPrinter( aOptionsPrinter() )
			' Option méthode setPrintAreas
			oRanges(0) = oSheetW02.getCellRangeByName("A1:F25").RangeAddress
			oSheetW02.setPrintAreas(oRanges()) : oSheetM.setPrintAreas(ARRAY()) : oSheetW02.setPrintAreas(ARRAY())
						' Option choix de la feuille par les options du Filtre
			' aFiltreSelect(0).Value = oSheetW
		
		CASE Else
			' Dans le cas où la macro serai affectée à un autre bouton
			' Le traitement serait à prévoir ici
			Exit Sub
	END SELECT

	'Choix de l'export : uniquement la feuille active
	' Option choix de la feuille par les options du Filtre
	' aFiltreSelect(0).Name = "Selection"
	aFiltreExport(0).Name = "FilterName"
	aFiltreExport(0).Value = "calc_pdf_Export"
	aFiltreExport(1).Name = "CompressMode"
	aFiltreExport(1).Value = 1

    Fichier = Left( ThisComponent.URL , Len(ThisComponent.URL) - 4 ) & "M-" & NomFeuille  & "-le " & CStr(Day(Date()))&"."&CStr(Month(Date()))&"."&CStr(Year(Date()))&".pdf"
    ThisComponent.storeToUrl( Fichier , aFiltreExport())
End Sub
Mais à chaque fois que j'exporte une autre feuille du classeur, elle écrase celui existant
Je pense que l'erreur vient de cette programmation:

Code : Tout sélectionner

	aFiltreExport(0).Name = "FilterName"
	aFiltreExport(0).Value = "calc_pdf_Export"
	aFiltreExport(1).Name = "CompressMode"
	aFiltreExport(1).Value = 1

    Fichier = Left( ThisComponent.URL , Len(ThisComponent.URL) - 4 ) & "M-" & NomFeuille  & "-le " & CStr(Day(Date()))&"."&CStr(Month(Date()))&"."&CStr(Year(Date()))&".pdf"
    ThisComponent.storeToUrl( Fichier , aFiltreExport())
J'aurai besoin d'un petit coup de pouce pour finaliser mon tableau
Merci
Dernière modification par micmac le 20 sept. 2015 11:23, modifié 2 fois.
Raison : Ajout de la coche
J'utilise Open Office version 4.1.1. et le système d'exploitation Windows 7 Professionnel 64 bit
Avatar de l’utilisateur
OOo - Ekel
SuppOOrter
SuppOOrter
Messages : 1322
Inscription : 10 nov. 2006 15:04
Localisation : F-Oise

Re: [Calc] Exporter en PDF feuille par feuille

Message par OOo - Ekel »

Bonjour,

En effet, puisque le jour ne change pas d'un enregistrement à l'autre, 5 min après le précédent.

Je rajouterai donc la notion d'heure au nom du fichier pour éviter ainsi tout doublon.

Le code deviendrait donc, ou une idée dans le genre si ce code n'était pas bon.

Code : Tout sélectionner

Fichier = Left( ThisComponent.URL , Len(ThisComponent.URL) - 4 ) & "M-" & NomFeuille  & "-le " & CStr(Day(Date()))&"."&CStr(Month(Date()))&"."&CStr(Year(Date()))&CStr(Time())&".pdf"
Cordialement.
Ekel

KUbuntu Noble Numbat (24.04) : LibreOffice 25.2.5.2 Officielle
AMD Ryzen 5 5600G
AMD Radeon RX 6650 XT
22" + 22"
16 Go
____________________
Pour les règles du jeu.
Pour marquer Résolu.
Pour joindre un fichier.
Daniel60
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 243
Inscription : 05 mars 2014 07:09

Re: [Calc] Exporter en PDF feuille par feuille

Message par Daniel60 »

Merci Ekel, effectivement la solution était des plus simples. Pourquoi n'y ai-je pas pensé?
Je clos donc ce sujet
J'utilise Open Office version 4.1.1. et le système d'exploitation Windows 7 Professionnel 64 bit