[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   -
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 !
A voir également:

2 réponses

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour,
Peut être ici???
0
MoYoX Messages postés 127 Date d'inscription   Statut Membre Dernière intervention   3
 
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
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
0
MoYoX Messages postés 127 Date d'inscription   Statut Membre Dernière intervention   3
 
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 !
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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

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???
0
MoYoX Messages postés 127 Date d'inscription   Statut Membre Dernière intervention   3
 
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.
0