Mettre piece jointe en pdf vba word 2007

Résolu/Fermé
olivia - 8 sept. 2010 à 10:34
m@rina Messages postés 20016 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 16 avril 2024 - 9 sept. 2010 à 19:09
Bonjour,

Je souhaiterais trouver le code vba pour mettre un document word en pdf en tant que piece jointe dans un email.
J'ai déjà écrit le code suivant qui me permet de la faire à partir d'un bouton de commande, mais la pièce jointe est en format word.


Private Sub CommandButton1_Click()

Set myApp = CreateObject("Outlook.Application")
Set myItem = myApp.CreateItem(olMailItem)
myItem.Subject = "subject"
myItem.Body = "Body text"
myItem.Attachments.Add ThisDocument.Path & "\" & ThisDocument.Name
myItem.to = "olivia.calegari@cecaz.caisse-epargne.fr"
myItem.Display
myItem.Send

ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges

End Sub

Merci d'avance pour votre aide

Olivia
A voir également:

7 réponses

m@rina Messages postés 20016 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 16 avril 2024 11 268
9 sept. 2010 à 13:52
Bonjour,

Bon, on va recommencer dès le départ car j'ai l'impression que tu ne maîtrises pas du tous les macros et que tu essaies de faire un truc fait de morceaux trouvés ça et là.

La méthode ExportAsFixedFormat , comme je l'ai dit, permet simplement de convertir un doc en pdf. ça ne permet pas d'envoyer le fichier. Le code d'automation que tu as récupéré permet de piloter Outlook depuis Word, et dans ton cas d'envoyer un mail avec une pièce jointe. La pièce jointe n'est plus le document en cours (ActiveDocument) mais le document PDF que tu auras créé et que tu ne pourras pas ouvrir avec Word ('inutile donc d'essayer).

Donc on va créer une macro qui va tout d'abord convertir le document, puis qui va envoyer ce document via l'automation. C'est d'ailleurs ce que fait la fonctionnalité toute faite... car même si tu ne le vois pas, le document est créé temporairement et- stocké dans un dossier temporaire.

Il faudrait aussi penser à demander l'adresse du destinataire, car on peut supposer que ce n'est pas toujours le même. On fera ça par une InputBox. Et puis un message sera bienvenu à la fin pour dire que le mail est parti.

Voici donc la macro :

Private Sub CommandButton1_Click()

Dim fichier
fichier = "C:\...\mondoc.pdf"  'donner le nom exact du fichier pdf et du chemin où il sera stocké

'Export du fichier actif en pdf
ActiveDocument.ExportAsFixedFormat OutputFileName:=fichier, _
ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False

'demande l'adresse du destinataire
destinataire = InputBox("adresse du destinataire")

'démarrage de l'automation Outlook :
Set myApp = CreateObject("Outlook.Application")
Set myItem = myApp.CreateItem(olMailItem)
myItem.Subject = "Objet du mail"
myItem.Body = "Texte du mail"
myItem.Attachments.Add fichier
myItem.to = adresse
myItem.Display
myItem.Send

MsgBox "Le mail es bien envoyé"

End Sub


m@rina
3
merci à toi marina d'avoir pris du temps pour me répondre. Ca fonctionne.

Olivia
0
m@rina Messages postés 20016 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 16 avril 2024 11 268
9 sept. 2010 à 19:09
J'ai mis :
myItem.to = adresse

évidemment c'est une erreur... Il falait lire :
myItem.to = destinataire

m@rina
0
m@rina Messages postés 20016 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 16 avril 2024 11 268
8 sept. 2010 à 11:22
Bonjour

C'est une fonctionnalité qui existe par défaut... Une macro est elle nécessaire ?

Bouton Office, Envoyer => Envoyer comme pièce jointe au format PDF.

m@rina
0
Bonjour marina

Merci pour ta réponse.
Je sais que c'est une fonctionnalité qui existe par défaut mais il faudrait que je puisse l'avoir en vba pour la raison suivante :
J'ai un doc word par exemple : une lettre sur laquelle je vais insérer 2 boutons qui vont permettre à l'utilisateur d'envoyer ce document par email à 2 groupes de personnes distincts.
J'ai rendu ces boutons invisibles lors de l'impression (avec l'option masqué) mais je souhaiterais aussi les rendrent invisibles dans ma piece jointe (quand l'utilisateur choisi l'envoi par mail) et la seule solution c'est de convertir mon doc word en pdf.
Merci pour ton aide
0
je viens de trouver la fonction qui je pense doit être utilisé dans ce cas:
ExportAsFixedFormat mais je ne sais pas comment l'utiliser et ou l'insérer dans mes lignes de code et quel exact je dois donner :

ActiveDocument.ExportAsFixedFormat (et après?)

merci pour votre aide

olivia
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
m@rina Messages postés 20016 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 16 avril 2024 11 268
8 sept. 2010 à 16:22
Rebonjour,

La méthode ExportAsFixedFormat permet simplement d'exporter (convertir) un document sous un autre format (MDF ou XPS en l'occurence) :

ActiveDocument.ExportAsFixedFormat OutputFileName:="C:\mon_chemin...\mondoc.pdf", _
ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False


Ce code exporte le document actif en un fichier pdf du nom de mondoc.pdf, sur le lecteur C.

C'est tout ce que ça fait. Puisque ta macro est prête pour envoyer le fichier, il te suffira de remplacer le fichier par celui que tu auras converti en PDF.

m@rina

ps. : Merci de ne pas t'éparpiller sur plusieurs topics et de rester dans la même conversation, c'est quand même plus facile à suivre.
0
bonjour marina,

ca a l'air tellement simple mais malheureusement je suis débutante sur vba et j'ai du mal à tout saisir.
j'ai copié collé ton code et cela ne fonctionne pas.
je pense que j'ai du zapper quelque chose
ou l'insérerait tu dans ma ligne de code et peux tu me dire si il faut que je change certains champs.


Private Sub CommandButton1_Click()

Set myApp = CreateObject("Outlook.Application")
Set myItem = myApp.CreateItem(olMailItem)
myItem.Subject = "subject"
myItem.Body = "Body text"
myItem.Attachments.Add ThisDocument.Path & "\" & ThisDocument.Name
myItem.to = "test@test.fr"
myItem.Display
myItem.Send

ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges

End Sub


Merci pour ton aide précieuse et désolé pour l'autre post.
0
J'ai changé la ligne de code de marina en écrivant ceci :
ActiveDocument.ExportAsFixedFormat OutputFileName:="\" & ThisDocument.Name, _
ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False
mais cela ne fonctionne pas quand je l'insère dans mon private sub commandButton1.
Quelqu'un pourrait'il me dire ce que j'ai zappé.

Merci pour votre aide
0
Je viens d'essayer la manip suivante en reprenant le code de marina afin qu'il m'ouvre le doc

ActiveDocument.ExportAsFixedFormat OutputFileName:="\" & ThisDocument.Name, _
ExportFormat:=wdExportFormatPDF, OpenAfterExport:=True


Une fenêtre s'ouvre et me donne le message d'erreur suivant :
La page XML ne peut pas être affichée
Impossible d'afficher l'entrée XML en utilisant la feuille de style . Corrigez l'erreur, puis cliquez sur le bouton Actualiser ou réessayez ultérieurement.


--------------------------------------------------------------------------------

Un caractère incorrect a été trouvé dans un contenu de texte. Erreur de traitement de la ressource file:///Q:/envoie mail.x...

Y'a t'il une erreur dans la ligne de code?

Merci pour votre aide
0