XL 2010 VBA désactiver OnTime BeforeClose

F22Raptor

XLDnaute Impliqué
Hello,
J'essaie d'appliquer ce code pour désactiver un OnTime prévu.

Application.OnTime ValeurDeTemps, "ProcedureTraitement", , False

je connais ma valeur de temps car je l'ai stockée dans une cellule (affichée au format hh:mm:ss).
Je fais donc Application.OnTime TimeValue(range("A1")), "ProcedureTraitement", , False

Mais il ne semble pas aimer les TimeValue : Erreur d'Exec 13 / Incompat de Type

Ca vous dit quelque chose sur le format particulier à utiliser dans le OnTime ?

Ci-joint un fichier test :
il lance un Ontime à l'ouverture (exéc dans 20 sec)
Et met l'heure dans A1

L'idée est donc de désactiver à la fermeture, et ça bugge !
J'ai mis les infos dans le fichier


Thx ! :)
 

Pièces jointes

  • AnnulerOntime.xlsm
    40.3 KB · Affichages: 14
Dernière édition:

eriiic

XLDnaute Barbatruc
Bonjour,

première chose à faire, fournir la propriété voulue et ne pas laisser vba le faire pour toi : range("A1").value
Déjà tu seras sûr qu'il reçoit ce que tu veux.

car je l'ai stockée dans une cellule (affichée au format hh:mm:ss).
Excel et vba se moquent du format, l'affichage voulu ce n'est que pour toi. Et ça ne change pas sa valeur si elle n'est pas du bon type.
Par contre vba n'aime pas recevoir du texte (aligné à gauche) quand il veut un nombre (aligné à droite).
Assure-toi donc du contenu de ta cellule.
Pourquoi dans une cellule ? Tu peux avoir fermé le fichier et tu veux conserver cette valeur ?
Si ce n'est pas le cas tu peux te contenter de le garder dans une variable Public déclaré avant les Sub dans un module Standard.
eric
 
Dernière édition:

F22Raptor

XLDnaute Impliqué
Ayé !
J'ai trouvé : TimeValue prend une chaîne de texte "hh:mm:ss", pas un nombre.
Or, en A1, il y a un nombre (du genre 0.69 pour afficher 16:33:36 en hh:mm:ss).

Du coup, je passe par une variable MonHeure as String :
Dim MonHeure as String
MonHeure = Format (Range("A1").value , "hh:mm:ss")

Application.OnTime TimeValue(MonHeure), "ProcedureTraitement", , False

Et ça marche !

Je ne sais pas s'il y a moyen de faire plus propre que la variable, pour directement faire interpréter le contenu de A1 comme une String hh:mm:ss.
En tout cas, TimeValue (Format (Range("A1").value , "hh:mm:ss")) ne fonctionne pas.
 

eriiic

XLDnaute Barbatruc
Heuuu, tu réalises ce que tu fais ? :)
Tu as ton heure en numérique telle que l'attend OnTime, et tu la convertis en chaine pour la reconvertir en numérique...
Essaie donc avec ça :
VB:
Application.OnTime Range("A1").value, "ProcedureTraitement", , False
Et cherche un tuto sur les variables, pour les utiliser correctement quand tu en as besoin comme ici. Là, ça serait encore plus propre.
eric
 

Statistiques des forums

Discussions
312 198
Messages
2 086 114
Membres
103 121
dernier inscrit
SophieS