Bonjour Domino67,
J'ai regardé le code de ton fichier, il ne peut pas fonctionner tel que tu le souhaites car la méthode OnTime programme l'exécution d'une procédure à une heure donnée si Excel est "disponible" sinon l'exécution de la procédure est annulée (il y a un paramètre qui permettrait de ne pas l'annuler tout de suite mais il ne ferait pas sortir Excel du mode édition).
Quelques explications / informations concernant le code proposé :
La procédure "DelaiAvantSauveEtFerme" est appelée à l'ouverture du classeur et s'exécute en boucle (*) mais la fonction DoEvents suspend son exécution pour permettre au système de traiter d'autres actions / événements tout en reprenant la main aussitôt après et donc de se poursuivre aussi s'il ne se passe rien (dont une saisie en suspend). Le début du décompte de la fermeture (variable publique phDebut) est réinitialisé après certains événements (voir code dans ThisWorkbook) et la boucle s'interrompe lorsque Timer devient plus grand que phDebut + <un nombre de secondes>. En sortie de boucle si le décompte n'a pas été interrompu (fermeture volontaire du fichier), la touche Escape est simulée et si Excel est en mode édition, cela l'en fait sortir et la sauvegarde / fermeture automatique peut avoir lieu.
Je n'ai pas poussé les tests mais si tu utilises cette technique (il y en a peut-être d'autres que je ne connais pas), il faut pousser les tests et vérifier entre autres ce qu'il se passe lorsque tu as plusieurs fichiers d'ouverts et éventuellement si dans cet autre fichier tu as un formulaire d'ouvert ou une macro qui s'exécute. Si dans ton fichier, tu exécutes d'autres macro, il faut prévoir de réinitialiser phDebut sinon le classeur risque de se sauvegarder et se fermer dès que la macro se termine, par ailleurs l'exécution d'une macro dans ce classeur suspendra l'exécution de la procédure "DelaiAvantSauveEtFerme".
(*) : Inconvénient : la procédure "Workbook_Open()" reste active jusqu'à la fin de l'exécution de la procédure "DelaiAvantSauveEtFerme", c'est pour cela qu'il faut que cette instruction soit la toute dernière de la procédure "Workbook_Open()".
Cdlt,
Cylfo