Envoi mail automatique Excel/VBA

Bonjour à tous,

Je suis nouveau sur le forum et débutant en programmation VBA.

Apres recherche sur le forum j'ai trouvé plusieurs sujets sur mon problème qui est de pouvoir envoyer le contenu d'un range de cellule Excel via mail (dans le corp du message).

Voici ce que j'ai adapté d'après mes recherches:

Sub envoi_mail()

    Application.DisplayAlerts = False
    Application.ScreenUpdating = False

    ' On définit les variables
    Dim OL As Object, myItem As Object, wDoc As Object

    Set OL = CreateObject("Outlook.Application")
    Set myItem = OL.CreateItem(olMailItem)
    Set wDoc = myItem.GetInspector.WordEditor

    ' On prépare le mail en rentrant les paramètres : adresse des destinataires, en copie, objet du mail, corps du mail
    With myItem
        .To = "xxx@ccc.com"
        '.CC = "yyyyy@ccc.com"
        .Subject = "test envoi mail"
        .Display

    Sheets("Synthèse").Activate

        ' Copie du tableau 1
        Range("A12:AG53").CopyPicture
        wDoc.Application.Selection.Paste

    Sheets("Décapage").Activate

        ' Copie du tableau 2
        Range("A12:AG53").CopyPicture
        wDoc.Application.Selection.Paste

    End With

    Set OL = Nothing
    Set myItem = Nothing
    Set wDoc = Nothing

 End Sub

Le résultat m'ouvre un une fenêtre Outlook de visualisation du mail avec les tableaux qui vont bien à la suite les uns des autres.

