[VBA] Lancer macro par tempo non blocante

Résolu/Fermé
MoYoX Messages postés 127 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 21 mars 2014 - 27 janv. 2011 à 12:30
MoYoX Messages postés 127 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 21 mars 2014 - 1 févr. 2011 à 13:12
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
27 janv. 2011 à 14:05
Bonjour,
Peut être ici???
0
MoYoX Messages postés 127 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 21 mars 2014 3
27 janv. 2011 à 15:36
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
27 janv. 2011 à 16:38
0
MoYoX Messages postés 127 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 21 mars 2014 3
28 janv. 2011 à 08:47
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
28 janv. 2011 à 08:59
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 jeudi 4 juin 2009 Statut Membre Dernière intervention 21 mars 2014 3
1 févr. 2011 à 13:12
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