Microsoft 365 Application.OnTime

SCorbeil

XLDnaute Nouveau
Bonjour,

Petit problème avec l'exécution de cette macro.

VB:
Sub GOAuto()

Dim HrREQ1 As Date
Dim HrREQ2 As Date
Dim JrSEM As Integer

JrSEM = Weekday(Now(), vbMonday)
HrREQ1 = TimeSerial(15, 30, 0)
HrREQ2 = TimeSerial(11, 30, 0)

If JrSEM = 5 Then

    Application.OnTime HrREQ2, "REQAutomatique", , True
    
End If

If JrSEM < 5 Then

    Application.OnTime HrREQ1, "REQAutomatique", , True
    
End If

If JrSEM > 5 Then

Resume Next

End If

End Sub

La macro "GOAuto" est lancée avec l'ouverture du Workbook, mais ne lance pas la macro "REQAutomatique" à l'heure prévue. Le Workbook est fermé à tous les jours (à la fermeture des bureaux) et lancé à nouveau chaque jours ouvrable par le premier utilisateur.

Je suis possiblement encore si près de l'arbre qu'il m'est pas possible de voir la forêt.

Merci à l'avance à tous les collaborateurs.
 
Solution
re
sinon on se rappelle le bon vieux temps ou l'on se servait de VBSCript et on adapte en vba

exemple
VB:
'tout les mercredi a 18:04
Sub test()
    Set wShell = CreateObject("Wscript.Shell")
    jour = "WED"    'pour le mercredi
    'pour plusieurs jours
    'jour= "MON,TUE,WED,THU,FRI,SAT,SUN"
   
    NomTACHE = """patrick"""
   
    chemin_fichier = """C:\Users\polux\DeskTop\aaa.cmd"""
   
    A_quelle_Heure = "18:05"
   
    'codée avec argument
    wShell.Run "SchTasks /Create /SC WEEKLY /D " & jour & " /TN " & NomTACHE & " /TR " & chemin_fichier & " /ST " & A_quelle_Heure
   
    'codée en dur
    'wShell.Run "SchTasks /Create /SC WEEKLY /D WED /TN 'patrick' /TR 'C:\Users\polux\DeskTop\aaa.cmd' /ST 18:05"
End Sub
je suis...

laurent3372

XLDnaute Impliqué
Supporter XLD
Bonsoir,
VB:
Sub GOAuto()

    Dim HrREQ1 As Date
    Dim HrREQ2 As Date
    Dim JrSEM As Integer
   
    JrSEM = Weekday(Now(), vbMonday)
    'HrREQ1 = TimeSerial(22, 22, 0)
    HrREQ1 = Now + TimeSerial(0, 1, 0) 'Dans 1 minute
    HrREQ2 = Now + TimeSerial(0, 2, 0) 'Dans 2 minutes
   
    If JrSEM = 5 Then
        Application.OnTime HrREQ2, "REQAutomatique", , True
    End If
   
    If JrSEM < 5 Then
        Application.OnTime HrREQ1, "REQAutomatique", , True
       
    End If
   
    If JrSEM > 5 Then
        'Resume Next
    End If
   
End Sub

Sub REQAutomatique()
    MsgBox "C'est l'heure"
End Sub
Cordialement,
--
LR
 

SCorbeil

XLDnaute Nouveau
Bonsoir,
VB:
Sub GOAuto()

    Dim HrREQ1 As Date
    Dim HrREQ2 As Date
    Dim JrSEM As Integer
  
    JrSEM = Weekday(Now(), vbMonday)
    'HrREQ1 = TimeSerial(22, 22, 0)
    HrREQ1 = Now + TimeSerial(0, 1, 0) 'Dans 1 minute
    HrREQ2 = Now + TimeSerial(0, 2, 0) 'Dans 2 minutes
  
    If JrSEM = 5 Then
        Application.OnTime HrREQ2, "REQAutomatique", , True
    End If
  
    If JrSEM < 5 Then
        Application.OnTime HrREQ1, "REQAutomatique", , True
      
    End If
  
    If JrSEM > 5 Then
        'Resume Next
    End If
  
