Email outlook envoyé - VBA

Bonjour,

Je vous écris car je fais une macro d envois automatiques d emails. J'aimerais savoir comment on fait pour savoir si l'email est bien envoyé ?

Si le collaborateur ferme la fenêtre, Outlook l email n'est donc pas envoye. J'aimerais alors pouvoir afficher un message "Votre e-mail n'est pas envoyé" si on n envoie pas l email et qu'on ferme alors la fenêtre Outlook.

Comment faire ? Merci bien !

Voici le code... Merci pour votre aide !

... 
On Error Resume Next
        Do
            DoEvents

        Loop Until MonMessage.Sent = True

        If (MonMessage.Sent = True And MonMessge.Closed = True) Then

            Sheets(MaFeuille).Activate
            Range("B4").Select

            MsgBox ("Vous avez envoyé l'Email.")
            Sheets(MaFeuille).Activate
            Range("B4").Select

        ElseIf (MonMessage.Sent = False And MonMessage.Closed = True) Then

            MsgBox ("Attention, vous n'avez pas envoyé l'Email !")
            Sheets(MaFeuille).Activate
            Range("B4").Select

        End If

J'aimerais prendre en considération les 2 cas suivants :

- Le fait que le collaborateur appuie sur "envoyer" afin d'envoyer l'Email -- > Ecriture de logs et message avertissant l'utilisateur de l'email envoyé

-Le fait qu'il ferme la fenetre Outlook de l'email Ou quelconque raison qui n'envoie pas l'email --> Message avertissant l'utilisateur de l'email non envoyé.

Merci bien :)

Bonsoir,

Pour cela, il faut passer par les événements OutLook, ci_dessous exemple de code à insérer dans une feuille ou dans ThisWorkbook :

Dim email_envoyé As Boolean

Private WithEvents OlApp As Outlook.Application
Private WithEvents email As Outlook.MailItem

Sub affichage_mail()

    Set OlApp = CreateObject("Outlook.Application")                         'création instance application outlook

    email_envoyé = False
    With OlApp.CreateItem(olMailItem)
        .To = "xxxxx@domaine"
        .Subject = "sujet"

        .Display 'afficher le mail
    End With

End Sub

Private Sub OlApp_ItemLoad(ByVal item As Object)
    If item.Class <> olMail Then Exit Sub

    'assignation variable objet email pour activation des evts email
    Set email = item
End Sub

Private Sub email_Send(Cancel As Boolean)
    email_envoyé = True
End Sub

Private Sub email_Close(Cancel As Boolean)

    AppActivate ThisWorkbook.Name
    If email_envoyé Then MsgBox "mail envoyé" _
    Else MsgBox "mail non envoyé"

End Sub

Bonjour, Merci pour la réponse mais ca ne marche pas chez moi...

Comment faire ? Merci.

Merci pour la réponse mais ca ne marche pas chez moi...
Si vous n'êtes pas plus précis sur ce qui ne marche pas et sans fichier exemple, impossible de vous aider.

Sheets("LOGS").Activate

On Error Resume Next
Do
      DoEvents
Loop Until MonMessage.Sent = True

