Recevoir un message lorsque le mail est envoyé

Bonjour le forum, et meilleurs vœux à tous !

Je travaille sur une macro qui permet à l'utilisateur de créer un mail de relance à des clients.Comme je souhaite qu'il vérifie le mail avant envoi (ou le modifie), je termine le code par "display".

Je cherche à trouver un moyen de recevoir de VBA un message lorsque le mail est finalement envoyé, afin de proposer à l'utilisateur de passer au client suivant et de créer un nouveau mail, mais je ne trouve pas la solution.

Quelqu'un aurait-il une idée ? Je joins ci-dessous un bout du code.

Merci d'avance

Michael

With Sheets("CLIENT")

Set LeMail = CreateObject("Outlook.Application")

Set rng = Nothing

On Error Resume Next

Set rng = ActiveSheet.Range("A3:G" & lifin)


On Error GoTo 0

With LeMail.CreateItem(olMailItem)


.To = Range("I5")

.Subject = "RELANCE" & "-" & Range("C5") & " - " & Range("B5")

MsgBox ("Choisissez avec la souris et la touche Ctrl les destinataires CC du mail")


Set destCC = Application.InputBox _
("Sélectionner les destinataires CC avec la souris", , , , , , , 8)

destCC.Copy
Range("O10").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False

For Each cel In Range("O11:O20")

destCC = destCC + ";" + cel.Value

Next cel

.CC = destCC

.HTMLBody = "Bonjour," & "<br>" & "<br>" & "Au pointage de votre compte, nous constatons que vous restez nous devoir la somme de " & Range("G" & lifin) & " €" & ", portant sur les factures échues, ci-dessous :" & "<br>" & _
RangetoHTML(rng) & "<br>" & "Nous vous remercions d'avance de vérifier .... " & "<br>" & "Meilleures salutations"


.Display 'afficher le mail

End With

End With

Bonjour

Je travaille sur une macro qui permet à l'utilisateur de créer un mail de relance à des clients.Comme je souhaite qu'il vérifie le mail avant envoi (ou le modifie), je termine le code par "display".

Je cherche à trouver un moyen de recevoir de VBA un message lorsque le mail est finalement envoyé, afin de proposer à l'utilisateur de passer au client suivant et de créer un nouveau mail, mais je ne trouve pas la solution.

Quelqu'un aurait-il une idée ? Je joins ci-dessous un bout du code.

Utilise les balises </> pour mettre ton code fin qu'il soit plus lisible

La meilleur solution est de te mettre en copie cachée du mail en ajoutant cette ligne

.BCC = "moi@fai.fr"

Bonjour,

Vous pouvez utiliser une procédure événementielle d'Outlook pour redérouler un code quand le message sera envoyé.

Exemple avec ce code à insérer dans votre feuille "CLIENT"

Dim OlApp As Outlook.Application

Private WithEvents emails As Outlook.Items

Sub affichage_mail()
    Dim rng As Range

    With Me

        Set OlApp = CreateObject("Outlook.Application")      'création instance application outlook
        Set emails = OlApp.Session.GetDefaultFolder(olFolderSentMail).Items  'assignation évenements éléments envoyés

        Set rng = Nothing

        On Error Resume Next

        Set rng = .Range("A3:G" & lifin)

        On Error GoTo 0

        With OlApp.CreateItem(olMailItem)

            .To = Range("I5")

            .Subject = "RELANCE" & "-" & Range("C5") & " - " & Range("B5")

            MsgBox ("Choisissez avec la souris et la touche Ctrl les destinataires CC du mail")

            Set destCC = Application.InputBox _
            ("Sélectionner les destinataires CC avec la souris", , , , , , , 8)

            destCC.Copy
            Range("O10").Select

            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
            Application.CutCopyMode = False

            For Each cel In Range("O11:O20")

                destCC = destCC + ";" + cel.Value

            Next cel

            .CC = destCC

            somme = Me.Range("G3" & lifin)
            .HTMLBody = "Bonjour," & "<br>" & "<br>" & "Au pointage de votre compte, nous constatons que vous restez nous devoir la somme de " & somme & " €" & ", portant sur les factures échues, ci-dessous :" & "<br>" & _
            RangetoHTML(rng) & "<br>" & "Nous vous remercions d'avance de vérifier .... " & "<br>" & "Meilleures salutations"

            .Display 'afficher le mail

            End With

        End With

End Sub

Private Sub emails_ItemAdd(ByVal Item As Object)
    '------  Votre code après envoi du mail ici ----------------
End Sub

Bonjour Thev,

Merci beaucoup de votre retour

J'ai quelques petites questions avant d'essayer d'adapter mon code :

-Faut-il que je remplace LeMail par OlApp ?

-Est-ce que je recevrai une info me disant que le mail est parti, ou simplement votre code me "rendra la main" pour la suite du code ?

Michael

Faut-il que je remplace LeMail par OlApp ?

Oui, car la variable OlApp doit être déclarée au niveau du module de classe de votre feuille CLIENTS

Est-ce que je recevrai une info me disant que le mail est parti, ou simplement votre code me "rendra la main" pour la suite du code ?

Pour recevoir l'info que le mail est parti, adoptez la solution donnée par Steelson. La procédure événementielle vous "rendra la main" pour la suite du code. Vous pouvez évidemment combiner les deux.

Bonjour Thev,

J'ai adapté votre code, mais j'obtiens dès le lancement de la macro une erreur de compilation sur " WithEvents emails as Oulook.Items " :

"Attribut incorrect dans une procédure Sub ou Function"

Voyez-vous d'où peut venir le problème ? Merci

Michael

Re bonjour Thev,

Après divers essais, la macro ne bugge plus quand je mets "Private WithEvents as Outlook.Items" dans un module de classe, et pas dans la feuille CLIENT.

Mais le html.body ne fonctionne plus. Je l'ai désactivé provisoirement.

Et rien ne se passe quand le mail est vraiment envoyé (après avoir été affiché par .display)

Michael

Après divers essais, la macro ne bugge plus quand je mets "Private WithEvents as Outlook.Items" dans un module de classe, et pas dans la feuille CLIENT.

Le code associé à la feuille CLIENT est un module de classe, celui de la classe Worksheet. Vous n'avez nul besoin de créer un module de classe spécifique.

Ces 2 instructions

Dim OlApp As Outlook.Application

Private WithEvents emails As Outlook.Items

doivent être placées avant toute procédure SUB.

Fournissez éventuellement une copie anonymisée de votre fichier si vous n'arrivez pas à placer l'exemple de code fourni là où il faut.

Bonsoir Thev

Je peux vous l'envoyer en message privé ?

Cela fait beaucoup d'onglets et de données à anonymiser

Michael

je peux vous l'envoyer en message privé ?

Si cela vous arrange, oui et je respecterai alors la confidentialité.

Rechercher des sujets similaires à "recevoir message lorsque mail envoye"