ALTERNATIVE TIMER POUR VBA

jean_marc_n2 Messages postés 170 Date d'inscription jeudi 11 décembre 2003 Statut Membre Dernière intervention 24 janvier 2009 - 7 févr. 2007 à 15:41
Cyrilooo63 Messages postés 4 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 3 juin 2008 - 3 juin 2008 à 15:45
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/41396-alternative-timer-pour-vba

Cyrilooo63 Messages postés 4 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 3 juin 2008
3 juin 2008 à 15:45
Merci MIMIZANZAN pour toute ton aide! ca marche!
mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017
3 juin 2008 à 12:25
Désolé CYRIL00063, un bout de phrase a sauté.
Il faut lire:
"mettre le timer directement sur une feuille de calcul(par la boite à outils VBA, autres contrôles)".
Pour que çà marche,il faut rester dans Excel et ouvrir ou créer un nouveau dossier par le menu.
Cyrilooo63 Messages postés 4 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 3 juin 2008
3 juin 2008 à 11:15
Merci de ton aide, mais je dois dire que le bout de phrase incomplet (mettre le timer directement sur...) m'empeche de comprendre ce que tu me conseil...
Ce qui est bizarre c'est que je peux me servir d'excel à partir du moment où j'ouvre un autre fichier à partir d'excel (file/open) mais ca ne marche pas si je l'ouvre directement depuis windows (double clic).
merci!
mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017
2 juin 2008 à 17:19
Salut CYRIL00063!

Content de savoir que mon timer te convient.
Pour répondre à ta question, il suffit de mettre le timer directement sur une Autres contrôles), et dans la procédure timer_click de la feuille, mettre au début l'instruction Doevents.
Tu peux alors lancer le timer (par un bouton sur la feuille par ex) et ouvrir un autre classeur: le timer continuera de tourner dans son classeur...
Et revoilà!
Cyrilooo63 Messages postés 4 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 3 juin 2008
2 juin 2008 à 16:14
Merci MimiZanzan ca marche super bien! un peu decu tout de meme de ne pas pouvoir trouver une solution aussi simple...
je vais encore devoir vous demander de l'aide: j'aimerais pouvoir utiliser mon excel tranquillement pendant que ma mise a jour tourne. Je penser faire en sorte que ce timer s'ouvre dans un nouvelle application excel. avez vous de meilleurs idée?
Merci!
mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017
30 mai 2008 à 17:24
En effet, l'intervalle maximum accepté par le timer est de 65535 ms cad un peu plus d'une minute (c'est pareil pour le timer VB6 sur lequel est bâti le mien).
Mais ce n'est pas un pb, il suffit de mettre un intervalle de 1000 (1 seconde) pour le timer, et dans la procédure évenement _Click du timer mettre une variable t que l'on incrémente chaque seconde (t=t+1).
Et ajouter dans la même procédure:
If t mod 60 = 0 then 'procédure à déclencher toutes les heures
Il vaut mieux déclarer "Dim t as Integer" au début du module (pas dans la procédure!)

Et voilà!
Cyrilooo63 Messages postés 4 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 3 juin 2008
30 mai 2008 à 08:04
Très bon code qui prend peu de ressource!
par contre j'aimerais l'utiliser pour faire une mise à jour toutes les heures. Soit trop 3600000 millisecondes... le code me retourne un erreur de "overflow"... je ne sais pas comment corriger ca.

merci de votre aide
zeratul67 Messages postés 97 Date d'inscription mardi 9 avril 2002 Statut Membre Dernière intervention 11 mai 2008
11 mai 2008 à 14:18
Bon code, très pratique.

J'ai juste du effectuer une modification car parfois ma macro ne se terminait pas.
J'ai ajouté "CancelTimer = True" dans "Private Sub Class_Terminate()" et en dessous du seul "DoEvents" du code j'ai inséré "If CancelTimer Then Exit Do" (qui était commenté si mes souvenirs sont bons).

Merci pour ce code sympa :)
6RatsMorts Messages postés 7 Date d'inscription mercredi 26 mars 2003 Statut Membre Dernière intervention 2 mai 2012
27 févr. 2007 à 20:51
mimiZanzan a mis le doigt sur un problème minim pour mon cas et que j'avais donc mis de coté :
Il n'est pas possible de faire fonctionner 2 timer simultanément avec ce code. Je cherche la solution...

Une idée?
6RatsMorts Messages postés 7 Date d'inscription mercredi 26 mars 2003 Statut Membre Dernière intervention 2 mai 2012
27 févr. 2007 à 20:36
verlaat4show,
Le '&' de ...Timer&...' indique au compilateur que la fonction retournera un entier long (variable de type 'Long').

Dans l'aide MS VB :
"Le caractère de déclaration de type Long est le signe &."

