Macro VBA: mail auto avant échéance

alexpepe - Modifié par alexpepe le 30/03/2016 à 10:02
 alexpepe - 5 avril 2016 à 09:41
Bonjour à tous,

Je fais appel à votre aide car la je bloque sur du code VBA.

Pour mon travail j'ai un tableau de suivi des visites médicales qui comprend plusieurs données (jour de la visite colonne C, heure colonne D, agent concerné colonne E, le mail du responsable colonne F et une colonne pour savoir si la convocation est réalisée en colonne G.

Mon sujet est le suivant: j'aimerai qu'automatiquement sans que le fichier excel soit ouvert, il envoie un mail trois jours avant la date de visite à l'adresse mail du responsable pour lui faire un rappel.

J'ai sur ce forum trouvé un sujet qui correspond à ce problème mais le code ne fonctionne pas quand j'essaie de le mettre en forme pour mon tableau.

voici le code que j'ai actuellement dans mon fichier:
Option Explicit

Sub TesteDate()
'envoie un mail si la date est dépassée
Dim sSujet, sBody, sAdresseMail, sAdresseRetour As String 'chaines pour le sujet, corps, adresse d'envoi, adresse de retour
Dim duree As Long 'nbre de jours entre aujourd'hui et la date à tester
Dim Lig_Deb, Lig_Fin As Integer 'ligne de début, de fin
Dim sDates_Col, sMails_Col As String 'colonnes qui contiennent les dates à tester et les adresses mail
Dim I As Integer

'initialisation des constantes de la macro :
Lig_Deb = 2 'dans ma feuille Excel, les dates à tester commencent en ligne 2
sDates_Col = "C" ' et elles sont en colonne C ( 3 ième colonne)et les adresses mail sont en colonne D à côté

'initialisation des données du mail envoyé :
sSujet = "Visite médical"
sBody = "Votre agent doit passer sa visite médicale dans trois jours"
sAdresseRetour = "***@***"

'Ligne de fin =1ère cellule vide dans la colonne des dates
Lig_Fin = Val(Range(sDates_Col & CStr(Lig_Deb)).End(xlDown).Row)

' boucle de test dans la plage des dates (=> )
For I = Lig_Deb To Lig_Fin
Range(sDates_Col & CStr(I)).Select 'activer la cellule testée
duree = Now - ActiveCell.Value ' la date est dans la cellule active
If duree < 4 Then 'la date est dépassée
sAdresseMail = ActiveCell.Offset(0, 3).Value 'l'adresse mail est dans la colonne suivante offset (0,1)
'MsgBox ("Envoi de courrier à " & sAdresseMail)
' envoyer le mail :
CDO_SendMail sSujet, sBody, sAdresseMail, sAdresseRetour
Else
'MsgBox ("La date n'est pas atteinte")
End If

Next I

End Sub

Sub CDO_SendMail(ByVal sSujet As String, ByVal sBody As String, ByVal sAdresseMail As String, ByVal sAdresseRetour)
'MARCHE IMPEC, sans demande de confirmation ;-)))))
'on peut préciser : le sujet, le corps , l'adresse mail, l'adresse de retour
Dim iMsg As Object
Dim iConf As Object

Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")

With iMsg
.Configuration = iConf
.To = sAdresseMail
.Sender = sAdresseRetour 'adresse de l'expéditeur pour le rapport envoyé
.From = sAdresseRetour 'adresse de l'expéditeur du mail
.ReplyTo = sAdresseRetour 'adresse à laquelle sera envoyée la réponse
.CC = ""
.BCC = ""
.Subject = sSujet 'sujet du message
.TextBody = sBody 'corps du message
'.AddAttachment Fichier 'fichier joint
.DSNOptions 14 'confirmation demandée dans tous les cas (voir ci-dessous avec 14 8 + 4 + 2)
' (0=pas réponse ; 2=rapport si échec ; 4=rapport si réussi ; 8=rapport si délai)

' pour demander des confirmations de réception ou d'envoi :
.Fields("urn:schemas:mailheader:return-receipt-to") = sAdresseRetour
.Fields("urn:schemas:mailheader:disposition-notification-to") = sAdresseRetour
' Update fields
.Fields.Update

' envoi
.Send
End With

End Sub


Lorsque je lance la macro via un bouton que j'ai créé cela m'indique l'erreur suivante:
"Erreur d'exécution 438 : Propriété ou méthode non gérée par cet objet"

Le débogage m'envoie sur la ligne :
.DSNOptions 14 'confirmation demandée dans tous les cas (voir ci-dessous avec 14 8 + 4 + 2)


Merci à vous pour votre aide car la je bloque vraiment sachant que je suis plutôt novice en VBA.

2 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 30/03/2016 à 11:53
Bonjour,
Mon petit doigt me dit que tu as déjà (au moins) mal copié collé ...
La syntaxe d'une propriété ne saurait être le nom de cette propriété suivi d'un argument ...
On attribue une valeur à une propriété comme on le ferait avec n'importe quelle variable ...
.DSNOptions 14 est totalement incompréhensible

Il est bien évidemment possible que tu aies recopié une ligne mal écrite.
Ce que je t'ai dit juste au-dessus devrait te permettre alors de la corriger sans la moindre hésitation (si tu n'es pas qu'un copieur/colleur)

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Merci pour ta réponse rapide, en effet je l'ai vu après et j'ai rajouter le = sur le DSNOptions (en effet erreur d’inattention car logique), par contre nouvelle erreur "la valeur de configuration "SendUsing" est non valide".
Et le débogage m'affiche le ".Send" à la fin.
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
30 mars 2016 à 12:26
Bonjour
Peut-être une réponse à ton problème : http://www.commentcamarche.net/faq/36411-vb6-vba-envoi-mail-avec-l-objet-cdo
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 30/03/2016 à 12:50
Conclusion : ne jamais se contenter de recopier ce que l'on ne maîtrise pas totalement.
Je sais qui a écrit toutes ces "imprécisions". Un certain kbalist, n'est-ce-pas ? (et probablement lui-même un copieur/colleur)
Tout "cela" est du même type qu'un certain jeu, dans lequel la phrase originelle finit par être à ce point transformée qu'elle est tout-à-fait différente une fois arrivée à "destination" ...
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169 > ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018
30 mars 2016 à 12:56
Salut ucfoutu
Pomper sans comprendre c'est juste pomper
Pomper en comprenant c'est déjà commencer à coder
Amitiés
0
alexpepe > ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018
30 mars 2016 à 13:31
oui en effet c'est kbalist.
Effectivement c'est du copié collé mais j'ai essayer de le comprendre et l'adapter pour ma situation mais le code du mail n'est pas un code que j'ai déjà utilisé, d'où le fait que je n'ai pas repéré immédiatement le manque du = pour le DNS
0
alexpepe > vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024
30 mars 2016 à 13:36
merci pour le lien vb95, j'essaie de le comprendre, et si je vois bien c'est qu'il a fait la séparation entre la congif du message et la config de la boite mail. mail à la fin le ".Send" est le même. Du coup je ne vois pas pourquoi il bloque.
J'ai pris ce code d'envoi de mail car c'est celui qui était avec la première partie, mais je sais que de nombreux code d'envoi de mail existe, peut être est -il possible sinon d'en adapter un autre.
0
Rejoignez-nous