Menu

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

ch'duj 23 Messages postés jeudi 19 mai 2011Date d'inscription 27 février 2012 Dernière intervention - 22 nov. 2011 à 08:07 - Dernière réponse :  lerif25
- 17 oct. 2017 à 11:19
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

Afficher la suite 

12 réponses

+52
Utile
1
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é
Cette réponse vous a-t-elle aidé ?  
pijaku 12205 Messages postés jeudi 15 mai 2008Date d'inscriptionContributeurStatut 13 septembre 2017 Dernière intervention - Modifié par pijaku le 22/11/2011 à 09:34
+23
Utile
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
ch'duj 23 Messages postés jeudi 19 mai 2011Date d'inscription 27 février 2012 Dernière intervention - 22 nov. 2011 à 08:37
+1
Utile
Bonjour Titus22

Ta solution me plais mais sleep n'est pas une fonction VBA excel. Comment l'utiliser dans ma macro vba ?

merci
ch'duj 23 Messages postés jeudi 19 mai 2011Date d'inscription 27 février 2012 Dernière intervention - 22 nov. 2011 à 10:21
0
Utile
Merci pijaku

ça fonctionne tres bien

sympa le forum
Emmanuelagen 5 Messages postés lundi 1 juillet 2013Date d'inscription 11 juillet 2013 Dernière intervention - 1 juil. 2013 à 11:52
0
Utile
1
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
pijaku 12205 Messages postés jeudi 15 mai 2008Date d'inscriptionContributeurStatut 13 septembre 2017 Dernière intervention - 1 juil. 2013 à 12:20
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
Emmanuelagen 5 Messages postés lundi 1 juillet 2013Date d'inscription 11 juillet 2013 Dernière intervention - 1 juil. 2013 à 13:38
0
Utile
1
Merci Pijaku, je teste cela demain et reviens avec mes commentaires.
bonne journée
Emmanuelagen 5 Messages postés lundi 1 juillet 2013Date d'inscription 11 juillet 2013 Dernière intervention - 11 juil. 2013 à 15:23
Merci,
c'est bon
A bientôt
0
Utile
1
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
pijaku 12205 Messages postés jeudi 15 mai 2008Date d'inscriptionModérateurStatut 13 septembre 2017 Dernière intervention - 7 juil. 2015 à 16:04
Bonjour benaflak,

Ton code est l'exemple parfait... de ce qu'il ne faut jamais faire!
A LIRE...