OVH Cloud OVH Cloud

Activation d'Excel & procédures évènementielles

8 réponses
Avatar
bn
Bonjour tout le monde,

Je cherche =E0 savoir s'il y a moyen de d=E9tecter quand Excel=20
est "r=E9-activ=E9" : c'est =E0 dire lorsque l'on retourne dans=20
la fen=EAtre excel apr=E8s avoir ferm=E9 une autre application=20
(ou apr=E8s avoir fait un ALT+TAB depuis une autre=20
application).

J'ai essay=E9 ces deux proc=E9dures =E9v=E8nementielles, mais=20
elles ne se d=E9clenchent que lorsque l'on change de=20
classeur dans Excel :

Private Sub App_WindowActivate(ByVal Wb As Excel.Workbook,=20
ByVal Wn As Excel.Window)
MsgBox "WindowActivate " & Wb.Name
End Sub

Private Sub App_WorkbookActivate(ByVal Wb As Workbook)
MsgBox "WorkbookActivate " & Wb.Name
End Sub

Voici donc ma question : est-ce que ce que je cherche =E0=20
faire est possible ? Si oui, comment ?

Merci d'avoir pris de votre temps pour me lire :-)

8 réponses

Avatar
Frédéric Sigonneau
Bonjour,

Ce que tu cherches à faire est, AMA, impossible : l'objet Application ne
déclenche aucun événement qui s'applique à lui-même (voir l'aide sur cet objet).
Selon ton objectif, d'autres approches sont peut-être envisageables...

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour tout le monde,

Je cherche à savoir s'il y a moyen de détecter quand Excel
est "ré-activé" : c'est à dire lorsque l'on retourne dans
la fenêtre excel après avoir fermé une autre application
(ou après avoir fait un ALT+TAB depuis une autre
application).

J'ai essayé ces deux procédures évènementielles, mais
elles ne se déclenchent que lorsque l'on change de
classeur dans Excel :

Private Sub App_WindowActivate(ByVal Wb As Excel.Workbook,
ByVal Wn As Excel.Window)
MsgBox "WindowActivate " & Wb.Name
End Sub

Private Sub App_WorkbookActivate(ByVal Wb As Workbook)
MsgBox "WorkbookActivate " & Wb.Name
End Sub

Voici donc ma question : est-ce que ce que je cherche à
faire est possible ? Si oui, comment ?

Merci d'avoir pris de votre temps pour me lire :-)


Avatar
bn
Bonjour,

Si je cherche à détecter quand Excel est ré-activé, c'est
parce que lorsqu'une UserForm (avec des textbox)
s'affiche, le curseur clignote dans la première TextBox.

Or, si l'on bascule dans d'autres applications (alt+tab)
et que l'on revient dans Excel, on ne voit plus le curseur
clignoter. J'ai constaté qu'il était toujours sur le même
TextBox en appuyant sur BackSpace, mais c'est la seule
touche qui fonctionne...

Je voulais donc faire un TextBox#.SetFocus pour remettre
le curseur correctement lorsqu'Excel était ré-activé.

Puisque tu penses que mon approche est impossible,
qu'envisagerais-tu pour résoudre mon problème ?

Merci et @+.

-----Message d'origine-----
Bonjour,

Ce que tu cherches à faire est, AMA, impossible : l'objet
Application ne

déclenche aucun événement qui s'applique à lui-même (voir
l'aide sur cet objet).

Selon ton objectif, d'autres approches sont peut-être
envisageables...


FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Avatar
bn
Rebonjour,

J'ai finalement suivi ton conseil et changé d'approche :p

J'ai constaté que bien qu'en apparence plus rien ne marche
sur le TextBox à part backspace, l'évènement KeyPress
répondait à toutes les touches...

J'ai donc essayé ceci :

Private Sub TextBox1_KeyPress(ByVal KeyAscii As
MSForms.ReturnInteger)
TextBox1.SetFocus
End Sub

