Macro en tache de fond

vasseury

XLDnaute Nouveau
Bonjour,
J'ai développé un petit outil qui va rechercher des informations dans une base de données MS SQL. Le chargement de ses données se fait via un bouton, l'utilisateur renseignant les informations de connexion.

Pour des raisons pratiques, l'utilisateur souhaiterait se connecter une première fois puis, que les données se rafraîchisse toutes les 5 min

J'ai trouvé un code qui fonctionne bonnant-malant, mais qui a un comportement très aléatoire (l'exécution ne se fais pas du tout à intervalle régulier).

Code:
Public HeureExecution As Double, Interval As Long
 
'   Pour Amorcer le Timer toutes les x secondes
Public Sub Lancer(ByVal NbSecondes As Long)
    Interval = NbSecondes
    Application.OnTime Now + TimeSerial(0, 0, Interval), "ExecuterTimer"
End Sub
 
'   Pour démarrer le Timer
Public Sub CommandButtonStart_Click()
    Lancer (100)
End Sub
 
'   Pour Stopper le Timer
Public Sub CommandButtonStop_Click()
    On Error Resume Next
    Application.OnTime HeureExecution, "ExecuterTimer", , False
End Sub

'           Lancer toutes les x secondes
'
'Now        :   Renvoie une valeur de type Variant (Date) indiquant la date et l'heure en cours
'               fournies par la date et l'heure système de votre ordinateur.
'OnTime     :   Cette méthode programme l'exécution d'une procédure à un moment précis
'               (soit à une heure précise soit après l'écoulement d'un délai précis).
'TimeSerial :   Renvoie une valeur de type Variant (Date) contenant une heure précise (heure, minute et seconde)
 
Public Sub ExecuterTimer()
    ' Ici on affiche un msg toutes les 10 s
    MsgBox "Coucou", vbOKOnly, "Timer"
    HeureExecution = Now + TimeSerial(0, 0, Interval)
    Application.OnTime HeureExecution, "ExecuterTimer"
End Sub

Est-ce que quelqu'un pourrait m'expliquer comment faire pour ne pas avoir l'aspect aléatoire?

Merci d'avance
 

pedrag31

XLDnaute Occasionnel
Re : Macro en tache de fond

Bonjour Vasseury, Bonjour le forum,

Code Timer interessant.
J'obtiens un intervalle de 10 secondes fixe en modifiant ton code comme ci dessous:

Code:
Public HeureExecution As Double, Interval As Long
 
'   Pour Amorcer le Timer toutes les x secondes
Public Sub Lancer(ByVal NbSecondes As Long)
    Interval = NbSecondes
[COLOR="red"]    Application.OnTime Now + TimeValue("0:00:10"), "ExecuterTimer"[/COLOR]
End Sub
 
'   Pour d?marrer le Timer
Public Sub CommandButtonStart_Click()
    Lancer (100)
End Sub
 
'   Pour Stopper le Timer
Public Sub CommandButtonStop_Click()
    On Error Resume Next
    Application.OnTime HeureExecution, "ExecuterTimer", , False
End Sub

'           Lancer toutes les x secondes
'
'Now        :   Renvoie une valeur de type Variant (Date) indiquant la date et l'heure en cours
'               fournies par la date et l'heure syst?me de votre ordinateur.
'OnTime     :   Cette m?thode programme l'ex?cution d'une proc?dure ? un moment pr?cis
'               (soit ? une heure pr?cise soit apr?s l'?coulement d'un d?lai pr?cis).
'TimeSerial :   Renvoie une valeur de type Variant (Date) contenant une heure pr?cise (heure, minute et seconde)
 
Public Sub ExecuterTimer()
    ' Ici on affiche un msg toutes les 10 s
    MsgBox "Coucou", vbOKOnly, "Timer"
    [COLOR="Red"]HeureExecution = Now + TimeValue("0:00:10")[/COLOR]
    Application.OnTime HeureExecution, "ExecuterTimer"
End Sub

En esperant que ca marchera correctement dans ton application...:p

Bonne journee,:)
 
Dernière édition:

Discussions similaires

Réponses
8
Affichages
691

Statistiques des forums

Discussions
312 552
Messages
2 089 525
Membres
104 203
dernier inscrit
mika9213