Problème arrêt Timer(application.onTime)

Bonjour

J’utilise un timer (application.onTime ) pour lancer des macros , les timer fonctionne correctement au lancement , cependant je ne comprends pas comment arrêter ces timer lors de la fermeture du classeur

La procédure « application.onTime » ce relance même si le classeur est fermé. (Et fait forcement bugger les autres classeurs ouverts)

Pour arrêter complètement la procédure je suis obligé de fermer tous les classeurs Excel ouverts.

Ci-joint les timer que j’essaie d’utiliser.

Grand Merci pour votre aide

45test-timer.xlsm (25.87 Ko)

Bonsoir vlad92

je pense que tu peux t'inspirer du classeur proposé par Jean-Eric » 8 février 2015, 20:52.

https://forum.excel-pratique.com/viewtopic.php?t=60642

Bonsoir,

Déjà, tu utilises des variables sans les déclarer ! Il demeure toujours conseillé de les déclarer, et même de les déclarer en tête de procédure (lorsqu'il s'agit de variables locales) ou en tête de module (pour les variables de niveau module), pour des quantités de raison, permettre de les typer lors de la déclaration, permettre à VBA de réserver les emplacements mémoire qui leur seront assignés et ainsi s'exécuter plus rapidement, éviter des surprises...

Mais en outre tu sembles penser qu'une variable initialisée va demeurer et que tu vas continuer à pouvoir l'utiliser ! Une variable non déclarée est toujours une variable locale, une fois la procédure achevée, pfftt ! elle disparaît. Donc lorsque tu réutilises dans tes procédures d'arrêt les variables utilisées pour la mise en oeuvre, tes nouvelles variables ne sont pas initialisées, et sont donc vides (Empty).

Pour que des variables conservent la valeur à laquelle elles ont été initialisées, elles doivent être déclarées au niveau module.

De plus tes procédures d'arrêt souffrent d'une erreur de syntaxe (revoir la syntaxe).

NB- Déjà 3 modules pour 3 fois rien comme code ! A ce régime tu es parti pour les multiplier... Ce n'est pas le nombre de modules qui fait l'efficacité du code, par contre cela ne manquera pas d'alourdir le classeur. Pour l'instant il n'y en a que 2 de trop.

D'autant que des procédures qui se contentent d'activer un classeur sont d'une inutilité flagrante, parce que activer pour ne rien faire ne sert à rien, et activer pour faire autre chose, c'est l'activation qui est de trop.

Cordialement.

Bonjour

Merci pour votre aide

Effectivement avec des variables ça marche beaucoup mieux , Merci MFerrand pour ce petit cour sur l’importance des variables,

J’en profite pour demande encore un petit conseil au sujet des activations des classeur que tu dis inutile.

Comment faire alors avec des timer qui lance la macro du classeur si celui-ci n’est pas active ????

La petite procédure me sert justement à éviter les erreurs « indice de selection » par exemple

si en plus le classeur change de nom

Je sais que j’ai encore beaucoup à apprendre mais je progresse

Merci encore pour votre aide

Un classeur n'a pas besoin d'être actif pour qu'une macro s'exécute. C'est l'application qui l'exécute lorsque le moment est arrivé, et qui éventuellement attend d'avoir la main pour le faire.

Ceci dit, comme la procédure lancée ne fait qu'activer un classeur, on ne verra rien d'autre, sauf les MsgBox...

Rechercher des sujets similaires à "probleme arret timer application ontime"