End Sub

Sub REQAutomatique()
    MsgBox "C'est l'heure"
End Sub
Cordialement,
--
LR

Bonjour Laurent3372,

Merci pour cette réponse, mais l'objectif est de lancer la macro "REQAutomatique" à une heure précise soit 15h30 du lundi au jeudi inclusivement et à 11h30 les vendredis.

C'est pour cette raison que j'ai ajouté la notion de jour de semaine qui est représenté par la variable "JrSEM" qui prend en considération que le lundi est le 1er jour de la semaine.

Donc, la quête continue et au risque de me répéter, je vous remercie encore pour votre réponse.

Cordialement,
 

dysorthographie

XLDnaute Accro
Sans titre.png
 

patricktoulon

XLDnaute Barbatruc
re
bonjour
Le planificateur de tâches ne sait que lancer une tâche tous les jours à la même heure. Il ne fait pas de distinction entre les jours de la semaine

depuis quand le planificateur ne fait que ca !!!!??????

et puis la on est pas dans planificateur de tache on est dans excel avec on time
ca implique que le fichier doit rester ouvert

tu a l'api shreduler ou le trigger service pour ca ;)
 

patricktoulon

XLDnaute Barbatruc
re
sinon on se rappelle le bon vieux temps ou l'on se servait de VBSCript et on adapte en vba

exemple
VB:
'tout les mercredi a 18:04
Sub test()
    Set wShell = CreateObject("Wscript.Shell")
    jour = "WED"    'pour le mercredi
    'pour plusieurs jours
    'jour= "MON,TUE,WED,THU,FRI,SAT,SUN"
   
    NomTACHE = """patrick"""
   
    chemin_fichier = """C:\Users\polux\DeskTop\aaa.cmd"""
   
    A_quelle_Heure = "18:05"
   
    'codée avec argument
    wShell.Run "SchTasks /Create /SC WEEKLY /D " & jour & " /TN " & NomTACHE & " /TR " & chemin_fichier & " /ST " & A_quelle_Heure
   
    'codée en dur
    'wShell.Run "SchTasks /Create /SC WEEKLY /D WED /TN 'patrick' /TR 'C:\Users\polux\DeskTop\aaa.cmd' /ST 18:05"
End Sub
je suis nostalgique d'un coup là ;) :cool:

si on veux pas le répéter c'est ONLY a la place de WEEKLY

a noter les triples guillemets qui deviennent un seul en interne ne pas les oublier ;)

ps: je viens de tester sur W7 64 excel 32 2007 ca marche encore

a +

edit si je regarde dans mon planifieur de tache on vois bien les taches programer on ne peut plus explicite
Capture.JPG
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonsoir.
De mémoire un Application.OnTime ouvre le classeur s'il y a lieu pour pouvoir exécuter la macro. Mais si c'est pour le lendemain il me semble préférable de spécifier la date et l'heure plutôt que l'heure seule. Faire DH = Date + TimeSerial(15, 30, 00): If DH< Now Then DH=DH + 1. Évitez aussi d'exécuter plusieurs fois le Application.OnTime DH pour la même date/heure.
 

Dranreb

XLDnaute Barbatruc
Oui, qu'est-ce qu'il y a ?
Beaucoup ne le sachant pas n'arrivèrent plus à refermer un classeur par ce qu'il se rouvrait tout le temps à cause d'un Application.OnTime exécuté à la fin de la procédure planifiée pour la seconde d'après !
Mais on ne sait jamais, les choses changent au fil des versions d'Excel …
 

Discussions similaires

Statistiques des forums

Discussions
311 705
Messages
2 081 733
Membres
101 807
dernier inscrit
foued