XL 2013 La méthode Ontime de l'application objet a échoué

sr94

XLDnaute Occasionnel
Bonjour,

J'ai le message suivant dans un classeur :
La méthode Ontime de l'application objet a échoué

J'utilise cette macro depuis des mois et le problème est récent, J'ai uniquement ce message avec ontime, pas avec les autres macros. J'ai aussi parfois un message qui me dit que PERSONAL.XLSB est verouillé, je ne sais pas si c'est lié, la macro ci-dessous est dans le classeur.

dans le module :
Code:
Public HeureArrêt
Sub ProchainArret()
 HeureArrêt = Now + TimeValue("00:10:00")
 Application.OnTime HeureArrêt, "Fin"
 Sheets(1).[A1] = HeureArrêt
End Sub

Sub Fin()
  On Error Resume Next
  Application.OnTime HeureArrêt, Procedure:="Fin", Schedule:=False    'annule événnement
  ThisWorkbook.Close True
End Sub

dans thisworkbook :
Code:
Private Sub Workbook_Open()

 ProchainArret
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
 On Error Resume Next
 Application.OnTime HeureArrêt, Procedure:="Fin", Schedule:=False
 ProchainArret
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
   ThisWorkbook.Save
  'ThisWorkbook.Saved = True
  On Error Resume Next
  Application.OnTime HeureArrêt, Procedure:="Fin", Schedule:=False  ' annule événnement
End Sub

L'erreur semble venir de cette ligne :

Code:
Application.OnTime HeureArrêt, Procedure:="Fin", Schedule:=False

Avez vous une idée d'où cela peut venir ?

Merci beaucoup
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : La méthode Ontime de l'application objet a échoué

Bonjour.

Vérifiez à tout hasard si dans vba Outils, Options…, onglet Général, rubrique Récupération d'erreurs, "Arrêt sur toutes les erreurs" ne serait pas cochée au lieu d'une des deux autres.
Par ailleurs ça ne me parait pas très correct tout ça, on devrait pouvoir se passer des On Error Resume Next.
Dans le module:
VB:
Option Explicit
Public HeureArrêt

Sub ProchainArret()
HeureArrêt = Now + TimeValue("00:10:00")
Application.OnTime HeureArrêt, "Fin"
Sheets(1).[A1] = HeureArrêt
End Sub

Sub Fin()
HeureArrêt = Empty
ThisWorkbook.Close True
End Sub
dans ThisWorkbook:
VB:
Option Explicit

Private Sub Workbook_Open()
ProchainArret
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Application.OnTime HeureArrêt, Procedure:="Fin", Schedule:=False 'annule événnement
ProchainArret
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If VarType(HeureArrêt) = vbDate Then
   Application.OnTime HeureArrêt, Procedure:="Fin", Schedule:=False 'annule événnement
   End If
End Sub
À tester.
 

sr94

XLDnaute Occasionnel
Re : La méthode Ontime de l'application objet a échoué

C'était bien l'option, je pouvais toujours chercher.

Merci pour le code amélioré, comment peut-on le perfectionner pour :
- si le fichier se ferme tout seul : sauvegarde automatique
- si je ferme moi même il me demande si je veux enregistrer ?
- qu'il se ferme tout seul en cas d'inactivité sur le fichier excel



Cdt
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : La méthode Ontime de l'application objet a échoué

À priori, si je ne m'abuse, ça devrait déjà fonctionner comme ça, puisque si la fermeture est engagée par l'opérateur, on ne passe pas par le ThisWorkbook.Close SaveChanges:=True de la procédure Fin.
 

Dranreb

XLDnaute Barbatruc
Re : La méthode Ontime de l'application objet a échoué

C'est ce qu'il y avait dans vos spécifications 1 et 3:
- si le fichier se ferme tout seul : sauvegarde automatique
- si je ferme moi même il me demande si je veux enregistrer ?
- qu'il se ferme tout seul en cas d'inactivité sur le fichier excel
Si ça ne vous convient plus, enlevez le paramètre SaveChanges au Close.
 

Dranreb

XLDnaute Barbatruc
Re : La méthode Ontime de l'application objet a échoué

Dans quelle procédure ?
Que montre à ce moment là un espion sur HeureArrêt ?

d'haaaaccord ! ça vient de m'arriver aussi dans Workbook_SheetSelectionChange et HeureArrêt est vide.
Bon. Soit on cherche comment ça peut arriver qu'il soit vide soit on met le même test que dans la Workbook_BeforeClose

D'ailleurs ça peut arriver, de toute façon, en cas de réinitialisation du projet VBA.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : La méthode Ontime de l'application objet a échoué

Le même test que dans la Workbook_BeforeClose ? Vous ne savez pas faire ??
VB:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If VarType(HeureArrêt) = vbDate Then
   Application.OnTime HeureArrêt, Procedure:="Fin", Schedule:=False 'annule événnement
   End If
ProchainArret
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 888
Membres
103 404
dernier inscrit
sultan87