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
[Résolu][Calc] Export en PDF et envoi par courriel
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 !
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é

- Messages : 96
- Inscription : 21 août 2011 11:27
[Résolu][Calc] Export en PDF et envoi par courriel
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
libreoffice 7.6.5 et windows 10
-
Bidouille
- RespOOnsable forum

- Messages : 12740
- Inscription : 08 nov. 2005 16:23
- Localisation : Brest, France
Re: [Calc]boite de dialogue pdf email
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.
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.
-
Dude
- 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
Salut,
Comme le précise ton titre, il y a deux problèmes à résoudre :
Pour le [2], se reporter sur le suprême de code concerné.

Comme le précise ton titre, il y a deux problèmes à résoudre :
- L'export des zones d'impression de chacune des feuilles au format PDF
- L'envoi du PDF par courriel via Thunderbird
Pour le [2], se reporter sur le suprême de code concerné.
-
gringo74
- Membre OOrganisé

- Messages : 96
- Inscription : 21 août 2011 11:27
Re: [Calc] Export en PDF et envoi par courriel
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:
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:
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
Pouvez-vous m'aidez SVP pour finir cette macro ?
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 SubCette 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 Object2-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
libreoffice 7.6.5 et windows 10
-
Dude
- 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
L'usage de ce forum veuille que l'on ne mette qu'un seul problème par fil.gringo74 a écrit :Cette macro fonctionne mais je bute encore sur 2 problemes a resoudre
La raison en est simple :
Quelqu'un ayant la même question va t-il s'arrêter ici ?gringo74 a écrit :pouvoir selectionner le chemin d'arriver du document pdf dans mes documents directement
"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).