Mais dis moi, tu le mets en pièces mon code. Tu le décode à fond! Ca fait plaisir!
mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017
26 févr. 2007 à 19:35
Je ne voudrais pas insister, mais une fois que l'on a enregistré 1 fois le timer ocx sur un PC et que on l'a chargé 1 fois à partir de la liste des contrôles supplémentaires dans VBA, il est toujours dispo à chaque ouverture de Excel par ex directement dans la boite à outils, et on peut en mettre autant que l'on veut dans une application avec des paramètres différents.
Quant à la sécurité d'utilisation de cet ocx, je le garantis sain, et il y a bien d'autres raisons de se faire du souci au niveau de la sécurité en entreprise.
Enfin si il y en a qui préfèrent des lignes de codes et des API pour gérer un timer (et un seul à la fois), tant pis pour eux!
verlaat4show Messages postés 3 Date d'inscription mercredi 21 décembre 2005 Statut Membre Dernière intervention 26 février 2007
26 févr. 2007 à 15:23
Je répète pour mimizanzan:
le contrôle Timer n'appparait pas dans la liste des contrôles sous vba d'office sans le récupérer ailleurs au préalable, soit, il faut télécharger 'ton' timer et aller le charger dans la liste des controles supplementaires pour pouvoir l'utiliser.

M'enfin, cette manière d'opérer n'est pas satisfaisante car d'un poste à un autre, il faut transporter à la fois l'application excel et le controle timer.ocx, surtout que les droits d'utilisation de contrôles sont souvent sécurisés (en entreprise...)


Vive Application.onTime, et encore bravo à 6ratsmorts pour sa classe !!!
mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017
26 févr. 2007 à 15:07
Cher Verlaat4Show, je te précise que ce n'est pas la peine d'avoir VB pour utiliser mon timer: il suffit d'enregistrer le controle .OCX présent dans mon code dans le registre et il apparaitra dans la liste des contrôles sous VBA.
verlaat4show Messages postés 3 Date d'inscription mercredi 21 décembre 2005 Statut Membre Dernière intervention 26 février 2007
26 févr. 2007 à 13:53
Application.onTime is Good

666ratsmorts Merci. ton code fonctionnent avec de toutes pitites modifications, Jvais surement utiliser ta classe car elle evite d'utiliser des fichiers en plus : contrôle timer vb à importer

juste une petite question toi qui semble gérer dans l'utilisation des dll, dans ta classe tu fais appel à user32 et à kernell32,
à la ligne :
Private Declare Function CancelWaitableTimer& Lib "kernel32"...
la fonction CancelWaitableTimer& dans mon fichier kernel32.dll n'apparait que sans le '&', j'ai essayé avec et sans le '&' pour mon timer, les 2 fonctionnent. Peux tu me renseigner sur ce '&'?

Merci quand même MiZanMizan j'ai testé ta façon d'opérer, c'était ce que je pensais faire ; vu que je n'ai pas ms VB , dégouté de constater que ce contrôle Timer n'appparaisse pas dans la liste des contrôles sous vba d'office sans le récupérer ailleurs au préalable. M'enfin ...

Sinon pour ce qui concerne le besoin de Timer(s) avec vba, je trouve que la fonction Application.onTime est simple, très simple. A utiliser sans modération !
mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017
24 févr. 2007 à 00:22
J'ai déjà soumis récemment un code pour un timer pour VBA sous forme d'un contrôle activeX (code "Timer pour VBA"), qui se manipule exactement comme le timer VB, et on peut mettre autant de ces timers que l'on veut dans une application VBA.
6RatsMorts Messages postés 7 Date d'inscription mercredi 26 mars 2003 Statut Membre Dernière intervention 2 mai 2012
22 févr. 2007 à 14:48
verlaat4show :

Si tu as un soucis de prog demande, on ne sais jamais. J'essayerai de t'aider...

J'en ai eu besoin pour migrer une appli VB vers VBA...
verlaat4show Messages postés 3 Date d'inscription mercredi 21 décembre 2005 Statut Membre Dernière intervention 26 février 2007
18 févr. 2007 à 12:08
Cool ton code

jai u un pb identique sous vba, j'ai besoin de lancer plusieurs chrono et/ou compte à rebours en laissant la main à dautres processus
et vu qu'avec la fonction timer c'est just just. Jvais essayer ta classe Timer.

T'en as u besoin pour faire koi comme appli si pas indiscret...

Koi kil en soit CIMER, jessaie jte donne des news ou jaurais ptetre besoin de tes services pour utiliser le timer...
6RatsMorts Messages postés 7 Date d'inscription mercredi 26 mars 2003 Statut Membre Dernière intervention 2 mai 2012
12 févr. 2007 à 01:16
Merci.
jean_marc_n2 Messages postés 170 Date d'inscription jeudi 11 décembre 2003 Statut Membre Dernière intervention 24 janvier 2009
7 févr. 2007 à 15:41
Très sympathique, tout simple, tout léger, parfait!
Utilisation simplissime mais suffisante, bref, c'est nickel!
Du code comme on aimerait à en voir plus souvent :-)
Je mets 10/10, bien sur!
Rejoignez-nous