Problème Application.EnableEvents

Bonjour,

J'aimerais savoir lorsque j'utilise la fonction VBA Application.EnableEvents et je la déclare à True cela fonctionne bien.

Par contre lorsque je met la fonction à False; je ne suis plus capable de la mettre à True, elle est toujours False.

De plus lorsque je ferme le fichier, le VBAProject demeure avec le nom du fichier que j'utilise et je dois fermer Excel pour le faire disparaître.

Je ne suis plus capable d'utiliser la fonction si je ne ferme pas Excel, elle demeure toujours à False.

J'ai mis un fichier vide en exemple avec le code VBA pour la fonction.

Merci,

Oiseau Bleu

Bonjour,

La valeur par défaut est True. Tu as donc inverser !...

Il faut être prudent avec son utilisation, comme tu as pu le constater.

Sinon dans ton exemple, il n'est pas utile d'utiliser cette propriété.

Cdlt.

Bonsoir oiseaubleu,

Application.EnableEvents = False inhibe la détection des évènements au niveau de l'application Excel. C'est à dire que toutes procédures évènementielles (de type SelectionChange, BeforeDoubleClick, Worksheet_BeforeRightClick; Calculate, etc.) sont inactives.

Votre procédure se termine par Application.EnableEvents = False. Vous désactivez donc la détection de tout évènement dans Excel. Par conséquent, vous ne pouvez plus ré-exécuter Worksheet_SelectionChange puisque les évènements sont inhibés.

En général on utilise plutôt le contraire :

  • on débute par un "Application.EnableEvents = False"

-> cela permet de ne pas relancer la même procédure évènementielle que celle que l'on est en train d'exécuter

  • et à la fin de la procédure, on réactive par un "Application.EnableEvents = True"

Bonsoir,

D'abord n'appelle pas tout et n'importe quoi fonction. Fonctiondésigne une procédure qui renvoie un résultat, et tu utilises une fonction pour récupérer le résultat qu'elle renvoie et l'utiliser ailleurs.

Ici tu utilises une instruction définissan une propriété. Savoir ce qu'est tel ou tel composant te permettra de t'y retrouver plus vite en VBA...

EnableEvents est une propriétéde l'objet Application qui définit si l'utilisation d'évènements est ou non autorisée.

Sa valeur par défaut est True. Donc quand tu ouvres Excel cette propriété est à True. Ce qui signifie que les évènements sont autorisés, donc que les procédures évènementielles se déclencheront systématiquement à la survenance de l'évènement qui les concerne.

Tu n'avait donc nul besoin de la redéfinir à True en début de procédure !

S'agissant d'un SelectionChange au cours duquel tu ne fais qu'afficher un message sans déplacer la sélection (ce qui aurait déclenché une boucle d'évènements infinie), tu n'as non plus nul besoin de la définir à False.

Par contre, si tu la définis à False en fin de procédure, c'en est fini des évènements, dans tous les classeurs ouverts et dans ceux qui seront ouvert dans la même application. Tant que tu n'auras pas fermé Excel. La propriété retrouvera sa valeur True par défaut à la prochaine ouverture d'Excel.

Cordialement.

edit : Salut à tous !

Bonsoir et merci pour vos réponses.

J'ai essayé de mettre l'instruction événementielle Application.EnableEvents = False au début de procédure et True à la fin mais cela ne fonctionne toujours pas.

Je ne comprends pas également pourquoi quand je ferme le fichier et je l'ouvre à nouveau j'ai 2 VBAproject avec le même nom?

J'ai un fichier dans lequel je clique sur un texte dans une cellule pour faire apparaître une description et je veux cliquer sur la même cellule pour faire disparaître la description.

Alors est-ce cette instruction qui me permet de faire ce genre travail?

Merci,

Oiseau Bleu

Salut l'Oiseau bleu,

salut l'équipe,

ça ne peut pas fonctionner comme tu le désires avec MSGBOX, laquelle est une boîte de dialogue qui attend que tu valides le message avant de rendre la main à VBA.

Si tu veux cliquer sur la même cellule pour effacer la description affichée dans une "sorte" de MSGBOX, il faudra passer par une Userform non modale (Aïe! ) voire d'autres contrôles...

En attendant, pour te faire la main, essaie ceci...

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
Application.EnableEvents = False
'
Target.Value = IIf(Target = "", "La cellule sélectionnée est : " & Target.Address(0, 0), "")
Target.Offset(1, 0).Select
'
Application.EnableEvents = True
'
End Sub

A+

Merci beaucoup pour votre assistance.

Oiseau Bleu

Rechercher des sujets similaires à "probleme application enableevents"