Posez votre question Signaler

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

ch'duj 23Messages postés jeudi 19 mai 2011Date d'inscription 27 février 2012 Dernière intervention - Dernière réponse le 7 juil. 2015 à 16:04
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
Lire la suite 
Réponse
+18
moins plus
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é
Ajouter un commentaire
Réponse
+17
moins plus
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
Ajouter un commentaire
Réponse
+2
moins plus
Bonjour Titus22

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

merci
Ajouter un commentaire
Réponse
+0
moins plus
Ajouter un commentaire
Réponse
+0
moins plus
Merci pijaku

ça fonctionne tres bien

sympa le forum
Ajouter un commentaire
Réponse
+0
moins plus
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 11340Messages postés jeudi 15 mai 2008Date d'inscription ContributeurStatut 26 août 2015 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
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
Merci Pijaku, je teste cela demain et reviens avec mes commentaires.
bonne journée
Emmanuelagen 5Messages 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
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
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 11340Messages postés jeudi 15 mai 2008Date d'inscription ModérateurStatut 26 août 2015 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...
Répondre
Ajouter un commentaire
Ce document intitulé «  appliquer une pause dans une macro vba excel  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.