[VBA] Lancer macro par tempo non blocante [Résolu/Fermé]

Signaler
Messages postés
127
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
21 mars 2014
-
Messages postés
127
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
21 mars 2014
-
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 !

2 réponses

Messages postés
12184
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
31 juillet 2020
2 467
Messages postés
127
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
21 mars 2014
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
Messages postés
12184
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
31 juillet 2020
2 467
Messages postés
127
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
21 mars 2014
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 !
Messages postés
12184
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
31 juillet 2020
2 467
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???
Messages postés
127
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
21 mars 2014
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.