Mettre piece jointe en pdf vba word 2007

Résolu
olivia -  
m@rina Messages postés 27534 Date d'inscription   Statut Modérateur Dernière intervention   -
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

7 réponses

  1. m@rina Messages postés 27534 Date d'inscription   Statut Modérateur Dernière intervention   11 562
     
    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
    1. olivia
       
      merci à toi marina d'avoir pris du temps pour me répondre. Ca fonctionne.

      Olivia
      0
    2. m@rina Messages postés 27534 Date d'inscription   Statut Modérateur Dernière intervention   11 562
       
      J'ai mis :
      myItem.to = adresse

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

      m@rina
      0
  2. m@rina Messages postés 27534 Date d'inscription   Statut Modérateur Dernière intervention   11 562
     
    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
  3. olivia
     
    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
  4. olivia
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. m@rina Messages postés 27534 Date d'inscription   Statut Modérateur Dernière intervention   11 562
     
    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
  7. olivia
     
    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
  8. olivia
     
    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
    1. olivia
       
      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