If Err.Number <> 0 Then

     If MonMessage.Sent = True And MonMessage.Closed = True Then

           'Référence Globe
           Range("A" & DerniereLigne_Logs + 1).Value = Reference_Globe

           'Zone
           Range("B" & DerniereLigne_Logs + 1).Value = MaFeuille

           'Code Dépositaire
           Range("C" & DerniereLigne_Logs + 1).Value = Depositaire

           'Type de Relance
           Range("D" & DerniereLigne_Logs + 1).Value = "Relance Contrepartie"

           'Date
           Range("E" & DerniereLigne_Logs + 1).Value = Now

           'Collaborateur
           Range("F" & DerniereLigne_Logs + 1).Value = "@" & UCase(Environ("username")

          Sheets(MaFeuille).Activate
          Range("B4").Select

          MsgBox ("Vous avez envoyé l'Email.")
          Sheets(MaFeuille).Activate
          Range("B4").Select

          Exit Sub

      ElseIf MonMessage.Sent = False And MonMessage.Closed = True Then

          MsgBox ("Votre email n'a pas pu être envoyé. Merci de ressayer ultérieurement.")
          Exit Sub

      End If

End If

Désolé. Je souhaite donc pouvoir écrire des logs quand l'email est bien envoyé (fenetre Outlook fermée et email envoyé).

Par contre ici quand je veux fermer l'email, j'arrive à fermer l'email mais je n'ai pas la main... Je pense que c'est dû à la boucle Loop.

Merci pour votre aide.

Vous ne fournissez que des extraits de code et non un fichier exemple. Je ne vois pas où vous avez essayé d'appliquer mon code.

Par exemple, avec votre instruction

Sheets("LOGS").Activate

vous lancerez la création du mail si vous mettez mon code dans votre feuille LOGS avec la procédure d'envoi du mail

Dim email_envoyé As Boolean

Private WithEvents OlApp As Outlook.Application
Private WithEvents email As Outlook.MailItem

Private Sub Worksheet_Activate()
    '// procédure de création de votre mail

    Set OlApp = CreateObject("Outlook.Application") 'création instance application outlook

    With OlApp.CreateItem(olMailItem)
        .To = "xxxxx@domaine"
        .Subject = "sujet"

        .Display 'afficher le mail
    End With

End Sub

Private Sub OlApp_ItemLoad(ByVal item As Object)
    If item.Class <> olMail Then Exit Sub

    'assignation variable objet email pour activation des evts email
    Set email = item
End Sub

Private Sub email_Send(Cancel As Boolean)
    email_envoyé = True

    'Référence Globe
     Range("A" & DerniereLigne_Logs + 1).Value = Reference_Globe

     'Zone
     Range("B" & DerniereLigne_Logs + 1).Value = MaFeuille

     'Code Dépositaire
     Range("C" & DerniereLigne_Logs + 1).Value = Depositaire

     'Type de Relance
     Range("D" & DerniereLigne_Logs + 1).Value = "Relance Contrepartie"

     'Date
     Range("E" & DerniereLigne_Logs + 1).Value = Now

     'Collaborateur
     Range("F" & DerniereLigne_Logs + 1).Value = "@" & UCase(Environ("username"))

    AppActivate ThisWorkbook.Name
    MsgBox ("Vous avez envoyé l'Email.")
    Sheets(MaFeuille).Activate
    Range("B4").Select

End Sub

Private Sub email_Close(Cancel As Boolean)

    AppActivate ThisWorkbook.Name
    If Not email_envoyé Then MsgBox ("Votre email n'a pas pu être envoyé. Merci de ressayer ultérieurement.")

End Sub

Bonjour,

J'arrive a envoyer les emails. je n'arrive pas à écrire les Logs suite à l'envoi ou non de l'email.

Je ne sais pas ou mettre le code

Private Sub email_Close

et

Private Sub email_Send

au bon endroit... pour pouvoir alors avoir des messages suite aux events...

J'ai ça dans mon module d'envoi d'email mais ca ne fait rien... En fait je ne maitrise pas les events Outlook en vba.

   
End Sub

Private Sub OlApp_ItemLoad(ByVal item As Object)
    If item.Class <> olMail Then Exit Sub

    'assignation variable objet email pour activation des evts email
    Set MonMessage = item
End Sub

Private Sub email_Send(Cancel As Boolean)
    email_envoyé = True
End Sub

Private Sub email_Close(Cancel As Boolean)

    AppActivate ThisWorkbook.Name
    If email_envoyé Then MsgBox "mail envoyé" _
    Else MsgBox "mail non envoyé"

End Sub

Merci pour votre aide.

Je ne sais pas ou mettre le code
Ce code est à mettre dans un module objet (ThisWorkBook ou une de vos feuilles) et non dans un module général du dossier modules. Je vous ai fourni un exemple pour votre feuille "Logs" . Votre module d'envoi du mail doit être également dans le code de la feuille et la référence à la bibliothèque Outlook cochée.

Pour appeler le module d'envoi du mail, vous avez 2 solutions soit :
- le mettre dans la procédure événementielle d'activation de la feuille : Private Sub Worksheet_Activate()
- créer une procédure publique dans la feuille : Sub Envoi_Mail() qui peut être appelée via l'objet Feuille correspondant à votre nom de feuille. Par exemple, si vous avez Feuil5 (Logs), vous pouvez utiliser l'instruction : Call Feuil5.Envoi_Mail

Bonjour,

ci-joint un exemple d'envoi de mail avec les infos que vous avez communiquées

10exemple-mail.xlsm (24.85 Ko)

ci-dessous code final

Dim email_envoyé As Boolean

Dim MaFeuille As Worksheet

Private WithEvents OlApp As Outlook.Application
Private WithEvents email As Outlook.MailItem

Sub envoi_mail(sh As Worksheet)

    Set MaFeuille = sh

    '// procédure de création de votre mail

    Set OlApp = CreateObject("Outlook.Application") 'création instance application outlook

    With OlApp.CreateItem(olMailItem)
        .To = "xxxxx@domaine"
        .Subject = "sujet"

        .Display 'afficher le mail
    End With

End Sub

Private Sub OlApp_ItemLoad(ByVal item As Object)
    If item.Class <> olMail Then Exit Sub

    'assignation variable objet email pour activation des evts email
    Set email = item
End Sub

Private Sub email_Send(Cancel As Boolean)
    Dim DerniereLigne_Logs As Long

    email_envoyé = True

    'Dernière ligne de la feuille
     DerniereLigne_Logs = Cells.Find("*", SearchDirection:=xlPrevious).Row

    'Référence Globe
     Range("A" & DerniereLigne_Logs + 1).Value = Reference_Globe

     'Zone
     Range("B" & DerniereLigne_Logs + 1).Value = MaFeuille.Name

     'Code Dépositaire
     Range("C" & DerniereLigne_Logs + 1).Value = Depositaire

     'Type de Relance
     Range("D" & DerniereLigne_Logs + 1).Value = "Relance Contrepartie"

     'Date
     Range("E" & DerniereLigne_Logs + 1).Value = Now

     'Collaborateur
     Range("F" & DerniereLigne_Logs + 1).Value = "@" & UCase(Environ("username"))

    MaFeuille.Activate
    MaFeuille.Range("B4").Select

End Sub

Private Sub email_Unload()

    If email_envoyé Then
         MsgBox ("Vous avez envoyé l'Email.")
    Else
        MsgBox ("Votre email n'a pas pu être envoyé. Merci de ressayer ultérieurement.")
    End If

End Sub

Bonjour,

Je vous remercie pour votre message mais il y a quelque chose que je ne comprends pas.

J'ai 3 modules différents pour les envois d'Email (Email Banque, Email CLient etc...) et j'ai des boutons sur chaque feuille Excel. Depuis n'importe qu'elle feuille on retrouve ces 3 boutons. Les différentes feuilles sont des périmètres (Europe, US etc...)

Peut-on adapter votre code à mon besoin c'est a dire adapter a mes 3 différents modules pour la création des LOGS dès qu'un Email est envoyé ou non ?

Merci bien.

Je viens de voir en détail votre code. Vous créez l'email dans la Feuil5 "LOGS".

Moi je crée les Email dans des modules bien séparés. Comment je peux adapter votre code à mon besoin ?

Merci bien :)

