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

Résolu/Fermé
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 - Modifié le 13 août 2021 à 00:01
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 - 15 août 2021 à 18:31
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
A voir également:

6 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
Modifié le 13 août 2021 à 12:27
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
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
15 août 2021 à 18:31
Bonjour et merci, ça marche nickel.
Bien cordialement
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
13 août 2021 à 00:01
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
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
13 août 2021 à 00:07
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
13 août 2021 à 00:42
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
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
13 août 2021 à 09:24
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
13 août 2021 à 10:28
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
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
13 août 2021 à 10:43
Merci, je vais mettre en place et tester
0
m@rina Messages postés 20102 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 28 avril 2024 11 272
13 août 2021 à 10:55
0
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
13 août 2021 à 11:38
j'avais regardé, mais j'avais la même erreur de compilation sur le OnTime ?
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
13 août 2021 à 11:58
Bonjour m@rina,
content de te voir ici :-)
Bonne journée
eric
0