Envoyer une feuille en fichier PDF par mail automatiquement
Bonjour,
Je suis débutante en code VBA. J'ai fait plusieurs recherches, mais je n'ai trouvé aucune réponse qui répond entièrement à ce que je recherche.
J'ai un fichier qui contient plusieurs feuilles de travail. Je souhaite convertir une partie d'une seule de ces feuilles en format PDF, puis l'envoyer par courriel Outlook de façon automatique. Je ne souhaite pas arriver dans la boîte de messagerie et devoir envoyer le courriel. Aussi, je ne veux pas enregistrer la feuille de travail en PDF pour la conserver. Elle doit simplement être en pièce jointe dans le courriel.
Le destinataire est toujours le même. Le fichier doit rester ouvert après l'envoi du courriel.
J'ai essayé ce code, mais il envoi le fichier complet dans le courriel, avec un délai de presque 1 heure.
Dim Destinataires(1) As String, Sujet As String
Dim AccuseReception As Boolean
Destinataires(1) = "adresse courriel"
Sujet = "Facture" & " " & "#" & " " & Sheets("Création de facture").Range("l38")
AccuseReception = True
ThisWorkbook.Sheets("Création de facture").Range("a1:l38").Copy
ActiveWorkbook.sendMail Destinataires, Sujet, AccuseReceptionLe fichier de travail est trop lourd pour être envoyé, ce qui fait que je vous ai laissé le code complet qui fonctionne très bien à titre de référence.
'BOUTON "Archiver la facture"'
Private Sub CommandButton2_Click()
'Indique que si la case "Nom du client" est vide, envoyer le message de remplir la case pour poursuivre'
If Sheets("Création de facture").Range("f6") = "" Then
MsgBox ("Veuillez inscrire le nom du client.")
Exit Sub
End If
'Indique que si la case "Escompte" est vide, envoyer le message de remplir la case pour poursuivre'
If Sheets("Création de facture").Range("h12") = "" Then
MsgBox ("Veuillez inscrire le % d'escompte.")
Exit Sub
End If
'Indique que si la case "Total" est vide, envoyer le message de remplir la case pour poursuivre'
If Sheets("Création de facture").Range("l38") = 0 Then
MsgBox ("Veuillez inscrire la quantité et description des articles vendus.")
Exit Sub
End If
'Demande à l'utilisateur s'il désire archiver la facture'
Dim answer As Integer
answer = MsgBox("Êtes-vous bien certain de vouloir archiver cette facture?", vbYesNo + vbQuestion, "")
'Si l'utilisateur désire archiver...'
If answer = vbYes Then
'Permet d'inscrire des données dans les feuilles protégées'
Sheets("Création de facture").Unprotect Password:="xxxx"
Sheets("Historique factures").Protect Password:="xxxx"
Sheets("Impression de facture").Protect Password:="xxxx"
'Incrémentation de la facture dans l'onglet "Historique factures"'
ligne = Sheets("Historique factures").Range("b2").End(xlDown).Row + 1
Sheets("Historique factures").Range("a" & ligne).Value = Sheets("Création de facture").Range("k1").Value
Sheets("Historique factures").Range("b" & ligne).Value = Sheets("Création de facture").Range("d38").Value
Sheets("Historique factures").Range("c" & ligne).Value = Sheets("Création de facture").Range("f6").Value
Sheets("Historique factures").Range("d" & ligne).Value = Sheets("Création de facture").Range("f7").Value
Sheets("Historique factures").Range("e" & ligne).Value = Sheets("Création de facture").Range("f8").Value
Sheets("Historique factures").Range("f" & ligne).Value = Sheets("Création de facture").Range("k8").Value
Sheets("Historique factures").Range("g" & ligne).Value = Sheets("Création de facture").Range("h9").Value
Sheets("Historique factures").Range("h" & ligne).Value = Sheets("Création de facture").Range("l38").Value
'Copie des données de la feuille "Création de facture" sur la feuille "Impression facture"'
Sheets("Impression de facture").Range("b13:d36").Value = Sheets("Création de facture").Range("b13:d36").Value
Sheets("Impression de facture").Range("h12").Value = Sheets("Création de facture").Range("h12").Value
Sheets("Impression de facture").Range("f6").Value = Sheets("Création de facture").Range("f6").Value
Sheets("Impression de facture").Range("f7").Value = Sheets("Création de facture").Range("f7").Value
Sheets("Impression de facture").Range("f8").Value = Sheets("Création de facture").Range("f8").Value
Sheets("Impression de facture").Range("k8").Value = Sheets("Création de facture").Range("k8").Value
Sheets("Impression de facture").Range("f9").Value = Sheets("Création de facture").Range("f9").Value
Sheets("Impression de facture").Range("h9").Value = Sheets("Création de facture").Range("h9").Value
Sheets("Impression de facture").Range("d38").Value = Sheets("Création de facture").Range("d38").Value
Sheets("Impression de facture").Range("k1").Value = Sheets("Création de facture").Range("k1").Value
[Surligner]Je souhaite que le code soit insérer ici[/Surligner]
'Commande d'envoi courriel de la feuille PDF "Création de facture"'
'Vide le contenu de la feuille "Création de facture"'
Sheets("Création de facture").Range("b13:d36").ClearContents
Sheets("Création de facture").Range("h12:i12").ClearContents
Sheets("Création de facture").Range("f6:k6").ClearContents
'Numérotation automatique de la nouvelle facture'
Sheets("Création de facture").Range("d38").Value = Sheets("Création de facture").Range("d38").Value + 1
'Remet la protection sur les feuilles protégées'
Sheets("Création de facture").Protect Password:="xxxx"
Sheets("Historique factures").Protect Password:="xxxx"
Sheets("Impression de facture").Protect Password:="xxxx"
'Informe l'utilisateur de l'endroit où se rendre pour imprimer la facture'
MsgBox ("Veuillez imprimer la facture dans l'onglet 'Impression de facture'.")
'Enregistre le fichier'
ActiveWorkbook.Save
'Si l'utilisateur ne souhaite pas archiver...'
Else
MsgBox ("Veuillez compléter la facture")
End If
End SubJe vous remercie énormément à l'avance pour votre aide!
Bonjour,
à tester,
Sub Mail_Outlook_Sheet_PDF()
'Il faut activer la référence "Microsoft Outlook xx.x Object Library" Avant de lancer cette macro
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
chemin = "C:\Users\isabelle\Documents\" 'à adapter
fichier = "Monfichier.pdf" 'à adapter
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin & fichier, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
From:=4, To:=4, OpenAfterPublish:=False
With OutMail
.To = "destinataire@site.com"
.CC = ""
.BCC = ""
.Subject = "This is the Subject line"
.Body = "Hello World!"
.Attachments.Add (chemin & fichier)
.display
' .Send
End With
Set OutMail = Nothing
Set OutApp = Nothing
Kill chemin & fichier
End SubBonjour Isabelle,
J'essaie le code que tu m'as envoyé.
Il y a quelque chose qui cloche.
Peux-tu me pister sur le problème svp?
Je te laisse la section du code qui est surligné en jaune.
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin & fichier, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
From:=4, To:=4, OpenAfterPublish:=FalseMerci!
Est-ce possible que le problème soit parce que j'ai une commande "ThisWorkbook" spécifique concernant cette feuille qui empêche l'impression de la feuille?
'Empêche l'impression des feuilles identifiées'
Private Sub workbook_BeforePrint(Cancel As Boolean)
'Identifie les feuilles concernées'
Select Case ActiveSheet.Name
Case "Création de facture", "Historique factures", "Paramètres": Cancel = True
Case Else: Cancel = False
End Select
'Message pour les feuilles "Historique factures" et "Paramètres"'
Select Case ActiveSheet.Name
Case "Historique factures", "Paramètres"
MsgBox ("Vous ne pouvez pas imprimer cette feuille.")
End Select
'Message pour la feuille "Création de facture"'
Select Case ActiveSheet.Name
Case "Création de facture"
MsgBox ("Pour imprimer la facture, veuillez appuyer sur le bouton 'Archiver la facture', puis vous rendre sur l'onglet 'Impression de facture'.")
End Select
End SubBonjour Isabelle,
J'ai trouvé comment contourner la demande de refus d'impression et à faire fonctionner le code que tu m'as envoyé.
C'est exactement ce que je voulais!!
Je me permets cependant de relever ici une correction pour le bénéfice des futurs utilisateurs
Dans le code,
' .SendAurait dû être:
.SendSinon, tout le reste est parfait!
Je ne te remercierai jamais assez pour le code que tu m'as envoyé!
Je me permets cependant de relever ici une correction pour le bénéfice des futurs utilisateurs
re,
ce n'est pas une erreur, mais plutôt un choix entre :
.Display
et
.Send
c'est à dire mettre .send en commentaire et laisser .display pour voir le message avant qu'il soit envoyé,
ou le contraire, mettre .display en commentaire et laisser .send, le message est envoyé sans qu'on le voit.
Bonjour Boulangerie et bonjour Isabelle,
J'ai suivi vos échanges et j'ai une question pour toi Isabelle.
Pourquoi la valeur 4 à : From:=4, To:=4 ?
Merci pour ta réponse.
Cdt
Bonjour ddetp88,
dans cette exemple j'ai choisi la page 4 (uniquement)
ça peut être
From:=1, To:=4 pour les 4 première pages
ou
From:=1, To:=1 pour la première page (uniquement)
Je ne m'étais jamais intéressé au problème, merci pour ta réponse.
Au plaisir