Bonjour, et bon dimanche,
alors j’ai un fichier partager qui s’ouvre automatiquement après minuit tout les jours grâce au planificateur Windows pour l’envoie automatique d’un mail, qui part a chaque ouverture du fichier, je suppose qu’il existe une façon de faire en VBA de commander la fermeture de ce fichier, jusque la pas de soucis particulier, la ou ça se corse c’est que le dit mail ne devrais s’envoyé qu’une seule fois par jour, il y a déjà une macro pour un envoie mail en cas de cagnotte a zéro
ce qu’il me faudrait c’est une modif de la macro (commande ) déjà dispo dans le même style que celle pour la cagnotte (déjà dispo aussi) qui une fois le mai envoyé rajoute un chiffre dans la cellule par exemple B2 de l’onglet Commande (B1 étant déjà utilisé pour l’autre macro) pour éviter le renvoie a chaque fois que j’ouvre mon fichier le jour même, ce qu’il faudrait aussi c’est que avant minuit le même jour une macro va vider cette cellule et fermé le fichier (l’ouverture je sais faire en automatique avec le planificateur Windows) et l’enregistré pour permettre après l’ouverture le jour suivant l’envoie du mail .
J’ai rajouté dans la procédure « CommandPain » une ligne de code pour alimenter la cellule B2 de l’onglet « Commande »
A chaque envoie de mail la cellule est alimentée par la date du jour de cet envoi
Ce qui a pour effet lorsque cette cellule a été enrichi de la date de la journée en cours au moment de cet envoi par des lignes de code en début de traitement tant que la date n’a pas évolué d’interdire un nouvel envoi
Ainsi l’envoi ne pourra avoir lieu que le lendemain ou les jours après tant qu’un nouvel envoi n’a pas été effectué
Il va de soi que le fichier doit être enregistré avant sa fermeture pour conserver la donnée en cellule B2 onglet « Commande »
Testes et dis moi
Salut FFO,
en soit c’est ce que je voulais, mais le lendemain la date en cellule B2 restera sur la date de la veille ou se videra, parce que tant que cette cellule contient une date, dans le code de la macro la cellule devrait être vide, de ce que je comprends !
dans tout les cas je vais appliquer ta solution a mon fichier et j’aurais ma réponse demain si ça fonctionne comme prévue.
Citation
If Sheets(« Commande »).Range(« B2 ») <> « » Then <Ici la macro vérifie si la cellule B2 est vide et exécute l’envoie du mail>
If Sheets(« Commande »).Range(« B2 ») = Date Then
Exit Sub
End If
End If
Set MaMessagerie = CreateObject(« Outlook.Application »)
Set MonMessage = MaMessagerie.createitem(0)
MonMessage.SentOnBehalfOfName = « » '********* ADRESSE MAIL EXPEDITEUR **************
'MonMessage.To = « » '******* ADRESSE MAIL DESTIBATAIRE *********
'MonMessage.To = « » '******* ADRESSE MAIL TESTE *********
MonMessage.Subject = « Commande BaguetteBox » '******* OBJET DU MAIL *******
MonMessage.body = Contenu
MonMessage.send
Set MaMessagerie = Nothing
Sheets(« Commande »).Range(« B2 ») = Date
'MsgBox « Le Mail a bien été envoyé » ‹ ********* MESSAGE DE CONFIRMATION D’ENVOI MAIL ************** ›
« en soit c’est ce que je voulais, mais le lendemain la date en cellule B2 restera sur la date de la veille ou se videra, parce que tant que cette cellule contient une date, dans le code de la macro la cellule devrait être vide, de ce que je comprends ! »
Sans intervention manuelle la cellule B2 restera avec la date de la veille
Cette partie de code va réagir en conséquence :
If Sheets(« Commande »).Range(« B2 ») <> « » Then <Ici la macro vérifie si la cellule B2 est vide et exécute l’envoie du mail>
If Sheets(« Commande »).Range(« B2 ») = Date Then
Exit Sub
End If
Avec cette partie on vérifie la présence d une donnée en cellule B2
If Sheets(« Commande »).Range(« B2 ») <> « »
Car si celle-ci est vide il ne faut pas exécuter les lignes qui suivent pour 2 raisons :
La ligne qui suit ne pourrait s exécuter sans bug
If Sheets(« Commande »).Range(« B2 ») = Date Then
De plus la sortie du traitement de l envoi du mail ne doit pas être effectuée car la cellule B2 est vide
Si donc la cellule B2 est non vide
if Sheets(« Commande »).Range(« B2 ») <> « »
Et celle-ci est égale à la date du jour
If Sheets(« Commande »).Range(« B2 ») = Date Then
Alors le traitement de l envoi du mail est arrêté
Exit Sub
En fin de code si l envoi du mail est effectué cette dernière ligne mets la date du jour en cellule B2
Sheets(« Commande »).Range(« B2 ») = Date
Voilà pour les explications et le fonctionnement
Fais moi un retour demain sur le comportement de cette évolution
a l’ouverture du fichier la macro vérifie si la cellule est vide!
si la cellule est vide le mail s’envoie,
si la cellule est « non vide » la macro s’arrête sans envoyé de mail…
et tant que moi je ne vide pas la cellule en manuel le mail ne partira pas
parce que dans tes explication je n’arrive pas à comprendre
est il possible de crée une macro qui ne s’exécute qu’à une heure précise ?
a ce moment il faut juste la macro « commande pain » qui s’envoie lorsque j’ai planifier son ouverture a 00h05 affiche « 1 » dans la cellule B2 lorsque le mail est parti, et cette valeur devras resté afficher jusqu’à ce qu’une deuxième macro, sachant que le fichier seras fermé entre temps, qui s’exécute uniquement a une heure donnée par exemple 23h45 efface la cellule B2 et referme le fichier en l’enregistrant pour que celle ci s’affiche vide 20 minutes plus tard lorsque le fichier s’ouvrira comme planifier
@+
Le code que j ai rajouté ne fais que comparer la date de la cellule B2 avec la date du jour
Si celle-ci est égale arrête le traitement d envoi du mail dans tous les autres cas laisse celui-ci s exécuter jusqu au bout donc permet celui-ci
Si la cellule B2 est vide les lignes de codes que j ai rajouté ne sont pas exécutées donc le traitement d envoi du mail se poursuit comme jusqu à lors comme si je n avait rien ajouté
En fin de ce traitement j ai mis une ligne code qui mets la date du jour dans la cellule B2
Cela devrait fonctionner
Attends de vérifier ce que cela donne avant d envisager tout autre solution
Mais je suis persuadé que cela correspond à ton attente à savoir :
Envoi du mail à la première ouverture pour un jour donné puis aucun envoi sur les ouvertures suivantes de ce même jour reprise de l envoi du mail le lendemain à la première ouverture et aucun envoi sur les ouvertures suivantes jusqu au jour suivant etc…
Ne pas oublier d enregistrer le fichier à la première fermeture afin de garder la donnée de la cellule B2 mise en place au premier envoi du mail
ok, je comprends un peu mieux, a l’ouverture du fichier a 00h05 la macro va vérifier la date dans la cellule est si la date diffère de la date du jour le mail part et la fin de la macro remplace la date dans la dite cellule par la date du jour ce qui bloquera l’envoie toute la journée
j’enregistre systématiquement les fichiers a la fermeture
je verrais tout de suite demain matin comment ça a fonctionné puisque j’ai mis ton code dans mon fichier de travail et le mail pour aujourd’hui est déjà parti est la cellule est donc a la date d’aujourd’hui
Bravo gagné tu as tout compris !!!
Les mails ne sont pas envoyés pour une date en cellule B2 égale à la date du jour
Pour cela bien enregistré le fichier après l envoi du mail pour conserver en B2 la date du jour que le traitement aura intégré
Hello FFO,
j’aurais une question, serait il possible, je suppose que oui, de rajouter une macro de fermeture et de sauvegarde automatique si le fichier n’est pas utilisé pendant par exemple 3minutes après l’ouverture.
Par deux fois déjà mon pc a redémarrer inopinément et du coup le mail se renvoie a nouveau a la prochaine ouverture.
N’est il pas mieux en fin de procédure d’envoi du mail de réaliser un enregistrement du fichier
Ainsi la date du jour en cellule B2 alimenté par le traitement après l’envoi sera intégré et maintenu même si un redémarrage du PC s’opère