[Résolu][Calc] Export en PDF et envoi par courriel

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 !
gringo74
Membre OOrganisé
Membre OOrganisé
Messages : 96
Inscription : 21 août 2011 11:27

[Résolu][Calc] Export en PDF et envoi par courriel

Message par gringo74 »

Bonjour,

J' ai lu beaucoup de posts traitant de ce sujet et il y en beaucoup......cependant j'ai bien du mal a trouver les renseignements nécessaire pour mon cas précis et mes compétences en programmation sont faibles, c'est pourquoi je me permet de solliciter votre aide.
Voici mon problème:
Dans le classeur exemple ci-joint,toutes les feuilles contiennent chaqu'une une zone d'impression bien définit.Dans le menu ,un lien qui ouvre une boite de dialogue.
Dans la boite de dialogue, il y a mon adresse professionnelle (elle ne changerait pas) et plusieurs boutons.
Chaque bouton permettrait d'envoyer un groupe de feuille bien définit ,en pdf directement par email (sans contrôle utilisateur ou autre) a mon adresse professionnelle.

Pouvez-vous m'aidez ?

Note :j'utilise gmail via thunderbird
test1.ods
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
libreoffice 7.6.5 et windows 10
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12740
Inscription : 08 nov. 2005 16:23
Localisation : Brest, France

Re: [Calc]boite de dialogue pdf email

Message par Bidouille »

Bonjour,

L'émail, c'est ce que vous avez sur les dents ou dans un lavabo.
Merci d'utiliser des termes français dans vos titres à l'avenir.
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26089
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Export en PDF et envoi par courriel

Message par Dude »

Salut,

Comme le précise ton titre, il y a deux problèmes à résoudre :
  1. L'export des zones d'impression de chacune des feuilles au format PDF
  2. L'envoi du PDF par courriel via Thunderbird
Pour le [1], tu peux partir sur l'extension Export PDF distincts soit en t'inspirant de ses macros, soit en l'intégrant directement.
Pour le [2], se reporter sur le suprême de code concerné.

:idea:
gringo74
Membre OOrganisé
Membre OOrganisé
Messages : 96
Inscription : 21 août 2011 11:27

Re: [Calc] Export en PDF et envoi par courriel

Message par gringo74 »

En fonction des orientations données par Dude,j'ai pu rassembler différentes informations qui m'on permis de combiner 2 macro afin de réaliser une partit de ce que je souhaite faire.
Le code est le suivant:

Code : Tout sélectionner

option explicit
 Sub Main
' Remplacer Feuille1 par le nom de feuille à exporter
call ExportToPDF ("Feuille1")
call envoi
end sub
 
Sub ExportToPDF (sTableNam As String)
 
dim oDoc as object, oSheets as object, oSheet as object, oPlage as object, oEnCours as object, oRanges as object
dim lEndCol as long, lEndRow as long, lCoord(1) as long
dim nVar as integer
dim sPath as string,sStandard as string, sName
 Dim Messagerie As Object, Client As Object, Courrier As Object
 
 
oDoc = ThisComponent
 
oSheets = oDoc.Sheets
 
' Vérifie que le classeur contient une feuille de ce nom
if oDoc.Sheets.hasByName(sTableNam) then
	oSheet = oDoc.Sheets.getByName(sTableNam) 
' Choix du dossier dans lequel exporter le pdf
	sPath = GetPath
' Vérifie si l'utilisateur a choisi un dossier
	If sPath = "" Then
		msgbox "Vous n'avez pas sélectionné de dossier", 64, "Export interrompu"	
	else
' Creation d'un nom par défaut 
		sStandard = "inserer nom par defaut"
		                  
		sName = "inserer nom par defaut"
' Si l'utilisateur n'a pas donné de nom
		If sName = "" Then
			msgbox "Vous n'avez pas donné de nom pour le PDF", 64, "Export interrompu"
		else
' Si l'utilisateur a donné un nom ou gardé celui proposé par défaut	
			sName = sName & ".pdf"
			nVar = 0
' Vérifie que le fichier cible existe déjà ou non
' Si oui, possibilité d'écraser ou donner un autre nom			
			do while FileExists(sPath & sName) and nVar <> 2 and nVar <> 6
				nVar = MsgBox ("Ce fichier existe déjà. " & Chr(10) & _
					"Voulez-vous le remplacer ? " & Chr(10) & _
					Chr(10) & _
					"""Annuler"" pour arrêter l'export, " & Chr(10) & _
					"""Non"" pour saisir un autre nom", 35, "Erreur")	
				if nVar = 7 then
					sName = InputBox ("Donner un nom sans extension" & Chr(10) & _
					                "pour le PDF." , "Nom du PDF", sStandard )
					sName = sName & ".pdf"
				end if
			loop
 
			if nVar <> 2 then
 
'				oDoc.addActionLock
'				oDoc.LockControllers
 
' Mémorise la sélection courante
				oEnCours = oDoc.currentselection
 
' Vérifie si au moins une zone d'impression a été définie pour cette feuille
' Si oui on l'utilise, sinon on exporte toute la plage utilisée dans la feuille
				if ubound(oSheet.PrintAreas) <> -1 then
' Création d'une instance "plage" vide qui permet de déselectionner
' (utile par ex. si l'utilisateur avait sélectionné un graphisme)				
					oRanges = oDoc.createInstance("com.sun.star.sheet.SheetCellRanges")
					oDoc.currentcontroller.activeSheet = oSheet
					oDoc.currentcontroller.select(oRanges)
				else
					lCoord = GetLastUsed(oSheet)
					oPlage = oSheet.getCellRangeByPosition(0, 0, lCoord(0), lCoord(1))
					oDoc.currentcontroller.select(oPlage)
				end if	
 
				export_pdf(sPath & sName)  
 
