Mettre un temps entre deux séquences d’une macro

Résolu
Bonjour à tous,

J’ai essayé de mettre un temps entre deux action dans un document word 2003.

Voici le code utilisé :

Call couleur_rouge

'delai d'affichage
Application.OnTime When:=Now + TimeValue("00:00:20"), _
Name:="couleur_rouge"

Call couleur_papier_b 'couleur blanc

Cela ne semble pas fonctionner et je n’arrive pas à trouver pourquoi.
normalement la feuille devrait passer en rouge puis 30 secondes plus tard en blanc.

Merci de votre aide.

Bien cordialement

6 réponses

  1. Contributeur
    PS :
    je viens de tester ta proposition sur Word m@rina, mais OnTime réagit comme sur excel.
    Macro1 continue son exécution tout de suite après le OnTime.

    Contrôle :
    Sub Macro1()
        MsgBox "Ceci est le début de la macro, lorsque vous appuierez sur OK," & _
            " vous attendrez 20 secondes que la macro reprenne"
        ' Pause de 20 seconds.
        Application.OnTime When:=Now + TimeValue("00:00:05"), _
            Name:="Macro2"
        Debug.Print "macro1: " & Timer
    End Sub
    
    Public Sub Macro2()
        Debug.Print "macro2: " & Timer
        MsgBox "la seconde macro reprend : Ce message s'affiche 20 secondes après le premier"
    End Sub

    Debug.Print "macro1" est exécuté, et 5 s plus tard c'est Debug.Print "macro2"

    ou alors il faudrait mettre la fin de la macro1 dans macro2.
    Ce n'est pas dit clairement :-)

    PS2 : ah ben si c'est dit quand on lit lentement :-)

    1
    1. Bonjour et merci, ça marche nickel.
      Bien cordialement
      0
  2. Contributeur
    Bonjour,

    Tu utilises mal OnTime.
    Là, la macro se relance elle-même en permanence.

    Pour ce que tu décris,
    Application.Wait Now() + Cdate("00:00:30")

    devrait suffire.
    Le soucis c'est que cette méthode garde la main et consomme des ressources, peut-être pas rédhibitoire pour toi.
    eric
    0
    1. Bonjour,

      Merci pour la réponse rapide.

      j'ai essayé cette solution mais il y a une erreur sur .Wait, membre de méthode ou données introuvables ?

      y a t-il une autre solution pour ne pas consommer des ressources ? même si je ne comprend pas bien cette notion.

      Bien cordialement
      0
  3. Contributeur
    il faut laisser Application. devant
    Essaie avec ça :
    Sub test()
    Debug.Print Timer
    Application.Wait Now() + CDate("00:00:05")
    Debug.Print Timer
    End Sub

    tu verras que ça dure 5s

    y a t-il une autre solution pour ne pas consommer des ressources ?
    oui mais pas sûr que ça vaille le coup ici.
    Ca veux juste dire que vba continue à tourner pour voir si le temps est écoulé ou pas.
    eric
    0
    1. Bonjour,

      j'ai toujours la même erreur au lancement de la procédure.
      Voici la macro entière

      Sub protection_doc()
      ' changement couleur du document
      Call couleur_rouge

      MsgBox "protection du document OK" & Chr(13) & Chr(10) & "le doc doit-etre rouge"

      Debug.Print Timer
      Application.Wait Now() + CDate("00:00:15")
      Debug.Print Timer

      Call couleur_papier_b 'couleur blanc

      'mise en place protéger du document.
      If ActiveDocument.ProtectionType = wdNoProtection Then
      ActiveDocument.Protect Type:=wdAllowOnlyFormFields, Password:="jlejle"

      Else: MsgBox "Le document est déja protégé" & Chr(13) & Chr(10) & "Faire Ctrl+D pour le déprotégéer"
      End If

      MsgBox "Le document est PROTEGER"

      End Sub


      bien cordialement
      0
      1. Contributeur
        Bonjour,

        Je n'avais pas prêté attention que c'était Word. Il ne connait pas .Wait
        Essaie avec :
        Sub test()
            'Appel tempo
            timerS 5 ' 5 s
            MsgBox "fini"
        End Sub
        
        Sub timerS(t As Double)
            ' tempo t secondes, précision possible : 1/100 s
            Dim s As Double
            s = Timer: Do While Timer < s + t: DoEvents: Loop
        End Sub 

        eric
        0
        1. Merci, je vais mettre en place et tester
          0