Methode OnTime bloquée lorsqu'une cellule est active

leop93

XLDnaute Occasionnel
Bonjour

J'ai un soucis avec la méthode OnTime. Une fois que l'on sélectionne une cellule dans une feuille et que la barre clignotante de saisie apparaît, le compte à rebours (via OnTime) n'est plus effectif mais le temps continu d'être compté.

Une fois qu'on quitte la cellule active, si le temps du compte à rebours s'est écoulé le temps que la cellule était active, la macro fera l'action immédiatement.

Mais ça pose soucis car j'aimerais justement que l'action s'effectue si une personne reste trop longtemps sur une cellule active... (soucis de partages sur un réseau, et de sauvegardes....)

Je vous ai joint le classeur en pièce jointe avec de plus amples explications.

Bonne journée

Leop93
 

Pièces jointes

  • OnTimeFermeInactif2.1.xls
    44 KB · Affichages: 56

youky(BJ)

XLDnaute Barbatruc
Re : Methode OnTime bloquée lorsqu'une cellule est active

Bonjour leop93,
Pas facile en effet tant que la cellule n'est pas validée. Perso j'avais pas réussit il y a qlq années
Pour le double_click tu peux l'interdir en mettant dans l'évenement ..Cancel=True.
Peut être que certains auront une solution ?
Bruno
 

leop93

XLDnaute Occasionnel
Re : Methode OnTime bloquée lorsqu'une cellule est active

Bonjour Youky

Effectivement, j'en bave depuis un moment sur ce soucis de OnTime bloqué lorsqu'une cellule est active... Et pas moyen de faire quoi que ce soit. Ca me rassure un petit peu que d'autres personnes se soient "cassées les dents" sur ce problème.

Le souci si j'interdit le double clic c'est que je ne peux plus rien entrer dans mon classeur... Donc je préfère avoir un problème OnTime lorsque l'utilisateur est parti de son PC avec une cellule active (chose qui n'arrivera pas trop souvent j'espère) qu'un fichier sans aucune modification possible. Tu comprendras. :D

Leop93
 

job75

XLDnaute Barbatruc
Re : Methode OnTime bloquée lorsqu'une cellule est active

Bonjour leop93, Bruno,

Je ne pense pas qu'il y ait de solution.

Quand une cellule est "active" (en mode édition) aucune macro ne peut être exécutée.

A+
 

leop93

XLDnaute Occasionnel
Re : Methode OnTime bloquée lorsqu'une cellule est active

Bonjour Job

Nos messages se sont croisés.

Je vais donc arrêter de me retourner le cerveau pour fixer ce soucis, espèrons que les utilisateurs de mon programme ne remarque pas cette "faille" pour garder la main plus longtemps que prévu sur le classeur partagé...

Leop93
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Methode OnTime bloquée lorsqu'une cellule est active

Bonjour.
Peut être y aurait il un moyen avec un vrai timer. Mais c'est très casse gueule. Il ne faut y appeler aucune méthode Excel, c'est le plantage assuré. Mais peut être un SendKey Escape pour quitter la cellule ?…
À +
 

MJ13

XLDnaute Barbatruc
Re : Methode OnTime bloquée lorsqu'une cellule est active

Bonjour à tous