Mais cela ne change rien; ce qui est logique dans le sens
où si backspace fonctionne, c'est que le focus est déjà
sur le TextBox.

Donc, pour remettre le curseur "en mode normal", j'ai
pensé à ceci :

Private Sub TextBox1_KeyPress(ByVal KeyAscii As
MSForms.ReturnInteger)
CommandButton1.SetFocus
TextBox1.SetFocus
End Sub

Et là, je suis bien content, puisque cela marche à la
perfection :)

Je ne m'explique toujours pas comment le focus
peut "s'altérer", mais puisque désormais je sais comment
le faire revenir dans le droit chemin ;) cela ne
m'empêchera plus de dormir ^^

Encore merci !
@+.
Avatar
Frédéric Sigonneau
Bonjour,

Je ne vois pas de solution simple à ce problème. Il n'est pas très contraignant
de recliquer dans le Textbox1 pour lui redonner le focus mais je comprends bien
que tu puisses souhaiter qq chose d'entièrement automatique...
Peut-être, à l'aide d'un timer et de fonctions API, serait-il possible de
détecter le moment où la fenêtre d'Excel redevient la fenêtre qui a le focus
dans Windows, mais ça me paraît très lourd à mettre en oeuvre pour un résultat à
mon avis non garanti (il n'est pas possible de programmer des threads avec VBA
et les timers finissent toujours par interférer avec les autres tâches, surtout
s'ils doivent fonctionner avec des intervalles courts).

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour,

Si je cherche à détecter quand Excel est ré-activé, c'est
parce que lorsqu'une UserForm (avec des textbox)
s'affiche, le curseur clignote dans la première TextBox.

Or, si l'on bascule dans d'autres applications (alt+tab)
et que l'on revient dans Excel, on ne voit plus le curseur
clignoter. J'ai constaté qu'il était toujours sur le même
TextBox en appuyant sur BackSpace, mais c'est la seule
touche qui fonctionne...

Je voulais donc faire un TextBox#.SetFocus pour remettre
le curseur correctement lorsqu'Excel était ré-activé.

Puisque tu penses que mon approche est impossible,
qu'envisagerais-tu pour résoudre mon problème ?

Merci et @+.

-----Message d'origine-----
Bonjour,

Ce que tu cherches à faire est, AMA, impossible : l'objet
Application ne

déclenche aucun événement qui s'applique à lui-même (voir
l'aide sur cet objet).

Selon ton objectif, d'autres approches sont peut-être
envisageables...


FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !




Avatar
michdenis
Bonjour Bn,

Une petite précision, le phénomène que tu observes est vrai seulement si ton formulaire est affiché dans une fenêtre
non-modale. Dans une fenêtre modale, le focus du contrôle "textbox" et le clignotement du curseur dans celui-ci est toujours
présent lorsque l'on revient à l'application que ce soit par Alt+ tab ou par la sélection de l'icône dans la barre des tâches
à l'aide de la souris.


Salutations!


"bn" a écrit dans le message de news:024001c35d8c$822e68b0$
Rebonjour,

J'ai finalement suivi ton conseil et changé d'approche :p

J'ai constaté que bien qu'en apparence plus rien ne marche
sur le TextBox à part backspace, l'évènement KeyPress
répondait à toutes les touches...

J'ai donc essayé ceci :

Private Sub TextBox1_KeyPress(ByVal KeyAscii As
MSForms.ReturnInteger)
TextBox1.SetFocus
End Sub

Mais cela ne change rien; ce qui est logique dans le sens
où si backspace fonctionne, c'est que le focus est déjà
sur le TextBox.

Donc, pour remettre le curseur "en mode normal", j'ai
pensé à ceci :

Private Sub TextBox1_KeyPress(ByVal KeyAscii As
MSForms.ReturnInteger)
CommandButton1.SetFocus
TextBox1.SetFocus
End Sub

Et là, je suis bien content, puisque cela marche à la
perfection :)

