Envoi de mail via Outlook à date atteinte dans cellule Excel
mlkgiosn
Messages postés
45
Date d'inscription
Statut
Membre
Dernière intervention
-
mlkgiosn Messages postés 45 Date d'inscription Statut Membre Dernière intervention -
mlkgiosn Messages postés 45 Date d'inscription Statut Membre Dernière intervention -
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.
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.
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:
- Envoi de mail via Outlook à date atteinte dans cellule Excel
- Aller à la ligne dans une cellule excel - Guide
- Excel cellule couleur si condition texte - Guide
- Liste déroulante excel - Guide
- Proteger cellule excel - Guide
- Word et excel gratuit - Guide
2 réponses
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.
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 !
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 !
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 ?
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 ?