Donner une notion de "temps" à une macro

CDRHELP

XLDnaute Nouveau
Bonjour à tous,

Je me demande si il existe un moyen de faire en sorte qu'une macro balaie X feuilles d'un classeur, en faisant une pause, mettons de 5 secondes entre chaque feuille.

Cf sur le document suivant après avoir cliqué sur l'image, je voudrais que feuil2 s'affiche 5s puis feuil3 encore 5s...

Une idée géniale?

Regarde la pièce jointe Classeur4.xls
 

Pièces jointes

  • Classeur4.xls
    14.5 KB · Affichages: 69
  • Classeur4.xls
    14.5 KB · Affichages: 68

Raja

XLDnaute Accro
Re : Donner une notion de "temps" à une macro

Bonjour,

A insérer ce code pour mettre une pause de 5s entre la fin d'une procédure et la nouvelle procédure. A tester.

Code:
Application.OnTime Now + TimeValue("00:00:05"), "nom_de_la_procedure_a_suivre"
 
G

Guest

Guest
Re : Donner une notion de "temps" à une macro

Bonjour CDRhelp, Raja,

La macro modifiée
Code:
Sub TEST()
'
' TEST Macro
' Macro enregistrée le 21/01/2009 par SColas
'
'
    Dim start
    start = Time
    Sheets("Feuil2").Select
    Do
     DoEvents
    Loop While Time < start + TimeValue("00:00:05")
    Sheets("Feuil3").Select
End Sub
Enleve la ligne "DoEvents" si tu ne veux pas que l'utilisateur puisse agir sur la feuille pendant les 5 secondes.
A+
 

peper_eliot

XLDnaute Junior
Re : Donner une notion de "temps" à une macro

Bonsoir à tous.
Après avoir fouillé/testé/Refouillé/Retesté... je me permet de "récupérer" ce fil pour exposer mon souci qui est identique.
J'ai une macro qui doit actualiser des données toutes les 15 secondes.

Si j'utilise
Code:
Application.OnTime Now + TimeValue("00:00:15"), "nom_de_la_procedure_a_suivre"
C'est Ok mais ça ne s'arrête pas...
J'ai donc rajouté une boucle... et, comme à chaque fois, je m'emmèle les pieds dedans:(
Code:
Sub NbCycles()
Feuil1.Activate
Durée = [A2] 'nombre de cycles mentionné en A2, 10 en l'occurrence
For i = 1 To Durée
Chrono = Now + TimeValue("00:00:15")
ActiveWorkbook.RefreshAll
Feuil1.Activate
Application.OnTime Chrono, "Extraction"
Next
End Sub
Le résultat c'est que mon "Extraction" est exécutée 10 fois en même temps:mad:
Alors que je cherche à l'effectuer 10 fois à 15 secondes d'intervalle


Dernier petit point, mon nombre de cycle est précisé en [A2]
Est-il possible de récupérer en [A3] la durrée en seconde et la rajouter à
TimeValue("00:00:[A3]")

D'avance merci pour vos commentaires ou pistes
 

kjin

XLDnaute Barbatruc
Re : Donner une notion de "temps" à une macro

Bonsoir,
Tu peux essayer comme ceci
Code:
Sub LanceExtraction()
With Sheets("Feuil1")
NbCycles = [A2] 'nombre de cycles mentionné en A2, 10 en l'occurrence
Durée = Format([A3], "hh:mm:ss") 'temps d'attente
End With
For i = 1 To NbCycles
If Application.Wait(Now + TimeValue(Durée)) Then
DoEvents
Extraction
End If
Next
End Sub
A+
kjin
 

peper_eliot

XLDnaute Junior
Re : Donner une notion de "temps" à une macro

Merci kjin
Le seul inconvénient de WAIT est qu'il bloque l'appli durant la période de "Wait"
J'ai essayé les trois méthodes avec
  • Application.OnTime
  • Timer
  • Application.Wait
Voici le code (excusez pour les 'barbarismes':D)
Code:
Sub CyclesUpdate()
'===DECLARATION DES VARIABLES====>
Dim Chrono, Start, Durée, NbCycles
Feuil1.Activate
NbCycles = [A2] 'nombre de cycles mentionné en A2
Durée = [A4] 'nombre de secondes
'+++++++++++++++++++++++++++++++++++
'AVEC====ONTIME====>
Chrono = Now + TimeValue("00:00:" & Durée)
Application.OnTime Chrono, "Extract"
'VOIR REMARQUE SUR PROCEDURE EXTRACT
'+++++++++++++++++++++++++++++++++++
'AVEC====TIMER====>
'For i = 1 To NbCycles
'    Start = Timer
'    Do While Timer < Start + Durée
'    DoEvents
'    'Vide oui je sais, ça fait gros bricolage
'    Loop
'Extract
'Next
'+++++++++++++++++++++++++++++++++++
'AVEC====WAIT====>
'For i = 1 To NbCycles
'    If Application.Wait(Now + TimeValue("00:00:" & Durée)) Then
'    DoEvents
'    Extract
'    End If
'Next
'L'inconvénient de WAIT est que l'appli est bloquée durant WAIT
'+++++++++++++++++++++++++++++++++++
End Sub
Sub Extract()
  Feuil1.Activate
  ActiveWorkbook.RefreshAll
  Range("C7:D29").Select
  Selection.Copy
        Feuil2.Activate
        Feuil2.[A65536].End(xlUp)(2).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=True
'RAJOUTER AVEC===ONTIME====>
'CyclesUpdate
'++++MAIS LA BOUCLE NE S'ARRÊTE PAS++++
End Sub

Je ne suis pas arriver arrêter la boucle de 'OnTime'... Si vous avez une idée
suite aux recherches faites, je pense qu'il faut caser
Application.OnTime Chrono, "Extract", , False

J'ai également essayé de déclarer mes variables en variables du module:(
Si vous avez un lien...:);)
D'avance merci
 

Discussions similaires

Statistiques des forums

Discussions
312 492
Messages
2 088 914
Membres
103 983
dernier inscrit
AlbertCouillard