Appliquer une pause dans une macro vba excel [Résolu/Fermé]

Signaler
Messages postés
23
Date d'inscription
jeudi 19 mai 2011
Statut
Membre
Dernière intervention
27 février 2012
-
 lerif25 -
Bonjour,

Je cherche comment faire stopper de quelques secondes le déroulement de ma macro en vba excel et ceci de maniere invisible pour l'utilisateur.
Si quelqu'un à un bout de code ça serait sympa !!!

je suis en vba excel 2007

merci

4 réponses

j'avais la même question, et j'ai trouvé encore plus simple:

Sub Wait()
' Attendre 5 secondes
Application.Wait Time + TimeSerial(0, 0, 5)
' Continuer après la pause
End Sub


remplacer le "5" par le nombre de secondes souhaité
61
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57870 internautes nous ont dit merci ce mois-ci

merci beaucoup!
Messages postés
12182
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2020
2 454
Bonjour,

Pour faire une pause, tu peux utiliser effectivement Sleep en déclarant l'API en début de module :
Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

Puis en l'appelant dans ta procédure :
Sleep 1000 'Sleep calcule en millisecondes. Donc Sleep 1000 attendra 1 seconde...


Tu peux également utiliser Wait. Wait calcule lui en secondes. Exemple de Microsoft d'attente de 10 secondes [Selon Microsoft : This example pauses a running macro for approximately 10 seconds.], le approximately m'amuse beaucoup... :
newHour = Hour(Now()) 
newMinute = Minute(Now()) 
newSecond = Second(Now()) + 10 
waitTime = TimeSerial(newHour, newMinute, newSecond) 
Application.Wait waitTime


Il y a aussi le Timer... Voir cet exemple de Mister lermitte222...

Timer et wait comptent en secondes, sleep en millisecondes.
Avec timer tu peux décider d'effectuer une tâche répétitive toutes les "x" unités de temps, avec Wait ou Sleep, c'est ta macro qui attend avant de poursuivre son déroulement.
[Sources : ouskel'n'or]
Cordialement,
Franck P
Messages postés
23
Date d'inscription
jeudi 19 mai 2011
Statut
Membre
Dernière intervention
27 février 2012
1
Merci pijaku

ça fonctionne tres bien

sympa le forum
Messages postés
5
Date d'inscription
lundi 1 juillet 2013
Statut
Membre
Dernière intervention
1 juillet 2013
2
Merci Pijaku, je teste cela demain et reviens avec mes commentaires.
bonne journée
Messages postés
5
Date d'inscription
lundi 1 juillet 2013
Statut
Membre
Dernière intervention
1 juillet 2013
2 >
Messages postés
5
Date d'inscription
lundi 1 juillet 2013
Statut
Membre
Dernière intervention
1 juillet 2013

Merci,
c'est bon
A bientôt
Dim PauseTime, Start, Finish, TotalTime
If (MsgBox("Press Yes to pause for 5 seconds", 4)) = vbYes Then
    PauseTime = 5    ' Set duration.
    Start = Timer    ' Set start time.
    Do While Timer < Start + PauseTime
        DoEvents    ' Yield to other processes.
    Loop
    Finish = Timer    ' Set end time.
    TotalTime = Finish - Start    ' Calculate total time.
    MsgBox "Paused for " & TotalTime & " seconds"
Else
    End
End If
Messages postés
12182
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2020
2 454
Bonjour benaflak,

Ton code est l'exemple parfait... de ce qu'il ne faut jamais faire!
A LIRE...
Messages postés
5
Date d'inscription
lundi 1 juillet 2013
Statut
Membre
Dernière intervention
1 juillet 2013
2
Bonjour,
Merci pour ces infos elles m'ont été très utiles.
J'ai une question liée à ce sujet. J'ai inséré ce temps d'attente dans ma macro liée à un bouton, mais je souhaiterais que le temps ne soit pas limité et que la macro reprenne au prochain "clic" de souris...
Merci pour votre aide
Cordialement
Emmanuelagen
Messages postés
12182
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2020
2 454
Bonjour,

Ne sachant pas ce que vous souhaitez exactement, je vous propose ceci :
1- dans un module standard, en tête de celui-ci, déclarez 3 variables (pour 3 clics successifs) :
Public Clic1 As Boolean
Public Clic2 As Boolean
Public Clic3 As Boolean


2- Dans le module ThisWorkbook, initialisez vos 3 variables comme ceci :
Private Sub Workbook_Open()
Clic1 = False
Clic2 = False
Clic3 = False
End Sub


3- structurez le code de votre bouton comme ceci :
Private Sub CommandButton1_Click()
If Clic1 = False Then
    'A la place du MsgBox, mettez le début de votre procédure
    MsgBox "premier clic"
    Clic1 = True
    Exit Sub
ElseIf Clic2 = False Then
    'A la place du MsgBox, mettez le milieu de votre procédure
    MsgBox "2ème clic"
    Clic2 = True
    Exit Sub
ElseIf Clic3 = False Then
    'A la place du MsgBox, mettez la fin de votre procédure
    MsgBox "3ème clic"
    Clic3 = True
    Exit Sub
Else
    MsgBox "Vous avez déjà cliqué trois fois. Réinitialisation"
    Clic1 = False
    Clic2 = False
    Clic3 = False
End If
End Sub