[VBA] Lancer macro par tempo non blocante
Résolu
MoYoX
Messages postés
127
Date d'inscription
Statut
Membre
Dernière intervention
-
MoYoX Messages postés 127 Date d'inscription Statut Membre Dernière intervention -
MoYoX Messages postés 127 Date d'inscription Statut Membre Dernière intervention -
Bien le bonjour !
J'ai besoin, en VBA, sur un tableau Excel, de vérifier régulièrement la présence d'un fichier dans un dossier.
En fait, nous recevons des messages vocaux, et il faudrait relancer une macro (celle qui lit dans le dossier) régulièrement.
La macro de lecture dans le dossier est faite, il me faut juste une temporisation associée à une boucle qui permette de l'actualiser.
J'ai essayé avec plusieurs types de tempos, la "pause" ne fonctionne pas bien, car elle bloque tout le reste du tableau (et il faut que je puisse faire autre chose pendant).
J'ai essayé avec une boucle "do while" et un "doEvents", mais ça relance ma macro beaucoup trop rapidement. Il faudrait que ce soit de l'ordre de la seconde ...(1 , 2, 3 ...)
Quelqu'un a une idée ?
D'avance merci !
J'ai besoin, en VBA, sur un tableau Excel, de vérifier régulièrement la présence d'un fichier dans un dossier.
En fait, nous recevons des messages vocaux, et il faudrait relancer une macro (celle qui lit dans le dossier) régulièrement.
La macro de lecture dans le dossier est faite, il me faut juste une temporisation associée à une boucle qui permette de l'actualiser.
J'ai essayé avec plusieurs types de tempos, la "pause" ne fonctionne pas bien, car elle bloque tout le reste du tableau (et il faut que je puisse faire autre chose pendant).
J'ai essayé avec une boucle "do while" et un "doEvents", mais ça relance ma macro beaucoup trop rapidement. Il faudrait que ce soit de l'ordre de la seconde ...(1 , 2, 3 ...)
Quelqu'un a une idée ?
D'avance merci !
A voir également:
- [VBA] Lancer macro par tempo non blocante
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Logiciel tempo - Télécharger - Audio & Musique
- Jitbit macro recorder - Télécharger - Confidentialité
- Lancer une application au démarrage windows 10 - Guide
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
2 réponses
Merci, ça avait l'air d'être une bonne soluce mais ... j'ai l'impression que rien ne se passe en fait (j'ai même déclaré les variables qui ne l'étaient pas)
je précise, pardon, que c'est sous Office 2007
je précise, pardon, que c'est sous Office 2007
Merci beaucoup !
Cela a l'air de fonctionner mais ... deux fois.
Les messages vocaux ne sont vérifiés que deux fois puis la boucle se stoppe.
(d'ailleurs je ne comprends pas trop comment fonctionne cette fonction)
J'ai essayé d'y mettre une while (1) pour la répéter en boucle, mais ça aussi c'est parfaitement bloquant.
C'est dommage que la solution que tu as trouvé ne répète ma macro que deux fois car, elle n'est pas du tout bloquante et c'est ça que je veux !
En tous cas merci !
Cela a l'air de fonctionner mais ... deux fois.
Les messages vocaux ne sont vérifiés que deux fois puis la boucle se stoppe.
(d'ailleurs je ne comprends pas trop comment fonctionne cette fonction)
J'ai essayé d'y mettre une while (1) pour la répéter en boucle, mais ça aussi c'est parfaitement bloquant.
C'est dommage que la solution que tu as trouvé ne répète ma macro que deux fois car, elle n'est pas du tout bloquante et c'est ça que je veux !
En tous cas merci !
Salut,
Ne pas ajouter de boucle, elle se fait toute seule.
Fais cet essai, tu va voir :
1- copie/colle ce code dans un nouveau classeur excel
2- ferme VisualBasic et attends.
3- clique toutes les 30 secondes...
Option Explicit
C'est ce que l'on appelle une boucle récursive. Tu appelles dans la procédure OnTime la macro elle même (je te l'ai mis en gras)
Plus d'infos???
Ne pas ajouter de boucle, elle se fait toute seule.
Fais cet essai, tu va voir :
1- copie/colle ce code dans un nouveau classeur excel
2- ferme VisualBasic et attends.
3- clique toutes les 30 secondes...
Option Explicit
Sub RafraichissementGraphe() Dim DansTrenteSecondes As Date ' Définit l'intervalle avec l'heure actuelle + trente secondes DansTrenteSecondes = TimeSerial(Hour(Time), Minute(Time), Second(Time) + 30) If DansTrenteSecondes < "21:00:00" Then ' Appel récursif de la fonction RafraichissementGraphe Application.OnTime DansTrenteSecondes, "RafraichissementGraphe" ' Appel de la fonction EnregistrerEnPageWeb MsgBox "Ben tu vois bien que cela fonctionne..." End If End Sub
C'est ce que l'on appelle une boucle récursive. Tu appelles dans la procédure OnTime la macro elle même (je te l'ai mis en gras)
Plus d'infos???
Merci, ça fonctionne bien.
Je n'avais pas pigé que le nom de la fonction que tu as mis en gras était la fonction elle même ... et donc je n'avais pas pigé le principe de la fonction récursive !
Ca fonctionne parfaitement,, j'ai l'affichage de mes messages vocaux en temps réel (ou presque) c'est parfait, merci.
Je n'avais pas pigé que le nom de la fonction que tu as mis en gras était la fonction elle même ... et donc je n'avais pas pigé le principe de la fonction récursive !
Ca fonctionne parfaitement,, j'ai l'affichage de mes messages vocaux en temps réel (ou presque) c'est parfait, merci.