XL 2016 Application ontime

  • Initiateur de la discussion Initiateur de la discussion dadaze
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

dadaze

XLDnaute Nouveau
Bonjour tous les Exceliens,

J'ai créé une macro qui ferme mon fichier au bout de 30 secondes le temps qu'une autre macro s'exécute.

Pour ce faire je me sers du code ci dessous qui fonctionne très bien.

Dim temps As Date

temps = Now + TimeValue("00:00:35")

Application.OnTime temps, "fermeture"

En revanche, l'autre code encore ci dessous censé interrompre le compte a rebours sans reprise possible de ce dernier ne fonctionne absolument pas.

On Error Resume Next

Application.OnTime temps, "fermeture", , False

Je tourne en rond depuis un moment sans succès.

Si d'aventure vous avez quelques instants à me consacrer pour solutionner mon problème.

Je vous en remercie d'avance.

Je joins mon fichier dont la macro fermeture est désactivée.

Cordialement.
 

Pièces jointes

Bonjour dadaze,

Vous avez écrit en haut du Module Depart => Public temps As Date => c'est très bien.

Par contre dans la macro debut vous avez mis => Dim temps As Date => c'est très mal, il faut supprimer cette instruction.

A+
 
Bonjour,
En effet, il y a 2 déclarations de temps dans le Module Depart. C'est la variable locale à la procédure qui est utilisée.
De plus Dim temps As Date ne semble pas approprié. Alors peut-être que ça marche mais la doc dit:
1753556166516.png

Pour info, des fonctions qui font le job avec des arguments nommés pour plus de clarté.
VB:
Private EarliestTime As Variant
Private Keep_FunctionName As String
Private Keep_OnTimeSeconds As Integer

Sub LaunchOnTime(FunctionName As String, OnTimeSeconds As Integer)
    Keep_FunctionName = FunctionName
    Keep_OnTimeSeconds = OnTimeSeconds
    Call StopOnTime
    Call StartOnTime
End Sub

Sub StopOnTime()
    If Not EarliestTime = 0 Then
        Application.OnTime EarliestTime:=EarliestTime, Procedure:="RunOnTime", Schedule:=False
        EarliestTime = 0
    End If
End Sub

Private Sub StartOnTime()
    EarliestTime = Now + TimeSerial(0, 0, Keep_OnTimeSeconds)
    Application.OnTime EarliestTime:=EarliestTime, Procedure:="RunOnTime", Schedule:=True
End Sub

Private Sub RunOnTime()
    EarliestTime = 0
    Application.Run Keep_FunctionName
End Sub
 
Dernière édition:
Bonjour,
En effet, il y a 2 déclarations de temps dans le Module Depart. C'est la variable locale à la procédure qui est utilisée.
De plus Dim temps As Date ne semble pas approprié. Alors peut-être que ça marche mais la doc dit:
Regarde la pièce jointe 1220755
Pour info, des fonctions qui font le job avec des arguments nommés pour plus de clarté.
VB:
Private EarliestTime As Variant
Private Keep_FunctionName As String
Private Keep_OnTimeSeconds As Integer

Sub LaunchOnTime(FunctionName As String, OnTimeSeconds As Integer)
    Keep_FunctionName = FunctionName
    Keep_OnTimeSeconds = OnTimeSeconds
    Call StopOnTime
    Call StartOnTime
End Sub

Sub StopOnTime()
    If Not EarliestTime = 0 Then
        Application.OnTime EarliestTime:=EarliestTime, Procedure:="RunOnTime", Schedule:=False
        EarliestTime = 0
    End If
End Sub

Private Sub StartOnTime()
    EarliestTime = Now + TimeSerial(0, 0, Keep_OnTimeSeconds)
    Application.OnTime EarliestTime:=EarliestTime, Procedure:="RunOnTime", Schedule:=True
End Sub

Private Sub RunOnTime()
    EarliestTime = 0
    Application.Run Keep_FunctionName
End Sub
Mille merci Dudu2 d'avoir consacré quelques instants pour me proposer ce code bien plus cadré. je vais m'empresser de le tester.
Bonne fin de Week - End.
Cordialement.
 
Bonjour,

Au quotidien, c'est un collègue qui utilisera ce fichier.

Ainsi dès l'ouverture de ce dernier une macro se déclenchera puis le fichier se refermera sans aucune intervention de sa part.

Merci de votre intervention.

Bonne fin de Week-End.

Cordialement
Bonjour,
Je reste toujours aussi dubitatif...
Dans le Workbook_Open, le code de la macro
Et à la fin du code, un Workbook.close (avec enregistrement éventuel) suffirait, non?

Pourquoi faire simple, alors qu'on peut faire compliqué... 🙂
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
1 K
Retour