Macro de fermeture automatique

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 .

merci d’avance

Fichier forum.xlsm (77,7 Ko)

Bonjour

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

Fichier forum.xlsm (78,2 Ko)

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 *******

        Contenu = "Salut voisin,"
        Contenu = Contenu & VBA.Chr(10) & VBA.Chr(13)
        Contenu = Contenu & "Voila le résumé de ta commande."
        Contenu = Contenu & VBA.Chr(10) & VBA.Chr(13)
        Contenu = Contenu & Temp
        Contenu = Contenu & VBA.Chr(10) & VBA.Chr(13)
        Contenu = Contenu & "Bon appétit, et Bonne journée."

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 ************** ›

End Sub

« 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

donc pour simplifié dans mon esprit…

  • 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
@+

Pas tout à fait cela

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

Fais moi un retour

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é

Dis moi si cela fonctionne

" Le mail pour aujourd’hui est déjà parti est la cellule est donc a la date d’aujourd’hui"

Après avoir enregistré puis fermé le fichier à sa réouverture juste après que c est il passé :

Envoi ou pas envoi ?

pas d’envoi la première partie du code fonctionne je verrais demain si la deuxième fonctionne comme prévue

Parfait pour l instant cela fonctionne
Attendons demain pour la confirmation
Fais moi un retour

mail du jour parti ! macro validé
encore un grand merci
@+

Bonjour
Bingo !!!
Ravi que cela fonctionne
Merci pour ce retour
À ta disposition si besoin
Au plaisir

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.

Fichier forum.xlsm (78,2 Ko)

Bonjour

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

Je te joins ton fichier avec ce petit plus

Testes et dis moi

Fichier forum.xlsm (78,0 Ko)

si la sauvegarde se fait après l’envoie du mail ça me conviens tout a fais, je teste et te dit si ça fonctionne demain
encore merci et @+

Hello FFO ça fonctionne, classeur enregistré après la macro, c’est validé
:+1: :+1:

Bonjour
Merci pour ton retour
Ravi que cela te convienne
Au plaisir de t aider à nouveau

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.