En effet, le ontime, est assez difficile à gérer :(.

Sinon, 2 fichiers avec timer qui ferme le classeur après 60 secondes ou 2 minutes et redémarre en cas de saisie.
 

Pièces jointes

  • OnTimeSimpleV60Secondes.xls
    41 KB · Affichages: 45
  • OnTimeSimpleV2Minutesxlsm.xls
    48 KB · Affichages: 51

leop93

XLDnaute Occasionnel
Re : Methode OnTime bloquée lorsqu'une cellule est active

Bonjour Dranred, bonjour MJ

C'est vrai que la méthode OnTime est assez capricieuse et difficile à cerner.

@MJ, pour ton OnTime simple, est ce que tu pourrais me le modifier pour qu'il se lance que lorsqu'il y a un double clic donc une cellule active ? Et qu'il n'y ait qu'un bouton qui le remette à 0 ? Et pour finir, que si le compte à rebours arrive à 0, il se passe: Range("A1").Select ?

Bon après-midi

Leop93
 

Dranreb

XLDnaute Barbatruc
Re : Methode OnTime bloquée lorsqu'une cellule est active

Les instructions pour utiliser de vrais timer système écrits sur le modèle de celle en commentaire.
VB:
Public Declare Function SetTimer Lib "user32.dll" _
   (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Rem. Sub MonTimer(ByVal hwnd As Long, ByVal uMsg As Integer, ByVal idEvent As Integer, ByVal dwTime As Long)
Public Declare Function KillTimer Lib "user32.dll" _
   (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Mais encore une fois, peut être très dangereux. À n'exécuter en tant que timer au moins qu'à partir du moment où elle ne comporte plus la moindre erreur de syntaxe, sinon sortie immédiate et silencieuse d'Excel assurée.

P.S. et un bout de code qui en met un en oeuvre:
VB:
Sub Évènements()
Application.EnableEvents = Not Application.EnableEvents
BoutonMsg Application.EnableEvents, _
   "Traiter évènements", "Prise en charge des évènements RÉACTIVÉE", 6852, _
   "Ignorer évènements", "Prise en charge des évènements DÉSACTIVÉE", 1019
If Not UfÉvènements.Visible Then
   UfÉvènements.Afficher
   SetTimer 0, 0, 40, AddressOf TimerÉvèn
   End If
End Sub
Private Static Sub TimerÉvèn(ByVal hwnd As Long, ByVal uMsg As Integer, ByVal idEvent As Integer, ByVal dwTime As Long)
Dim ÉtatNoté As Boolean
If Application.EnableEvents Xor ÉtatNoté Then
   ÉtatNoté = Application.EnableEvents
   BoutonMsg ÉtatNoté, "Traiter évènements", "", 6852, "Ignorer évènements", "", 1019
   End If
If Not UfÉvènements.Visible Then KillTimer 0, idEvent Else UfÉvènements.MàJParTimer
End Sub
À +
 
Dernière édition:

leop93

XLDnaute Occasionnel
Re : Methode OnTime bloquée lorsqu'une cellule est active

Ah oui, là y'a du code ultra compliqué et apparemment pas mal "risqué"...

Je vais essayer de le comprendre comme il faut avant de l'appliquer, de toute façon c'est "juste" une optimisation de mon fichier, pas une chose indispensable... Même si elle serait la bien venue. :)
 

MJ13

XLDnaute Barbatruc
Re : Methode OnTime bloquée lorsqu'une cellule est active

Re

Voila une solution avec le double-clique.

Par contre, si tu y arrives avec la méthode de Dranreb que je salue :), cela m'intéresse.
 

Pièces jointes

  • OnTime_Simple_V60Sec_DblClick.xls
    40.5 KB · Affichages: 58

Dranreb

XLDnaute Barbatruc
Re : Methode OnTime bloquée lorsqu'une cellule est active

Alors si ça en intéresse, un exemple complet extrait d'un classeur toujours ouvert chez moi.
J'ai affecté la macro à un bouton de formulaire, mais l'idée c'est de l'affecter à un bouton de barre d'outils.
Je souhaitais un petit userform non modal qui m'affichait l'état de Application.EnableEvent avec possibilité de le basculer. Allez savoir pourquoi, j'y avais mis 6 images l'une sur l'autre d'un voyant dans tous ses états entre allumé et éteint, et un timer pour cadencer le changement. J'ai gardé le gadget, et m'en sers encore assez souvent.
Au contraire de OnTime, ça peut s'exécuter n'importe quand. Il n'y a pas trop de danger à ne toucher que du VBA (variables, contrôles) mais gare à ne déranger Excel pendant qu'il n'est pas prêt à exécuter des actions, ce qui est le cas quand la barre de formule est sélectionnée.
À +
 

Pièces jointes

  • UserformAttaquéParTimer.xls
    112.5 KB · Affichages: 46

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 187
dernier inscrit
ebenhamel