Moi je crée les Email dans des modules bien séparés. Comment je peux adapter votre code à mon besoin ?

Il suffit dans la feuille "Logs" de rendre le module d'envoi de mail entièrement paramétrable, ce qui vous permet son appel de n'importe quelle autre feuille.

ci-dessous exemple :

5exemple-mail2.xlsm (28.73 Ko)

Merci pour le fichier. Je vois très bien. Mais C'est a dire que comme j'ai 3 macro d'envoi d'Email différentes, comment je fais pour que quand j'appuie sur le bouton qui execute la macro "Envoi_Email_Banque" ça fasse le relai avec la macro qui est sur la feuille "LOGS" ?

C'est à dire que pour chaque type d'Email (une des 3 macros suivant le cas, relance banque, client etc...) ca fasse le lien avec la macro dans la feuille LOGS. Comment faire ?

Merci bien

Please ??

Par exemple, dans votre macro "Envoi_Email_Banque"', vous supprimez toutes les références à Outlook et vous appelez la macro présente dans "Logs" en lui passant les paramètres nécessaires. Ci-dessous exemple de code :

Sub envoi_banque()

    destinataire = "xxxxxx@dddddd"
    personnes_en_copie = "aaaaaaaaa@dddddd;bbbbbbbbbbb@dddddd"
    personnes_en_copie_cachée = "cccccccccc@dddddd"
    Objet = "relance"
    Contenu = "Veuillez nous régler ..."

    Feuil5.envoi_mail ActiveSheet, destinataire, personnes_en_copie, personnes_en_copie_cachée, Objet, Contenu

