Enregistrer un formulaire en PDF et l'envoyer par mail

Fermé
#jquem# Messages postés 74 Date d'inscription jeudi 23 mars 2017 Statut Membre Dernière intervention 1 décembre 2020 - 24 nov. 2020 à 13:49
#jquem# Messages postés 74 Date d'inscription jeudi 23 mars 2017 Statut Membre Dernière intervention 1 décembre 2020 - 1 déc. 2020 à 17:54
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
A voir également:

10 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
24 nov. 2020 à 16:43
0
#jquem# Messages postés 74 Date d'inscription jeudi 23 mars 2017 Statut Membre Dernière intervention 1 décembre 2020
24 nov. 2020 à 17:53
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
24 nov. 2020 à 18:53
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
#jquem# Messages postés 74 Date d'inscription jeudi 23 mars 2017 Statut Membre Dernière intervention 1 décembre 2020
25 nov. 2020 à 12:32
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
Modifié le 25 nov. 2020 à 14:17
allez dans Outils - Références cocher Microsoft Outlook xx Object Library

cela a-t-il été fait?
0
#jquem# Messages postés 74 Date d'inscription jeudi 23 mars 2017 Statut Membre Dernière intervention 1 décembre 2020
25 nov. 2020 à 14:48
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
25 nov. 2020 à 14:54
Mais non, c'est dans l'éditeur vbe d'Excel., où sont les macros!

0

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

Posez votre question
#jquem# Messages postés 74 Date d'inscription jeudi 23 mars 2017 Statut Membre Dernière intervention 1 décembre 2020
25 nov. 2020 à 19:33
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
25 nov. 2020 à 19:40
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
#jquem# Messages postés 74 Date d'inscription jeudi 23 mars 2017 Statut Membre Dernière intervention 1 décembre 2020
26 nov. 2020 à 11:01
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
Modifié le 26 nov. 2020 à 11:13
Vous avez pu constater par vous même qu'il fallait passer par là en vba.

La seule solution serait de trouver un logiciel dans un autre langage informatique qui fasse cela .

Je code en VB.Net et je sais que c'est possible dans ce langage

voici un aperçu:

https://support.openhost-network.com/autres/programmation-developpement/envoi-email-vb-net-microsoft-visual-studio/


@+ Le Pivert
0
#jquem# Messages postés 74 Date d'inscription jeudi 23 mars 2017 Statut Membre Dernière intervention 1 décembre 2020
26 nov. 2020 à 11:37
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
26 nov. 2020 à 11:47
Voir ceci pour envoyer sans la référence, ça fonctionne!

https://forum.excel-pratique.com/excel/envoyer-un-mail-avec-outlook-sans-object-library-t71481.html

retient tout de cette feuille (11 feuilles en PDF).

c'est 11 pages

Je vois cela

@+
0
#jquem# Messages postés 74 Date d'inscription jeudi 23 mars 2017 Statut Membre Dernière intervention 1 décembre 2020
26 nov. 2020 à 11:44
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
Modifié le 26 nov. 2020 à 12:03
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729 > cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024
26 nov. 2020 à 15:27
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
#jquem# Messages postés 74 Date d'inscription jeudi 23 mars 2017 Statut Membre Dernière intervention 1 décembre 2020
30 nov. 2020 à 12:22
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
30 nov. 2020 à 12:47
J'ai envoyé un lien pour télécharger le classeur exemple!

https://forums.commentcamarche.net/forum/affich-36961127-enregistrer-un-formulaire-en-pdf-et-l-envoyer-par-mail#16

vous ne l'avez pas vu!
0
#jquem# Messages postés 74 Date d'inscription jeudi 23 mars 2017 Statut Membre Dernière intervention 1 décembre 2020
1 déc. 2020 à 17:54
Bonsoir,

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

Un grand MERCI !!!!

Je@n
0