Envoi de mail via Outlook à date atteinte dans cellule Excel

Fermé
mlkgiosn Messages postés 45 Date d'inscription mercredi 28 janvier 2009 Statut Membre Dernière intervention 11 août 2021 - 14 déc. 2017 à 20:49
mlkgiosn Messages postés 45 Date d'inscription mercredi 28 janvier 2009 Statut Membre Dernière intervention 11 août 2021 - 20 déc. 2017 à 22:07
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.
A voir également:

2 réponses

ozone_ Messages postés 1518 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 2 juin 2023 478
Modifié le 14 déc. 2017 à 22:07
Salut,

L'argument Send est commenté dans ton code, est-ce fait exprés ?
Si non, c'est pour ça que le message ne part pas car il n'est pas lu par VBA.
Dé-commente cet argument et le message devrait s'envoyer.

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


De plus, tu voulais envoyer des messages sans passer par Excel, c'est faisable en passant simplement par Outlook.
A l'ouverture de ta messagerie, il va chercher dans ton fichier Excel si la date est arrivé à terme et alors enverra le mail.
C'est dans la même idée que ce code mais interprété directement dans Outlook.

1f u c4n r34d th1s u r34lly n33d t0 g37 l41d !
0
mlkgiosn Messages postés 45 Date d'inscription mercredi 28 janvier 2009 Statut Membre Dernière intervention 11 août 2021 3
20 déc. 2017 à 22:07
Merci pour la réponse, même non commenté, ça ne fonctionne pas, mais j'ai trouvé une alternative avec sendkeys"^s" (raccourci pour "envoyer" sur Outlook").

Par contre, j'ai une autre question, pour une macro qui n'a rien à voir, mais je demande ici pour ne pas créer un sujet supplémentaire :

Comment faire un "Sendkeys", qui envoie d'abord le contenu de A1, puis celui de A2, puis A3, et ainsi de suite ?
0