End Sub

Fournissez un exemple de votre macro "Envoi_Email_Banque" et vous aurez une meilleure réponse.

Voici la macro pour l'envoi à la Contrepartie

Sub Creation_Email_Contrepartie_Groupe()

For i = 0 To Tableau_Lignes_Operations_Selectionnees.Count - 1

    'Récupération des Données pour chaque opération
    Call Recuperation_DATAS_Operations

    'SSI CACEIS
    Call SSI_CACEIS

    Donnees_Financieres_Header = "<table><style>th, td {padding: 5px; border: 1px solid black; border-collapse: collapse;}, th, td {font-size:15px}</style><thead>" & _
                                    "<th bgcolor='#B0091B'; align='center'; colspan='12'; style='color:white'>" & "Financial DATA" & "</th>" & _
                                        "<tr bgcolor='#F2DCDB'>" & _
                                        "<th align='center'>" & "Motive of non-matching" & "</th>" & _
                                        "<th align='center'>" & "Settlement Type" & "</th>" & _
                                        "<th align='center'>" & "Direction" & "</th>" & _
                                        "<th align='center'>" & "ISIN" & "</th>" & _
                                        "<th align='center'>" & "Quantity" & "</th>" & _
                                        "<th align='center'>" & "Amount" & "</th>" & _
                                        "<th align='center'>" & "Price" & "</th>" & _
                                        "<th align='center'>" & "Currency" & "</th>" & _
                                        "<th align='center'>" & "Intern Status" & "</th>" & _
                                        "<th align='center'>" & "Market Status" & "</th>" & _
                                        "<th align='center'>" & "Trade Date" & "</th>" & _
                                        "<th align='center'>" & "Value Date" & "</th>" & _
                                    "</tr><tbody>"

    Donnees_Financieres = "<td bgcolor='white'; align='left'>" & Motif_Non_Matching & "</td>" & _
                          "<td bgcolor='white'; align='left'>" & Settlement_Type & "</td>" & _
                          "<td bgcolor='white'; align='left'>" & Direction & "</td>" & _
                          "<td bgcolor='white'; align='left'>" & Code_ISIN & "</td>" & _
                          "<td bgcolor='white'; align='left'>" & Quantite & "</td>" & _
                          "<td bgcolor='white'; align='left'>" & Montant_RL & "</td>" & _
                          "<td bgcolor='white'; align='left'>" & Cours_RL & "</td>" & _
                          "<td bgcolor='white'; align='left'>" & Devise & "</td>" & _
                          "<td bgcolor='white'; align='left'>" & Statut_Interne & "</td>" & _
                          "<td bgcolor='white'; align='left'>" & Statut_Marche & "</td>" & _
                          "<td bgcolor='white'; align='left'>" & TD & "</td>" & _
                          "<td bgcolor='white'; align='left'>" & DTH & "</td>" & _
                          "</thead></table>"

    Ma_Trade_Tableau = Donnees_Financieres_Header & Donnees_Financieres

    Mise_En_Forme_SSI_CACEIS = "<table><style> td {padding: 5px;border: 5px solid black; border-style:none}, th, td {font-size:15px}</style>" & _
                                "<th bgcolor='#B0091B'; align='center'; colspan='4'; style='color:white'>" & "CACEIS's SSI's" & "</th>" & _
                                "<tr style=font-size:15px>" & _
                                    "<td bgcolor='#F2DCDB'; align='left'><b>" & "BUYER/SELLER:" & "</td>" & _
                                    "<td bgcolor='#F2DCDB'; align='left'><b>" & "DEAG/REAG:" & "</td>" & _
                                    "<td bgcolor='#F2DCDB'; align='left'><b>" & "NOSTRO AC:" & "</td>" & _
                                    "<td bgcolor='#F2DCDB'; align='left'><b>" & "PSET:" & "</td>" & _
                                "</tr>" & _
                                "<tr style=font-size:15px>" & _
                                    "<td bgcolor='#F2DCDB'; align='left'>" & BUYER_SELLER_CACEIS & "</td>" & _
                                    "<td bgcolor='#F2DCDB'; align='left'>" & DEAG_REAG_CACEIS & "</td>" & _
                                    "<td bgcolor='#F2DCDB'; align='left'>" & Compte_NOSTRO & "</td>" & _
                                    "<td bgcolor='#F2DCDB'; align='left'>" & PSET_CODE & "</td>" & _
                                "</tr></table><br>"

    'Nous sommes face à la CP
    Broker_Facing = "<table><style>td {padding: 5px;border: 5px solid black; border-style:none}, th, td {font-size:15px}</style>" & _
                        "<th bgcolor='#B0091B'; align='center'; colspan='4'; style='color:white'>" & "Counterpartie's SSI's" & "</th>" & _
                        "<tr style=font-size:15px>" & _
                            "<td bgcolor='#F2DCDB'; align='left'><b>" & "BUYER/SELLER:" & "</b></td>" & _
                            "<td bgcolor='#F2DCDB'; align='left'>" & BUYER_SELLER_CODE_BROKER & "</td>" & _
                            "<td bgcolor='#F2DCDB'; align='left'><b>" & "BUYER/SELLER AC:" & "</b></td>" & _
                            "<td bgcolor='#F2DCDB'; align='left'>" & BUYER_SELLER_COMPTE_BROKER & "</td>" & _
                        "</tr>" & _
                        "<tr style=font-size:15px>" & _
                            "<td bgcolor='#F2DCDB'; align='left'><b>" & "DEAG/REAG:" & "</b></td>" & _
                            "<td bgcolor='#F2DCDB'; align='left'>" & DEAG_REAG_CODE_BROKER & "</td>" & _
                            "<td bgcolor='#F2DCDB'; align='left'><b>" & "DEAG/REAG AC:" & "</b></td>" & _
                            "<td bgcolor='#F2DCDB'; align='left'>" & DEAG_REAG_COMPTE_BROKER & "</td>" & _
                        "</tr>" & _
                        "<tr style=font-size:15px>" & _
                            "<td bgcolor='#F2DCDB'; align='left'><b>" & "PSET:" & "</b></td>" & _
                            "<td bgcolor='#F2DCDB'; align='left'>" & PSET_CODE & "</td>" & _
                            "<td bgcolor='#F2DCDB';>" & "</td>" & _
                            "<td bgcolor='#F2DCDB';>" & "</td>" & _
                        "</tr></th></table>" & _
                        "<br>----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br><br>"

    Mon_Corps_Email = Mon_Corps_Email & Ma_Trade_Tableau & "<br><u>Our SSI'S are:</u>" & Mise_En_Forme_SSI_CACEIS & "<u>We are Facing:</u>" & Broker_Facing