Je ne m'explique toujours pas comment le focus
peut "s'altérer", mais puisque désormais je sais comment
le faire revenir dans le droit chemin ;) cela ne
m'empêchera plus de dormir ^^

Encore merci !
@+.
Avatar
bn
Bonjour michdenis,

Fenêtre modale et non-modale ? Jamais entendu parler, va
falloir que je me renseigne ^_^'

En tout cas, merci pour cette précision TRES
interessante :)

@+

-----Message d'origine-----
Bonjour Bn,

Une petite précision, le phénomène que tu observes est
vrai seulement si ton formulaire est affiché dans une

fenêtre
non-modale. Dans une fenêtre modale, le focus du
contrôle "textbox" et le clignotement du curseur dans

celui-ci est toujours
présent lorsque l'on revient à l'application que ce soit
par Alt+ tab ou par la sélection de l'icône dans la barre

des tâches
à l'aide de la souris.


Salutations!


Avatar
michdenis
Bonjour BN,

À partir de la version excel 2000, il est possible de faire afficher un formulaire dans excel dans une fenêtre non modale ..


Fenêtre modale : tu dois obligatoirement répondre aux demandes de la fenêtre puisque l'application Excel n'est pas disponible
que ce soit pour sélectionner une cellule ou passer une commande via le menu de l'application excel.

Une fenêtre non modale est l'inverse ou même si le formulaire est affiché, l'application demeure toujours accessible et ce,
même si le formulaire est affiché

Commande : Userform.Show : Fenêtre modale
Userform.Show 0 : fenêtre non modale.

Si tu as une version excel 97, le site de Laurent Longre te permet avec l'utilisation d'api, d'obtenir le même résultat.


Salutations!




"bn" a écrit dans le message de news:001301c35db7$cec6f6d0$
Bonjour michdenis,

Fenêtre modale et non-modale ? Jamais entendu parler, va
falloir que je me renseigne ^_^'

En tout cas, merci pour cette précision TRES
interessante :)

@+

-----Message d'origine-----
Bonjour Bn,

Une petite précision, le phénomène que tu observes est
vrai seulement si ton formulaire est affiché dans une

fenêtre
non-modale. Dans une fenêtre modale, le focus du
contrôle "textbox" et le clignotement du curseur dans

celui-ci est toujours
présent lorsque l'on revient à l'application que ce soit
par Alt+ tab ou par la sélection de l'icône dans la barre

des tâches
à l'aide de la souris.


Salutations!


Avatar
bn
Bonjour michdenis,

Pour être certain de ne pas dire de bêtises, je viens de
reproduire ta manip.

Donc je confirme que lorsque je reviens à Excel, je ne
vois plus de curseur clignoter (cf autres messages pour
savoir ce qui se passe exactement).

J'ai observé ce phénomène étrange avec Excel 2000, sous
Windows NT 4 et 2000 (au cas où ce serait l'OS le
responsable...)

Ce n'est pas si grave que cela (puisque j'ai trouvé
comment contourner le problème, cf autres messages), mais
j'aimerais quand même savoir pourquoi cela marche bien
avec toi...

@+

-----Message d'origine-----
Bonjour Bn,

Le test que j'ai fait consistait à afficher un formulaire
avec l'aide de la commande suivante : Userform1.Show


Et pendant que le formulaire est ouvert, ouvrir une autre
application comme Notepad.exe, saisir du texte et revenir

avec le
raccourci clavier Alt+Tab.

Lorsque je reviens à l'application Excel, le curseur est
toujours clignotant dans le textbox du début et il est

visible.

Ce type de comportement est le propre d'une fenêtre
modale. Pourquoi tu n'obtiens pas ce résultat... je ne

sais pas .. il
faudrait peut être que tu décrives ce que tu fais comme
manipulation.


Je ne crois pas qu'il y ait une option à cocher pour
obtenir ce résultat.



Salutations!