Mon soucis vient de la commande .Display que je veux remplacer par .Send pour un envoi direct (maintenant que j'ai vu que le résultat me convient), si je remplace j'ai le message d'erreur suivant lors de l'exécution:

Erreur d'exécution '5', Argument ou procédure incorrect

Pourtant en regardant les docs Microsoft sur la fonction Outlook.Application la commande d'envoi est bien .Send, je ne comprend pas d'ou peut venir l'erreur.

est ce le positionnant de mon envoi qui n'est pas bon ?

Merci de votre aide.

Laurent

Bonjour,

Si l'on passe par l'éditeur Word (GetInspector.WordEditor), pour envoyer le mail via Outlook, Il faut utiliser la séquence ".Display" + ".Send"

La commande ".Display" est un passage obligé.

Merci de ton retour en effet je n'avais pas essayé avec les deux

Par contre une autre question avec mes deux tableaux le formatage du mail est bien

tableau1

tableau2

mais si j'ajoute d'autres insertions sur le même principe.

Sub envoi_mail()

    Application.DisplayAlerts = False
    Application.ScreenUpdating = False

    ' On définit les variables
    Dim OL As Object, myItem As Object, wDoc As Object

    Set OL = CreateObject("Outlook.Application")
    Set myItem = OL.CreateItem(olMailItem)
    Set wDoc = myItem.GetInspector.WordEditor

    ' On prépare le mail en rentrant les paramètres : adresse des destinataires, en copie, objet du mail, corps du mail
    With myItem
        .To = "laurent.chantepie@revima.com"
        '.CC = "yyyyy@gmail.com"
        .Subject = "test envoi mail"
        .Display

    Sheets("tableau 1").Activate
        ' Copie du tableau 1
        Range("A12:AG53").CopyPicture
        wDoc.Application.Selection.Paste

    Sheets("tableau 2").Activate
        ' Copie du tableau 2
        Range("A12:AG53").CopyPicture
        wDoc.Application.Selection.Paste

    Sheets("tableau 3").Activate
        ' Copie du tableau 3
        Range("A12:AG53").CopyPicture
        wDoc.Application.Selection.Paste

    Sheets("tableau 4").Activate
        ' Copie du tableau 4
        Range("A12:AG53").CopyPicture
        wDoc.Application.Selection.Paste

    Sheets("tableau 5").Activate
        ' Copie du tableau 5
        Range("A12:AG53").CopyPicture
        wDoc.Application.Selection.Paste

    Sheets("tableau6").Activate
        ' Copie du tableau 6
        Range("A12:AG53").CopyPicture
        wDoc.Application.Selection.Paste

    .Send

    End With

    Set OL = Nothing
    Set myItem = Nothing
    Set wDoc = Nothing

 End Sub

le formatage du mail devient

tableau1

tableau2tableau3tableau4...

une idée du soucis ? il me semble que je n'envoi pas de retour chariot mais cela fonctionne pour les 2 premiers ?

Bonjour,

Essayer ceci avec 2 lignes d'espacement

Sub envoi_mail()

    Application.DisplayAlerts = False
    Application.ScreenUpdating = False

    ' On définit les variables
    Dim OL As Object, myItem As Object, wDoc As Object, rng As Object

    Set OL = CreateObject("Outlook.Application")
    Set myItem = OL.CreateItem(olMailItem)
    Set wDoc = myItem.GetInspector.WordEditor

    ' On prépare le mail en rentrant les paramètres : adresse des destinataires, en copie, objet du mail, corps du mail
    With myItem
        .To = "laurent.chantepie@revima.com"
        '.CC = "yyyyy@gmail.com"
        .Subject = "test envoi mail"
        .Display

    Set rng = wDoc.Content

    Sheets("tableau 1").Activate
        ' Copie du tableau 1
        Range("A12:AG53").CopyPicture
        wDoc.Application.Selection.Paste
        rng.InsertAfter vbNewLine & vbNewLine

    Sheets("tableau 2").Activate
        ' Copie du tableau 2
        Range("A12:AG53").CopyPicture
        wDoc.Application.Selection.Paste
        rng.InsertAfter vbNewLine & vbNewLine

Dans la visualisation du mail le positionnement semble bon mais lors de la reception j'ai le même formatage

tableau1

tableau2tableau3tableau4...

Je regarde une autre piste sur le même sujet, mais avec une autre fonction afin de ne pas dépendre de Outlook (en vue de lancer depuis un serveur)

Sub test()

'Definition des variables
Dim iMsg As Object, iConf As Object, Flds As Object, tab As Range

set tab = Sheets("tableau1").Range("A12:AG53").Select

'Desactivation des messages d'alerte
Application.DisplayAlerts = False

Set iMsg = CreateObject("cdo.message")
Set iConf = CreateObject("cdo.configuration")

Set Flds = iConf.Fields
With Flds
    .Item("http:--schemas.microsoft.com-cdo-configuration-sendusing") = 2
    'remplacez "smtp.nomserveur.fr" par le nom de serveur de votre FAI :
    'htttps:--outlook.developpez.com-faq-index.php?page=Configuration#Paras_FAI
    .Item("http:--schemas.microsoft.com-cdo-configuration-smtpserver") = "smtpsrv.fff.corp"
    .Update
End With

With iMsg
    Set .Configuration = iConf
    .To = "eee@fff.com"
    '.cc = "ddd@fff.com"
    .From = "ccc@fff.com"
    .Subject = "test Mail"
    .HTMLBody = "Bonjour,<br> Voici le fichier qui contient les données" & tab
    '.AddAttachment
    .Send
End With

End Sub

mais je coince aussi sur l'intégration de la sélection dans le corps du mail

Bonjour,

Une modif à essayer pour la première solution

Sub envoi_mail()

    Application.DisplayAlerts = False
    Application.ScreenUpdating = False

    ' On définit les variables
    Dim OL As Object, myItem As Object, wDoc As Object, rng As Object

    Set OL = CreateObject("Outlook.Application")
    Set myItem = OL.CreateItem(olMailItem)
    Set wDoc = myItem.GetInspector.WordEditor

    ' On prépare le mail en rentrant les paramètres : adresse des destinataires, en copie, objet du mail, corps du mail
    With myItem
        .To = "laurent.chantepie@revima.com"
        '.CC = "yyyyy@gmail.com"
        .Subject = "test envoi mail"
        .Display

    Set rng = wDoc.Content

    Sheets("tableau 1").Activate
        ' Copie du tableau 1
        Range("A12:AG53").CopyPicture
        wDoc.Application.Selection.Paste
        rng.InsertAfter vbNewLine & vbNewLine

    Sheets("tableau 2").Activate
        ' Copie du tableau 2
        Range("A12:AG53").CopyPicture
        wDoc.Application.Selection.Start = Len(.Body)
        wDoc.Application.Selection.End = wDoc.Application.Selection.Start
        wDoc.Application.Selection.Paste
        rng.InsertAfter vbNewLine & vbNewLine

    Sheets("tableau 3").Activate
        ' Copie du tableau 3
        Range("A12:AG53").CopyPicture
        wDoc.Application.Selection.Start = Len(.Body)
        wDoc.Application.Selection.End = wDoc.Application.Selection.Start
        wDoc.Application.Selection.Paste
        rng.InsertAfter vbNewLine & vbNewLine

c'est presque bon, reste la signature qui est en auto qui s'intègre entre tableau1 et 2 ensuite tous les tableaux se suivent bien même après envoi du mail !

Merci

Bonjour,

Une solution simple est de supprimer la signature avec cette instruction

        wDoc.Bookmarks("_MailAutoSig").Range.Delete

Merci de tes réponses rapides qui m'ont permis de résoudre mon pb.

J'ouvre un autre sujet pour l'autre idée.

Rechercher des sujets similaires à "envoi mail automatique vba"