Code VBA pour envoi de mail automatique en fonction de la date

Bonjour,

Je suis en train de plancher sur la mise en place d'un fichier Excel avec une macro VBA permettant l'envoi de mails en fonction de la date du jour à une adresse mail associé sur la même ligne dans le tableau.

L'idée c'est que ce fichier soit ouvert une fois par jour et que dès que la date du jour correspond à la date d'envoi du mails spécifié dans une colonne un mail soit envoyé à l'adresse de la ligne.

Je ne suis pas un grand connaisseur de VBA (je sais tout juste extraire des colonnes d'une feuille à une autre et encore !) mais je pensais réussir à me débrouiller mais là je bloque complètement...

D'autant que je n'ai aucune erreur qui ressort de mon code et rien ne se passe.

Si une personne aurait une idée de ce que j'ai fait de travers (peut être tout remarque on ne sais pas xD)

Je met en pièce jointe le fichier de test sur lequel je travaille et merci de votre indulgence (mon code risque peut être de piquer les yeux)

Merci.

Aversham

299envoi-mail.zip (13.20 Ko)

Bon début ... mais

Il n'a pas aimé du tout Date, il faut préciser ... et même évite d'appeler les zones Date qui est une fonction excel

Private Sub Workbook_Open()
If Range("Date").Value < Now() Then
    Range("Date").Value = Now()
    EnvoiMail
End If
End Sub

mais je ne comprends pas ce que tu souhaites, car ladite zone appelée Date est égale aujourdh'ui !!

ps, Date donne bien la date d'aujourd'hui, mais chez moi excel n'apprécie pas, j'ai remplacé par Now()

Merci pour ta réponse.

Par contre je ne comprends pas ce que tu veux dire, je n'ai pas de variable qui se nomme juste "Date".

J'ai justement nommé mes variables "date_envoi" et "date_jour" pour éviter ce problème.

Sub EnvoiMail()
    'définition des variables et du client de messagerie utilisé
    Feuil1.Select
    Dim date_jour As Long
    Dim date_envoi As Long
    Dim mail As String
    Dim lastrow As Long
    Dim i As Long
    Dim OLApplication As Outlook.Application, OLMail As Outlook.mailItem

Et j'ai mis une cellule avec la formule "=AUJOURDHUI()" pour qu'il me sorte la date du jour pour faire une comparaison avec les dates des lignes de la colonne "Date Envoi".

L'idée c'était de créer deux variables, une de référence avec la date du jour et une pour parcourir la liste de date pour l'envoi des mails.

En gros ça donnerai en l'exprimant verbalement : Si la date dans la colonne "Date envoi mail" est égale à la date dans la cellule "Date du jour" Alors on envoi un mail à l'adresse qui est sur la ligne dans la colonne "Mails"

Peut être que mon idée n'est pas la bonne, dans ma tête c'était logique mais ça ne l'est peut être que pour moi ^^

Merci pour ta réponse.

Par contre je ne comprends pas ce que tu veux dire, je n'ai pas de variable qui se nomme juste "Date".

J'ai justement nommé mes variables "date_envoi" et "date_jour" pour éviter ce problème.

C'est ici initialement

- dans la feuille cellule I1 nommée Date

- dans la macro

capture d ecran 152 capture d ecran 153

L'idée c'était de créer deux variables, une de référence avec la date du jour et une pour parcourir la liste de date pour l'envoi des mails.

En gros ça donnerai en l'exprimant verbalement : Si la date dans la colonne "Date envoi mail" est égale à la date dans la cellule "Date du jour" Alors on envoi un mail à l'adresse qui est sur la ligne dans la colonne "Mails"

Peut être que mon idée n'est pas la bonne, dans ma tête c'était logique mais ça ne l'est peut être que pour moi ^^

Si si ton idée est ok, mais dans ce cas mets dans Workbook_Open

Private Sub Workbook_Open()
    EnvoiMail
End Sub

Ah ok je viens de comprendre l'apparition de la variable Date.

Du coup j'ai modifié le Workbook mais ça ne résout pas mon problème, je n'ai toujours rien qui se passe ni d'erreurs affichées

Après est ce que le fait que la macro soit dans un module et pas sur la feuille pose problème ?

Enfin je suis déjà content que ma logique soit bonne reste plus qu'à trouver ce qui coince.

mail = Range("C1").Value
For i = 2 To lastrow
date_envoi = Range("F2").Value

comment les valeurs sont-elles modifiées pour chaque ligne

je te propose la correction suivante

For i = 2 To lastrow
mail = cells(i,"C").Value
date_envoi = cells(i,"F").Value

Non, il ne faut pas mettre mail entre guillemets

.To = "mail"

puisque ce n'est pas mail qui doit apparaître mais le contenu de la variable mail


enfin, si rien ne se passe, c'est que la condition n'est jamais trouvée

If date_envoi = date_jour Then

Merci pour ta réponse et tes correction.

Concernant la condition non trouvé, je pensais que c'était parce que la variable date_jour n'était pas ajouter dans la boucle, du coup j'ai essayé mais cela ne fonctionne pas.

Après j'ai laissé

date_jour = Range("I1").Value

comme il ne m'a pas laissé mettre

date_jour = cells("I1").Value

pour une raison que j'ignore...

Je ne comprends pas pourquoi il n'arrive pas à trouver la condition en fait

Regarde le jeu d'essai que tu as laissé : le jour en colonne F date_envoi n'est JAMAIS égal à aujourdhui() !

Je suis un boulet !!!

J'avais pas fait gaffe aux dates de ma colonne

Merci à toi ça fonctionne parfaitement maintenant

Rechercher des sujets similaires à "code vba envoi mail automatique fonction date"