Lancer une macro automatiquement 1 fois par semaine
alexpepe
-
5 avril 2016 à 11:15
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018
-
5 avril 2016 à 12:38
Bonjour à tous,
J'ai besoin de votre aide car je suis novice en VBA.
Je souhaiterai qu'une macro dans un tableur Excel s'active automatiquement 1 fois par semaine le vendredi matin par exemple.
La macro en question envoi un mail à une adresse définie en colonne E si la date inscrite en colonne B se situe entre 1 et 7 jours de plus qu'aujourd'hui et si en colonne G il n'y a pas de X (ce dernier point fait l'objet d'une autre question sur le forum : mettre un X si condition respectée).
Il faudrait donc que sans intervention manuelle, le vendredi matin la macro se lance, fasse l'analyse des dates, envoi le mail si besoin et se referme.
Le problème que je voit quand à ma demande autre que le code en lui même c'est comment lier le fait de faire un lancement de mail sans que personne n'intervienne. Je ne sais pas si c'est possible.
Merci à vous pour votre aide.
ps: pour infos voici le code de mon fichier
Sub TesteDate() 'envoie un mail si la date est dans 7 jours ou moins Dim sSujet, sBody, sAdresseMail As String 'chaines pour le sujet, corps, adresse d'envoi Dim duree As Date '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 = "B" ' et elles sont en colonne B ( 2 ième colonne)et les adresses mail sont en colonne E à côté
'initialisation des données du mail envoyé : sSujet = "Visite médical" sBody = "Votre agent doit passer sa visite médicale dans sept jours ou moins."
'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 = ActiveCell.Value - Now ' la date est dans la cellule active If duree <= 7 And duree > 0 Then 'la date est dans 7 jours ou moins par rapport à aujourd'hui sAdresseMail = ActiveCell.Offset(0, 3).Value 'l'adresse mail est dans trois colonne après offset (0,3)
' envoyer le mail : CDO_SendMail sSujet, sBody, sAdresseMail Else
End If
Next I
End Sub
Sub CDO_SendMail(ByVal sSujet As String, ByVal sBody As String, ByVal sAdresseMail As String) 'MARCHE IMPEC, sans demande de confirmation ;-))))) 'on peut préciser : le sujet, le corps , l'adresse mail, l'adresse de retour Dim OutApp As Object Dim OutMail As Object
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018220 Modifié par ucfoutu le 5/04/2016 à 17:06
Bonjour,
Qu'un autre utilisateur ou non soit présent sur l'application n'a aucune importance, dès lors que, comme avec Louis XVI, celui qui peut parler est celui qui peut faire. Et il y a toujours un qui "peut", forcément. REt il sera le seul à le pouvoir.
Problème (une fois de plus) de conception.
Une feuille "maj" dont une cellule (de ton choix) contient la date de dernière exécution de la macro.
On lit la valeur de cette cellule ===>> si date <= date du jour (Date) + 7 ===> on lance la macro puis on met dans cette cellule la date du jour + 7
Voilà voilà ...
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.