Enregistrer un formulaire en PDF et l'envoyer par mail

#jquem# Messages postés 76 Statut Membre -  
#jquem# Messages postés 76 Statut Membre -
Bonjour,

Je souhaiterais ,via le clic d'un bouton, enregistrer sous format PDF un formulaire et envoyer celui-ci directement par mail.
A vrai dire, je suis un peu paumé sur le sujet... Quelqu'un aurait-il une solution à m'apporter, s'il vous plait ?
Merci de vos réponses.
Je@n

10 réponses

  1. #jquem# Messages postés 76 Statut Membre
     
    Bonjour et merci pour votre réponse. Tout cela va énormément me servir pour d'autres documents.
    Pour celui-ci, ma préoccupation est :
    - d'enregistrer le formulaire en PDF
    - que ce formulaire en PDF soit directement mis en pièce jointe et envoyé par mail (est-ce le même procédé que pour excel ?)

    Ce fichier est un QCM. Il s'ouvre automatiquement sur le formulaire de réponses (ce dernier est protégé par un mot de passe afin d'éviter que chacun puisse aller sur excel). Je crains que si tout le fichier est envoyé par mail, il s'ouvre sur le formulaire vierge. C'est pourquoi j'ai absolument besoin que seul le PDF soit envoyé.

    Merci à nouveau pour votre aide.
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Mettre ceci:

      Option Explicit
      Private Sub CommandButton1_Click()
      TestEnvoiEmail_Variables
      End Sub
      Sub TestEnvoiEmail_Variables()
      'par Excel-Malin.com ( https://excel-malin.com )
      'allez dans Outils - Références cocher Microsoft Outlook xx Object Library
      'définition des variables
      Dim MonSujet As String
      Dim MonDestinataire As String
      Dim MonContenu As String
      Dim MaPieceJointe As String
       Dim sFilename As String 'Nom du fichier
      Dim sRep As String 'Répertoire de sauvegarde
      Dim LaDate$, Nom$, Rep$ 'Déclaration des variables
      LaDate = Format(Now, "yyyy_mm_dd_") & Format(Time, "hh_mm_") 'formatage de la date et heure
      Nom = "test" 'Nom de l'onglet à entregistrer
      sRep = ThisWorkbook.Path & "\" 'Répertoire de sauvegarde (si non spécifié, répertoire actif par défaut)
       sFilename = Nom & "_" & LaDate & ".pdf" 'Nom du fichier
       ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sRep & sFilename, _
       Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
       OpenAfterPublish:=False
      'attribution des valeurs aux variables
      MonSujet = "Test d'email d'Excel avec variables"
      MonDestinataire = "paul@test.fr;marie@test.fr;contact@monentreprise.ca"
      MonContenu = "Bonjour Jean, voici un petit message de test... Avec un fichier en plus."
      MaPieceJointe = sRep & sFilename
          
          'test envoi de l'email
              Call EnvoyerEmail(MonSujet, MonDestinataire, MonContenu, MaPieceJointe)
      
      MsgBox "Test terminé..."
      End Sub
      Sub EnvoyerEmail(ByVal Sujet As String, ByVal Destinataire As String, ByVal ContenuEmail As String, Optional ByVal PieceJointe As String)
      'par Excel-Malin.com ( https://excel-malin.com )
      
      On Error GoTo EnvoyerEmailErreur
      
      'définition des variables
      Dim oOutlook As Outlook.Application
      Dim WasOutlookOpen As Boolean
      Dim oMailItem As Outlook.MailItem
      Dim Body As Variant
      
      Body = ContenuEmail
      
          'vérification si le Contenu du mail n'est pas vide. Si oui, email n'est pas envoyé. Si vous voulez pouvoir envoyer les email vides, mettez en commentaire les 4 lignes de code qui suivent.
          If (Body = False) Then
              MsgBox "Mail non envoyé car vide", vbOKOnly, "Message"
              Exit Sub
             End If
          
          'préparer Outlook
          PreparerOutlook oOutlook
          Set oMailItem = oOutlook.CreateItem(0)
          
          'création de l'email
          With oMailItem
              .To = Destinataire
              .Subject = Sujet
              
              'CHOIX DU FORMAT
              '----------------------
              'email formaté comme texte
                  .BodyFormat = olFormatRichText
                  .Body = Body
                  
                  'OU
                  
              'email formaté comme HTML
                  '.BodyFormat = olFormatHTML
                  '.HTMLBody = "<html><p>" & Body & "</p></html>"
              '----------------------
              
              If PieceJointe <> "" Then .Attachments.Add PieceJointe
      
             .Display   '<- affiche l'email (si vous ne voulez pas l'afficher, mettez cette ligne en commentaire)
             .Save      '<- sauvegarde l'email avant l'envoi (pour ne pas le sauvegarder, mettez cette ligne en commentaire)
             .Send      '<- envoie l'email (si vous voulez seulement préparer l'email et l'envoyer manuellement, mettez cette ligne en commentaire)
          End With
          
         'nettoyage...
          If (Not (oMailItem Is Nothing)) Then Set oMailItem = Nothing
          If (Not (oOutlook Is Nothing)) Then Set oOutlook = Nothing
          
         Exit Sub
      
      EnvoyerEmailErreur:
          If (Not (oMailItem Is Nothing)) Then Set oMailItem = Nothing
          If (Not (oOutlook Is Nothing)) Then Set oOutlook = Nothing
        
          MsgBox "Le mail n'a pas pu être envoyé...", vbCritical, "Erreur"
      End Sub
      
      Private Sub PreparerOutlook(ByRef oOutlook As Object)
      'par Excel-Malin.com ( https://excel-malin.com )
      
      '------------------------------------------------------------------------------------------------
      'Ce code vérifie si Outlook est prêt à envoyer des emails... Et s'il ne l'est pas, il le prépare.
      '------------------------------------------------------------------------------------------------
      On Error GoTo PreparerOutlookErreur
      
      
      On Error Resume Next
          'vérification si Outlook est ouvert
          Set oOutlook = GetObject(, "Outlook.Application")
          
          If (Err.Number <> 0) Then 'si Outlook n'est pas ouvert, une instance est ouverte
              Err.Clear
              Set oOutlook = CreateObject("Outlook.Application")
          Else    'si Outlook est ouvert, l'instance existante est utilisée
              Set oOutlook = GetObject("Outlook.Application")
              oOutlook.Visible = True
          End If
          Exit Sub
      
      PreparerOutlookErreur:
          MsgBox "Une erreur est survenue lors de l'exécution de PreparerOutlook()..."
      End Sub
      
      


      enregistrer sous: Classeur prenant en charge les macros

      @+ Le Pivert
      0
  2. #jquem# Messages postés 76 Statut Membre
     
    Merci pour cette solution.
    J'ai copié ces codes et modifié certains paramètres propres à mon fichier (voir détail à la fin de ma réponse)
    Toutefois, lorsque je clique sur mon bouton, un message d'erreur s'affiche dans une fenêtre :
    "Erreur de compilation"
    "Type défini par l'utilisateur non défini"

    J'ai mis un "*" devant les phrases concernées

    1 * oOutlook As Outlook.Application est surbrillé en bleu

    Après avoir cliqué "OK" sur le message, la phrase ci-dessous est surbrillée en jaune.

    2 * Sub EnvoyerEmail(ByVal Sujet As String, ByVal Destinataire As String, ByVal ContenuEmail As String, Optional ByVal PieceJointe As String)
    'par Excel-Malin.com ( https://excel-malin.com )

    On Error GoTo EnvoyerEmailErreur

    'définition des variables
    1 * Dim oOutlook As Outlook.Application
    Dim WasOutlookOpen As Boolean
    Dim oMailItem As Outlook.MailItem
    Dim Body As Variant

    Les seules modifs que j'ai faites sont :
    Le nom de l'onglet à enregistrer (nom du formulaire)
    Mon adresse mail dans MonDestinataire

    Ai-je fait une erreur ?

    Merci pour votre réponse.

    Je@n
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      allez dans Outils - Références cocher Microsoft Outlook xx Object Library

      cela a-t-il été fait?
      0
  3. #jquem# Messages postés 76 Statut Membre
     
    Je le trouve où dans Outlook ?

    Je suis allé dans Options Outlook. Je suppose que c'est là... mais plus précisément ?

    Merci

    Je@n
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Mais non, c'est dans l'éditeur vbe d'Excel., où sont les macros!

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

    Posez votre question
  5. #jquem# Messages postés 76 Statut Membre
     
    Bonsoir,
    Ca a l'air de marcher
    J'ai cliqué sur Microsoft Outlook 16.0 Object Library (peut une version différente...)

    Question : si je passe ce document à un confrère via une clé USB par exemple, doit-il de son côté faire la même manipulation s'il souhaite faire fonctionner ce formulaire sur son PC ?

    Merci pour votre réponse et encore pour votre aide. Je finalise mon document et mettrai cet échange comme solutionné dès que je me serai assuré que tout fonctionne bien.

    Bien cordialement

    Je@n
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Question : si je passe ce document à un confrère via une clé USB par exemple, doit-il de son côté faire la même manipulation s'il souhaite faire fonctionner ce formulaire sur son PC ?

      Oui effectivement, il faudra qu'il fasse la même manipulation. Ce programme pour fonctionner a besoin de cette bibliothèque.

      Vous trouverez votre PDF dans le même dossier que le classeur contenant les macros.

      @+ Le Pivert
      0
  6. #jquem# Messages postés 76 Statut Membre
     
    Ce format me satisfait pleinement à titre personnel.

    Par contre, je vais paraitre un peu "capricieux", mais y a-t-il une autre solution (codage) pour éviter de passer par l'intégration de Microsoft Outlook 16.0 Object Library ?

    Ce fichier va passer par le PC de 10 managers et d'une soixantaine de commerciaux... je crains que cette manipulation n'en rebute quelques uns (l'intégration de "Développeur" dans le ruban semblant déjà pour beaucoup mission incroyable...).

    Quoiqu'il en soit, merci infiniment pour votre aide, j'ai beaucoup appris.

    Pour les PDF, je les retrouve sur mon bureau.

    Cdt, Je@n
    0
  7. #jquem# Messages postés 76 Statut Membre
     
    J'ai mis en tant que "nom de l'onglet à enregistrer" "Feuil1" (feuille d'excel ou apparaissent les résultats. Le problème est que le PDF retient tout de cette feuille (11 feuilles en PDF).

    Est-il possible de ne retenir qu'une partie que j'aurais renommée "Résultats" ?

    Comment faut-il l'écrire ? SVP

    Merci pour votre prochaine réponse
    0
  8. #jquem# Messages postés 76 Statut Membre
     
    Merci pour votre réponse sur le VBA et VB.Net.

    Je vais essayer cette version.
    Inutile de vous préciser que je suis novice et autodidacte, d'où mes méconnaissances et mes nombreuses questions... mais il n'y a qu'en faisant et en se référant à des personnes compétentes qu'on apprend.

    merci encore.

    Je@n
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Voilà le code à adapter à la plage de cellule(page) que l'on veut enregistrer:

      Option Explicit
      Sub test() 'enregistre 1 page
      Dim Rg As Range
      Set Rg = ActiveSheet.Range("A1:F32") 'a adapter la plage de cellule
          Rg.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                                 ThisWorkbook.Path & "\essai.pdf", _
                                 Quality:=xlQualityStandard, _
                                 IncludeDocProperties:=True, _
                                 IgnorePrintAreas:=False, _
                                 OpenAfterPublish:=False
          Set Rg = Nothing
          MsgBox "votre PDF essai est enregistré dans le même dossier que ce classeur.", vbOKOnly + vbInformation, "Enregistrement en PDF"
      End Sub
      


      @+ Le Pivert
      0
      1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > cs_Le Pivert Messages postés 8437 Statut Contributeur
         
        Voilà un exemple avec utilisation d'Outlook sans la référence et sélection d'une plage de cellule pour le PDF en pièce jointe:

        https://www.cjoint.com/c/JKAoyywuR7Q

        Bonne lecture
        0
  9. #jquem# Messages postés 76 Statut Membre
     
    Bonjour, on y est presque. J'ai suivi vos conseils et liens.
    Je vous mets ci-dessous ce que j'ai :

    Option Explicit
    Sub test() 'enregistre 1 page
    Dim Rg As Range
    Set Rg = ActiveSheet.Range("A1:E25") 'a adapter la plage de cellule
    Rg.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    ThisWorkbook.Path & "\essai.pdf", _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=False
    Set Rg = Nothing
    MsgBox "votre PDF essai est enregistré dans le même dossier que ce classeur.", vbOKOnly + vbInformation, "Enregistrement en PDF"
    End Sub

    Sub EnvoiMail()

    Set MyOlApp = CreateObject("Outlook.Application")
    ActiveWorkbook.Save
    Filename = ActiveWorkbook.FullName
    Set mymail = MyOlApp.CreateItem(olMailItem)

    test = Cells(30, 1).Value
    If test = "" Then
    MsgBox ("Vous n'avez pas saisi d'expéditeur...")

    Else

    'recherche des adresse email destinataire dans les cases EXCEL de la feuille utilisée
    Destinataire = Cells(30, 1).Value & ";" & Cells(31, 1).Value & ";" & Cells(32, 1).Value & ";" & Cells(33, 11).Value & ";" & Cells(34, 1).Value
    'ajout au bon endroit des adresses emails précédemment définies
    Set MyRecipient = mymail.Recipients.Add(Destinataire)
    'définition de la case dans laquelle se trouve l'obejt de mon email
    mymail.Subject = Cells(28, 1).Value & " " & Cells(29, 1).Value & " => REPONSE QCM"
    'Ecriture de l'email type, avec rajout des cellules variables saisies dans EXCEL si besoin
    mymail.Body = " Bonjour," & vbLf & vbLf & "Tu trouveras ci joint la réponse en PDF du QCM Chirurgie :" & vbLf & vbLf & "Expéditeur :" & Cells(30, 1).Value & " " & Cells(1, 1).Value & " " & Cells(29, 1).Value & " " & Cells(4, 4).Value & vbLf & "Dépose à quai " & vbLf & "Destinataire Final : " & Cells(4, 6).Value & vbLf & "Métrage : " & Cells(4, 8).Value & vbLf & "Poids : " & Cells(4, 9).Value & vbLf & "Nb Palettes : " & Cells(4, 10) & vbLf & "Enlèvement à prévoir le " & Cells(4, 11).Value & ", " & Cells(4, 12).Value
    mymail.Display
    End If

    End Sub

    J'avais dans un premier temps installé le "Sub EnvoiMail" et le mail partait effectivement bien, mais sans pièce jointe (normal, le "Sub test" n'était pas encore installé).

    j'ai donc installé le "Sub test", le fichier s'enregistre bien en PDF, mais le PC me laisse un message "Erreur de compilation - Variable non définie".
    Cela surbrille sub EnvoiMail et Set MyOlApp.

    Pourriez vous m'expliquer s'il vous plait où et comment résoudre de problème. Je pense qu'il n'y a pas grand chose, mais je coince.

    Merci beaucoup

    Je@n
    0
  10. #jquem# Messages postés 76 Statut Membre
     
    Bonsoir,

    J'en suis arrivé à bout. Heureusement que vous étiez là pour me guider cs_Le Pivert.

    Un grand MERCI !!!!

    Je@n
    0