Next

'Paramétrage et création de l'Email
Set MaMessagerie = CreateObject("Outlook.Application")
Set MonMessage = MaMessagerie.CreateItem(0)

'Affichage du message pour pouvoir faire afficher signature collaborateur
With MonMessage
    MonMessage.Display
End With

MaSignature = MonMessage.HTMLBody

With MonMessage

    'Paramétrage de la boîte d'Email d'envoi
    If MaFeuille = "Europe" Or MaFeuille = "Europe_PM" Or MaFeuille = "Espagne" Or MaFeuille = "Espagne_PM" Or MaFeuille = "UK" Or MaFeuille = "UK_PM" Then
        .SentOnBehalfOfName = "Bk-Sett-Intl-Europe@caceis.com"
    ElseIf MaFeuille = "Afrique" Or MaFeuille = "Afrique_PM" Or MaFeuille = "Asie" Or MaFeuille = "Asie_PM" Or MaFeuille = "MIDDLE_EAST" Or MaFeuille = "MIDDLE_EAST_PM" Then
        .SentOnBehalfOfName = "Bk-Sett-AsianAndRWMarkets@caceis.com"
    ElseIf MaFeuille = "LATAM" Or MaFeuille = "LATAM_PM" Or MaFeuille = "NORTH_AM" Or MaFeuille = "NORTH_AM_PM" Then
        .SentOnBehalfOfName = "Bk-Sett-AllAmericanMarkets@caceis.com"
    End If

    'Paramétrage de l'Email destinataire
    .To = "yoel.touil@caceis.com"

    'Objet de l'Email
    Call Objet_Email

    'Formule de Politesse au début de l'Email
    Formule_Politesse_Debut = "<p style=font-size:15px; face='Calibri';>" & "Hello," & "<br><br>"

    'Raison de l'envoi de l'Email
    Raison_Envoi_Email = "You will find below a list of pending/failing trades we have with you." & "<br><br>" & _
                         "1. In case of motive CP missing, please check and advise whether you recognize the trade." & "<br>" & _
                         "2. In case of motive CP short or on-hold, please take necessary action to deliver us the securities or release your instruction." & "<br><br>" & _
                         "Should you not be right contact please forward this request to the correct team."

    'Formule de Politesse à la fin de l'Email
    Formule_Politesse_Fin = "Please, check and advise," & "<br><br>" & "Best regards," & "</p>"

    'Corps de l'Email
    .HTMLBody = Formule_Politesse_Debut & Raison_Envoi_Email & Mon_Corps_Email & Formule_Politesse_Fin & MaSignature

    'Affichage de l'Email
    .Display

    'Désactiver de la mémoire l'Application Outlook
    Set MaMessagerie = Nothing

