Mail pdf via outlook

Bonjour,

Je vous avertie, je suis novice en VBA (je ne suis même pas sur que ç'en est ).

Je sais que le sujet a été abordé de nombreuse fois et j'ai beau cherché les réponses à mes questions, ça ne vient pas (ou alors je ne les comprend pas!)

Voici mon but :

- Avoir un simple bouton sur lequel cliquer pour envoyer l'onglet actif en e-mail.

Mon problème : je ne sais pas comment créer ce bouton ou cette commande, en gros je ne sais pas comment on déclenche le tout

J'ai récupéré ce code sur internet :

Sub EnvoiAutomatiqueMail()
Dim lignedep As Long
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim adresse As String
Dim message As String
Dim sujet As String

lignedep = 96
Index = lignedep

While chemin = ""
'ouvre une boite de dialogue pour choisir un répertoire
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.Show
If .SelectedItems.Count > 0 Then
chemin = .SelectedItems(1)
End If
End With
Wend

'On vérifie si le dernier caractère est différent de "\"
If Right(chemin, 1) <> "\" Then
chemin = chemin & "\"
End If

'Boucle sur la liste des directions
While Worksheets("synthese").Cells(Index, 3).Value <> ""

'on renseigne B1 avec la valeur
Range("J6").Value = Cells(Index, 3).Value

'on nomme le fichier 
NomFichier = Range("J6").Value & "- NOM DU FICHIER"

'on enregistre en PDF
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
chemin & NomFichier & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

CurFile = chemin & NomFichier & ".pdf"

'on définit le sujet du mail
sujet = Range("J6").Value & " - SUJET DU MAIL"

'on pointe sur la cellule contenant l'adresse
adresse = Range("Q6")
copie = Range("Q7")

'on rédige le mesage
message = " Bonjour," & vbCrLf & "Veuillez trouver ci-joint votre facture d'un montant de " 
'VBCRLF permet un retour à la ligne ‘VBCRLF permet un passage à la ligne dans le mail envoyé. 

Set OutlookApp = CreateObject("outlook.application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.Subject = sujet
.To = adresse
.CC = copie
' CC ne doit pas être nul
.Body = message
.Attachments.Add CurFile
.Display
'on envoie le mail créé avec .Send / peut être remplacé par .display pour préparer le mail sans l'envoyer
End With
'on passe à la ligne suivante
Index = Index + 1
Wend
End Sub 

J'aimerais au moins essayer ce code, si vous pouviez m'expliquer ou me montrer directement dans le fichier, je vous serais très reconnaissant.

Je vous remercie ,

Cordialement.

29factures-test.zip (6.43 Ko)

Bonjour FBidee

En regardant ton fichier, tu souhaites :

  • envoyer l'onglet par mail ?
  • envoyer l'onglet sous format PDF ?
et tout cela via outlook ?

Bonjour et1000lio,

Je souhaite envoyer la mise en page de l'onglet sous format pdf via Outlook

Cordialement.

Edit : Oui je parle d'onglets car je compte faire plusieurs onglets à la suite (plusieurs feuilles Excel si vous préférez)

Fbidee

Ok donc voici un code que j'utilise tous les jours et sous plusieurs variantes.

Le corps du mail est programmé en HTML.

Il te suffit de changer le chemin. La programmation actuelle enregistre le PDF dans dossier spécifique dans DOCUMENTS nommé FACTURES. Il y a aussi dans l'onglet des lignes pré-programmé pour le bon fonctionnement de la progammation.

Je te laisse découvrir tout cela

Option Explicit

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim a As Variant
Dim b, c, Olapp
a = Range("Q7").Text
b = Environ("userprofile")

'Selection de la plage de cellule et création du PDF dans un dossier spécifique
Range("A1:N38").Select
        Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        b & "\DOCUMENTS\FACTURES\" & a & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False

Dim msg As MailItem
Set Olapp = New Outlook.Application
Set msg = Olapp.CreateItem(olMailItem)
msg.To = Range("Q6")
msg.Subject = Range("D14") & " " & Range("G14") & Range("h14") & Range("i14") & Range("j14")
msg.HTMLBody = "<html><body><font color=""black""><font size=3><FONT FACE=""Georgia"">" & Range("B6") & "," & _
"<br /><br />" & "Ci-joint votre " & "<B><font color=""blue"">" & Range("Q7") & "</B></FONT></FONT>" & _
"<br /><br />" & "FBidee ,  " & _
"<br /><br /><br />" & " </font></font></font></body></html>"
msg.Display
msg.Attachments.Add Range("Q9").Text
End Sub

Tu as deux solutions d'envoi :

1) Clic sur le bouton "CREATION MAIL"

2) ou lance la macro ENVOI avec le raccourci CTRL+MAJ+E

13factures-test.xlsm (35.51 Ko)

Excellent ! Merci beaucoup !

Je vais regarder le code de plus près mais le résultat est déjà génial.

Juste une petite question, comment puis-je dupliquer le bouton "CREATION MAIL" ? J'aimerais l'importer sur toutes mes feuilles excel

Cordialement

Je m'y attendais à cette question, et c'est pour cela que je t'ai mis le programme dans un module. Donc dès lors que tu es positionné dans une feuille tu lances le raccourci CTRL + MAJ + E

Bonjour,

D'accord je comprend

Par contre est-ce possible de faire en sorte que ce code soit utilisable sur n'importe quel fichier, j'aimerais (si possible) en faire un "add-in", un fichier ".xla" car chez moi le code fonctionne uniquement si le fichier est ouvert.

J'ai tenté de le convertir en fichier xla mais j'ai un problème -je dois mal m'y prendre-, j'ai l'impression qu'il va m'écraser un de mes fichiers .xla déjà existant.

Je vais continuer la bidouille en attendant ta réponse.

Merci encore

Cordialement

Bonjour,

Après 1 mois d'utilisation, finalement la meilleur solution c'est d'ouvrir le fichier où la macro est présente, et j'ouvre mes fichiers après, ça marche au top !

J'ai bidouillé le message, le pointage des cellules, c'est niquel.

Merci , sujet résolu

Re-bonjour,

En fait j'ai juste une dernière chose à vous demander :

Voici le code actuel :

Range("A1:N45").Select
        Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        b & "\DOCUMENTS\FACTURES\" & a & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False

J'aimerais modifier la range en définissant plutôt la plage lorsque je fais "Zone d'impression -> Définir" mais quelle est la commande pour que cela fonctionne svp ?

J'imagine un cas de figure où j'ai une facture sur 2 pages par exemple. Actuellement ça n'irait pas avec cette plage définie.

Merci par avance

Cordialement

Bonjour,

Je suis désolé d'insister

J'ai fait le code suivant :

Range(ActiveSheet.PageSetup.PrintArea).Select
        Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        b & "\DOCUMENTS\FACTURES\" & a & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False

Et contre toute attente, ça correspond à mes attentes… du coup je me dis : y a anguille sous roche ?

ActiveSheet.PageSetup.PrintArea est-elle la bonne commande à utiliser ? Avez-vous autre chose à me proposer qui puisse faire l'affaire ?

Je veux partir sur la meilleur base possible

Cordialement

Rechercher des sujets similaires à "mail pdf via outlook"