Difficultés avec .OnTime

Philippe

XLDnaute Occasionnel
Bonsoir à tous,

Je voudrai que mon classeur soit sauvegardé après 10 secondes d'inutilisation,
pour celà je fais:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.OnTime Now + TimeValue("00:00:10"), "liberer", , True
End sub

(la procédure "liberer" correspond à un Thisworkbook.save)

seulement voilà, à chaque modification la procédure est lancée et le classeur se sauvegarde de multiples fois.
Je pensais résoudre le problème ainsi:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

On Error Resume Next
Application.OnTime Now + TimeValue("00:00:10"), "liberer", , False '<--- ici on DEVRAIT désactiver la procédure précédente
On Error GoTo 0
Application.OnTime Now + TimeValue("00:00:10"), "liberer", , True '<--- Et ici on en lance une nouvelle
End Sub

Mais celà ne fonctionne pas...
Comment puis-je faire donc pour que la sauvegarde "automatique" ne se déclenche qu'après 10 secondes d'inactivité depuis le DERNIERE modif. ?

Merci d'avance pour vos ingénieux conseils.

A+
Philippe
 

JCGL

XLDnaute Barbatruc
Re : Difficultés avec .OnTime

Re,
Salut Pascal,
Salut Didier,

myDearFriend! à dit:
Eh bien moi, j'aime bien la méthode OnTime, même si elle souffre de quelques défauts,

Ouf tu me rassures parce que j'avais cru comprendre qu'il fallait bien penser à annuler le OnTime pour éviter la réouverture intempestive du fichier.

Mais si PascalXLD et mDF sont sur le coup Philippe n'a aucun souci à se faire

A+ et à Bientôt ;-)
 

myDearFriend!

XLDnaute Barbatruc
Re : Difficultés avec .OnTime

JCGL, Pascal

Ouarf, j'adore ton humour Pascal... :)

Cela dit, sérieusement les amis, ce n'est pas une question de niveau là. La méthode OnTime est franchement utilisable si on veille à respecter certaines précautions d'usage.

@+
 

Philippe

XLDnaute Occasionnel
Re : Difficultés avec .OnTime

Bonjour à tous,

la nuit porte conseil, en fait il suffit de "fixer" la date de début de procédure "en dur" et de la stocker (ici pour l'exemple en A1)



Private Sub Worksheet_SelectionChange(ByVal Target As Range)
fixdat = [A1]
On Error Resume Next
Application.OnTime fixdat, "enreg", , False <-- On va donc EFFECTIVEMENT annuler la procédure précédente ici, et le compteur va donc
repartir à zéro
On Error Resume Next

fixdat = Now + TimeValue("00:00:10")
[A1] = Format(fixdat, "hh:mm:ss") <-- on stocke l'heure de la dernière modif.
Application.OnTime fixdat, "enreg"
End Sub

Dans un module:

Sub enreg()
Thisworkbook.save 'ou Close en fct des besoins...
end sub


A+
Philippe
 

Pierrot93

XLDnaute Barbatruc
Re : Difficultés avec .OnTime

Bonjour à tous

Merci à Didier pour ces infos, je comprends un peu mieux le fonctionnement de la désactivation, je le trouvais pour le moins aléatoire... Mais je ne m'y prenais pas bien...Encore merci et bonne journée.
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : Difficultés avec .OnTime

Bonjour à tous,

Effectivement cela fonctionne sur un poste.

Pourras-tu nous faire un reporting après la mise en place sur le serveur et la mise en application par les 10 utilisateurs ?

Au plaisir de te lire
 

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 979
dernier inscrit
bderradji