End With

End Sub

C'est a dire que je n'arrive pas a adapter votre code a mon probleme.

Merci bien :)

Bonjour,

Je vous avoue avoir cherché comment faire mais je n'y arrive pas.

J'ai 3 macros différentes dans 3 modules différents qui créent les Emails. Je n'arrive pas a le relier avec les LOGS...

Bonjour,

Question 1 : Quel est le nom de l'objet feuille associé à votre feuille LOGS ? Il figure dans l'éditeur VBA: Feuil?(LOGS).

Question2: Fournissez-moi cette procédure : Call Objet_Email

Réponse dans l'après-midi

Bonjour, c'est "Feuil37"

En faite j'ai bien compris ce que vous faite mais moi j'utilise 3 modules différents pour la creation des emails. Ils ne sont pas fait a l'interieur de la feuille LOGS.

Y a til un possibilite de faire appel a mes macros de creation d'email depuis la Feuille LOGS ?

Sub Objet_Email()

    '*************************************************************************************************
    'On parcourt toutes les opérations de la sélection et on regarde si le code dépositaire est unique
    '*************************************************************************************************
    Code_Depositaire_First = Replace(Cells(Tableau_Lignes_Operations_Selectionnees(0), 19).Value, " ", vbNullString)
    For m = 1 To Tableau_Lignes_Operations_Selectionnees.Count - 1

        '***************************************************************************************************************
        'Si Codes Dépositaires uniques lors de la sélection, l'objet de l'Email est vraiment personnalisé avec le marché
        'Si Codes Dépositaires différents lors de la sélection, l'objet de l'Email n'est pas personnalié
        '***************************************************************************************************************
        If Replace(Cells(Tableau_Lignes_Operations_Selectionnees(m), 19).Value, " ", vbNullString) <> Code_Depositaire_First Then
            Objet = "UNMATCHED  "
        Else
            Objet = "UNMATCHED  " & Market_Name & "  " & i & " TRADES"
        End If
    Next

End Sub

Merci

Rechercher des sujets similaires à "email outlook envoye vba"