Mail à date atteinte ou rappel via Excel

Bonjour.

J'aimerai créer un fichier excel avec des dates, des adresses mail, les corps des messages et le sujets, respectivement dans 4 colonnes, puis créer une macro qui enverrait un mail via Outlook une fois la date correspondante atteinte.

J'ai quelques bases de programmation, mais en VBA je suis plutôt débutant. Cependant en piochant à droite à gauche, j'ai réussi à trouver un code qui fonctionne mais ne va pas "pas assez loin" (voir ci-dessous).

En fait lors de la récupération du mail il ne semple pas valider pas par "entrée" (du coup quand Outlook s'ouvre l'adresse mail est bien écrite dans le champs "destinataire" mais n'est pas validée, je ne sais pas si c'est clair).

Et le code ne semble pas envoyer le message, mais ça vient peut-être de la même chose justement.

Sub SendEmail()

Dim OutApp As Object
Dim OutMail As Object
Dim EmailSubject As String
Dim EmailSendTo As String
Dim MailBody As String

Set Rng = Range(Range("C1"), Range("C" & Rows.Count).End(xlUp))

For Each cell In Rng
If cell.Value <> "" Then

'Get Due Date
    Dte = cell.Value

'Get 2 days away by taking 2 days off cell Dte value
    MailDteNear = DateAdd("d", -2, Dte)

'Due date is the cell value
    MailDteDue = Dte

'Check 2 days away and send to column D address
    If Date = MailDteNear Then
    mail = True
    EmailSendTo = cell.Offset(0, 1).Value
    End If

'Check Due and send to column D & E address
    If Date = MailDteDue Then
    mail = True
    EmailSendTo = cell.Offset(0, 1).Value & "; " & cell.Offset(0, 2).Value
    End If

 If mail = True Then

'Subject string
    EmailSubject = Range("A1").Value 'Cell A1

'Mail Body
    MailBody = cell.Offset(0, -1).Value 'Column B

'Send Mail
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(o)
        With OutMail
            .Subject = EmailSubject
            .To = EmailSendTo
            '.bcc
            .Body = MailBody
            .Display
            '.send
        End With

        Set OutMail = Nothing
        Set OutApp = Nothing
        mail = False
        EmailSendTo = ""

 End If
 End If
Next

S'il est important de savoir le vrai but, en fait ça serait que le fichier contenant des dates d'expiration et permettant de prévenir une fois la date atteinte, ou même faire un rappel un peu avant.

L'idéal serait que cela puisse fonctionner même quand le fichier n'est pas ouvert, mais ça semble plus compliqué.

Merci d'avance pour votre aide.

Bonjour,

N'ayant pas le fichier, voici une base de travail

381mailing-simple.xlsm (14.67 Ko)

Merci beaucoup.

Par contre dès que je remplace le .display par .send, j'ai une erreur "run-time 287".

J'ignore pourquoi, je n'arrive pas à comprendre.

est-ce que les adresses mail sont correctes ? dans le jeu d'essai ce ne sont que des adresses mail inventées

est-ce que le mail s'affiche bien avec display ?

as-tu essayé avec display et ensuite d'envoier "manuellement" ?

est-ce que les adresses mail sont correctes ? dans le jeu d'essai ce ne sont que des adresses mail inventées

est-ce que le mail s'affiche bien avec display ?

as-tu essayé avec display et ensuite d'envoier "manuellement" ?

Alors, oui j'ai corrigé par des adresses mail correctes, et oui le mail s'affiche bien avec display.

Par contre je n'ai pas essayé d'afficher avec display et d'envoyer manuellement (enfin si par là tu veux bien dire simplement cliquer sur "Send" dans Outlook), pourquoi ? Cela pourrait ne pas fonctionner ?

Bonjour,

difficile à résoudre voici ce que l'on peut trouver sur cette erreur assez courante (que personnellement je n'ai jamais rencontrée)

Its an error returned by the POP or SMTP of outlook.

Cela dit, cela peut très bien fonctionner manuellement quand même !!

Car l'une des solutions comme ici serait d'ajouter une temporisation (bien que ce soit access dans ce cas)

https://stackoverflow.com/questions/36328068/runtime-error-287-sending-emails-through-outlook-using-vba-in-access

essaie alors d'ajouter

Application.Wait Now + TimeValue("0:00:01")

avant le .send

OK. J'essaie des que je peux (donc lundi, car c'est un document professionnel et je n'y ai pas accès avant), mais en effet ça pourrait fonctionner car l'adresse mail met du temps à être validée, ce qui expliquerait que la macro n'envoie pas le mail.

L'ajout de la temporisation ne corrigeait pas le problème, mais du coup, à force de bidouiller, j'ai réussi à trouver quelque chose qui fonctionne (en revanche, j'aimerai savoir s'il y a un moyen que cela fonctionne même avec Outlook fermé, et aussi avec Excel fermé d'ailleurs, dis comme ça je dirais que c'est impossible, mais je préfère demander quand même).

Je mets le code ci-dessous (je préviens, c'est vraiment du "bricolage", mais bon, c'est brouillon pour l'instant) :

Option Explicit
Sub envoi()

Dim messagerie As Object
Dim email As Object
Dim cel As Range

Set messagerie = CreateObject("Outlook.Application")

For Each cel In Range("A2:A" & Range("A1").End(xlDown).Row)

        Set email = messagerie.CreateItem(0)

        With email
            .to = cel
            .Subject = "mettre ici le titre du mail"
            .body = Range("B2") + Range("E5")
            .ReadReceiptRequested = False
            .display
            Application.Wait (Now + TimeValue("0:00:01"))
            If Range("F2") = DateAdd("d", 2, Date) Then
            Application.Wait (Now + TimeValue("0:00:01"))
            Application.SendKeys "%s"
            Else
            Application.Wait (Now + TimeValue("0:00:01"))
            Application.SendKeys "%{F4}"
            Application.SendKeys "{ENTER}"
            Application.Wait (Now + TimeValue("0:00:01"))
            Application.SendKeys "%{F4}"
            Application.SendKeys "{ENTER}"
            End If
        End With

        Set email = Nothing

Next cel

Set messagerie = Nothing

End Sub

Avec Excel fermé, je ne vois pas comment personnellement !

Outlook fermé = ok, il devrait s'ouvrir avec .display !

Avec Excel fermé, je ne vois pas comment personnellement !

Outlook fermé = ok, il devrait s'ouvrir avec .display !

Oui, la question paraît conne comme ça d'ailleurs lol.

Rechercher des sujets similaires à "mail date atteinte rappel via"