' Restaure la sélection avant export
				oDoc.currentcontroller.select(oEnCours)
 
				
 
'				oDoc.UnlockControllers 
'				oDoc.removeActionLock
 
			end if
		end if
	End If 
else
    MsgBox "Nom de feuille incorrect", 16, "Erreur"
end if



End sub  
 
'------------------------------------
Function GetLastUsed(oSheet as Object) 
Dim oCell as object, oCursor as object, oAddress as object
Dim lCoord(1) as long
	oCell = oSheet.getCellByPosition(0, 0)
	oCursor = oSheet.createCursorByRange(oCell)
	oCursor.gotoEndOfUsedArea(True)
	with oCursor.RangeAddress
		lCoord(0) = .EndColumn
		lCoord(1) = .EndRow
	end with	
	GetLastUsed = lCoord()
End Function
 
'----------------------------------
Function GetPath() As String
  Dim  oPathSettings, oFolderDialog
  Dim sPath As String
 
    oPathSettings = CreateUnoService("com.sun.star.util.PathSettings")
    sPath = oPathSettings.Work
    oFolderDialog = _
          CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
    oFolderDialog.SetDisplayDirectory(sPath)
    If oFolderDialog.Execute() = _
          com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
      sPath = oFolderDialog.GetDirectory
    Else
      GetPath = ""
      Exit Function
    End If
  If Right(sPath, 1) <> "/" Then sPath = sPath & "/"
  GetPath = sPath
End Function  
 
'------------------------------------
sub export_pdf (sFileName AS String)
 
dim propFich(2) as new com.sun.star.beans.PropertyValue
dim filterProps(0) as new com.sun.star.beans.PropertyValue
 
filterProps(0).Name = "Selection"
filterProps(0).Value = thisComponent.currentSelection
 
propFich(0).Name = "FilterName"
propFich(0).Value = "calc_pdf_Export"
propFich(1).Name = "FilterData"
propFich(1).Value = filterProps()
 
 
ThisComponent.storeToURL(sFileName,propFich())
 
end sub


'------------------------------------------------------------------------------------------------------------------------------------------


 Sub envoi
    Dim Messagerie As Object, Client As Object, Courrier As Object
       Messagerie = CreateUnoService("com.sun.star.system.SystemMailProvider")'Version Windows/Linux Aoo4
       Client = Messagerie.queryMailClient()
       Courrier = Client.createMailMessage()   
          Courrier.Subject = "inserer un sujet"'Sujet   
          Courrier.Recipient = "exemple@gmail.com"'Adresse
          'Courrier.CcRecipient = Array("")'CopieA
          'Courrier.BccRecipient = Array("")'CopieA
          Courrier.Attachement = Array("chemin du pdf")'PcsJt()
          Courrier.body = "Fichier maintenance systems "'Texte
          Client.sendMailMessage(Courrier,1)'Flag inopérant
 End Sub


Cette macro fonctionne mais je bute encore sur 2 problemes a resoudre pour que le code soit opérationnel totalement:

1-pouvoir selectionner plusieurs feuille plutot que une seul actuellement, donc je pense quil faudrait modifier cette partit:

Code : Tout sélectionner

Sub Main
' Remplacer Feuille1 par le nom de feuille à exporter
call ExportToPDF ("Feuille1")
call envoi
end sub
 
Sub ExportToPDF (sTableNam As String)
 
dim oDoc as object, oSheets as object, oSheet as object, oPlage as object, oEnCours as object, oRanges as object
dim lEndCol as long, lEndRow as long, lCoord(1) as long
dim nVar as integer
dim sPath as string,sStandard as string, sName
 Dim Messagerie As Object, Client As Object, Courrier As Object

2-Et pouvoir selectionner le chemin d'arriver du document pdf dans mes documents directement sans passer par la boite de dialogue .Peut-etre modifier cette partit

Code : Tout sélectionner

Function GetPath() As String
  Dim  oPathSettings, oFolderDialog
  Dim sPath As String
 
    oPathSettings = CreateUnoService("com.sun.star.util.PathSettings")
    sPath = oPathSettings.Work
    oFolderDialog = _
          CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
    oFolderDialog.SetDisplayDirectory(sPath)
    If oFolderDialog.Execute() = _
          com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
      sPath = oFolderDialog.GetDirectory
    Else
      GetPath = ""
      Exit Function
    End If
  If Right(sPath, 1) <> "/" Then sPath = sPath & "/"
  GetPath = sPath
End Function  
Pouvez-vous m'aidez SVP pour finir cette macro ?
libreoffice 7.6.5 et windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26089
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Export en PDF et envoi par courriel

Message par Dude »

gringo74 a écrit :Cette macro fonctionne mais je bute encore sur 2 problemes a resoudre
L'usage de ce forum veuille que l'on ne mette qu'un seul problème par fil.

La raison en est simple :
gringo74 a écrit :pouvoir selectionner le chemin d'arriver du document pdf dans mes documents directement
Quelqu'un ayant la même question va t-il s'arrêter ici ?

"Mes documents" est un répertoire stocké dans le profil utilisateur de Windows.
Sa localisation varie donc suivant ce dernier paramètre.
Néanmoins, son chemin est récupérable via une variable d'environnement.
Basic peut la récupérer via l'instruction Environ.


Merci d'ajouter [Résolu] au début du titre de ton 1er message sans oublier de cocher la case de l'icône de sujet (le V vert).