Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Workbook_Activate et Volatile

14 réponses
Avatar
bcar
Bonjour,

Mon classeur avec une fonction perso volatile n'execute pas le
Workbook_Activate au démarrage d'excel, par contre il le fait bien quand
je passe d'un excel à un autre.

Si je supprime le volatile, tout se passe bien.

Connaissez vous un remède ou une astuce pour palier ce problème tout en
conservant ma fonction volatile ?

Merci.

4 réponses

1 2
Avatar
LSteph
..oupss pas vu cela

Le problème c'est que l'on entre pas dans le Workbook_open



et pourquoi diable s'en priver?



On 27 juil, 14:57, bcar wrote:
Excel n'est pas lancé quand j'ouvre mon classeur, je double clique
simplement dessus. (Quand un classeur est déjà ouvert cela peut march er
si les macro on déjà été acceptées)

> L'erreur ne se produit pas chez moi

tu veux dire que la messagebox s'affiche chaque fois que tu ouvre le
classeur ?
Peut être qu'il faut que tu applique un filtre avant de sauver pour
avoir le mauvais comportement (par exemple dans nom, ne sélectionne que
les Bob (après tu pourras sauver, quitter, relancer et ne pas avoir de
messagebox)

> Sinon. Je te suggèrerais  ceci dans le Workbook_open
> Calculate

Le problème c'est que l'on entre pas dans le Workbook_open (j'ai bien
mis des debug.print partout).

> msgbox application.enableevents

Merci pour l'idée, j'ai vérifié, les events sont actifs

Par contre en continuant à tester je maperçois qu'une fonction volati le
a vraiment un comportement bizarre, si je rajoute un
Debug.Print "toto" dans ma fonction champActif et que je sauve (sans
avoir forcé l'exécution de la fonction), à la prochaine ouverture l a
messagebox s'affichera,
mais si la fonction s'execute, par exemple en modifiant un filtre auto
et que je sauve après, à la prochaine ouverture, la messagebox ne
s'ouvrira pas

Le 27/07/2010 14:20, LSteph a écrit :



> re,

> L'erreur ne se produit pas chez moi  sur ce classeur, l'activate rest e
> actif . (Ton fichier tu l'ouvre bien depuis le menu fichier ouvrir
> d'excel?)

> Sinon. Je te suggèrerais  ceci dans le Workbook_open

> Calculate

> Volatile force la fonction à s'executer à chaque recalcul
> ainsi si on lance un recalcul juste avant cela devrait le faire.

> Mais je crains qu'autre chose ne désactive les evennements pour
> verifier ce point
> dans ton perso.xls tu pourrais mettre ceci dans un module standard

> Sub testEvent()
> msgbox application.enableevents
> end sub

> A executer lorsque l'erreur se produit pour vérifier si les
> evennements sont actifs ou non

> Cordialement

> --
> LSteph

> On 27 juil, 13:49, bcar wrote:
>> Voilà un fichier exemple minimaliste de ce qui se passe.

>>http://www.cijoint.fr/cjlink.php?file=cj201007/cijYxccIbs.xlsm

>> Il y a quelques opération à réaliser manuellement, mais il me se mble
>> avoir tout décrit.

>> Merci pour votre aide.

>> Le 27/07/2010 12:51, LSteph a écrit :

>>> Bonjour,

>>> Oui mais là tu ne nous donne qu'une fonction qui va être appelé e
>>> ce qu'on veut voir (ca doit etre là que se pose souci) c'est
>>> l'enchainement des procèdures évennementielles de ton projet au
>>> complet. Dans l'alternative, (si on ne trouve pas d'erreur sur cette
>>> voie) je laisserai quelqu'un d'autre poursuivre si c'est un bug
>>> exclusif à 2007.- Masquer le texte des messages précédents -

>> - Afficher le texte des messages précédents -- Masquer le texte de s messages précédents -

- Afficher le texte des messages précédents -
Avatar
bcar
Déjà, merci pour le temps que tu as passé sur ce problème,

j'ai essayé en abaissant la sécurité des macro, mais j'ai le même
comportement.

A moins que ce soit exclusif à la version 2007, je ne peux pas tester
cela. Quelqu'un peut-il essayer?


Je vais essayer de me trouver un excel 2003 pour tester si j'y ai le
même comportement.
En tout cas j'ai testé sur différents postes en 2007 et le même problème
se reproduit.

car en fait là je suppose que peut être dans ton perso ou
ailleurs , il y aurait un autre programme qui s'execute au démarrage
d'excel


Ben là je vois pas. Je me disais plutôt un bug de comportement d'excel
connu ou pas, il en existe quand même pas mal.

et pourquoi diable s'en priver?


Ca c'est la question !

Le 27/07/2010 18:00, LSteph a écrit :
..oupss pas vu cela

Le problème c'est que l'on entre pas dans le Workbook_open



et pourquoi diable s'en priver?



On 27 juil, 14:57, bcar wrote:
Excel n'est pas lancé quand j'ouvre mon classeur, je double clique
simplement dessus. (Quand un classeur est déjà ouvert cela peut marcher
si les macro on déjà été acceptées)

L'erreur ne se produit pas chez moi



tu veux dire que la messagebox s'affiche chaque fois que tu ouvre le
classeur ?
Peut être qu'il faut que tu applique un filtre avant de sauver pour
avoir le mauvais comportement (par exemple dans nom, ne sélectionne que
les Bob (après tu pourras sauver, quitter, relancer et ne pas avoir de
messagebox)

Sinon. Je te suggèrerais ceci dans le Workbook_open
Calculate



Le problème c'est que l'on entre pas dans le Workbook_open (j'ai bien
mis des debug.print partout).

msgbox application.enableevents



Merci pour l'idée, j'ai vérifié, les events sont actifs

Par contre en continuant à tester je maperçois qu'une fonction volatile
a vraiment un comportement bizarre, si je rajoute un
Debug.Print "toto" dans ma fonction champActif et que je sauve (sans
avoir forcé l'exécution de la fonction), à la prochaine ouverture la
messagebox s'affichera,
mais si la fonction s'execute, par exemple en modifiant un filtre auto
et que je sauve après, à la prochaine ouverture, la messagebox ne
s'ouvrira pas

Le 27/07/2010 14:20, LSteph a écrit :



re,



L'erreur ne se produit pas chez moi sur ce classeur, l'activate reste
actif . (Ton fichier tu l'ouvre bien depuis le menu fichier ouvrir
d'excel?)



Sinon. Je te suggèrerais ceci dans le Workbook_open



Calculate



Volatile force la fonction à s'executer à chaque recalcul
ainsi si on lance un recalcul juste avant cela devrait le faire.



Mais je crains qu'autre chose ne désactive les evennements pour
verifier ce point
dans ton perso.xls tu pourrais mettre ceci dans un module standard



Sub testEvent()
msgbox application.enableevents
end sub



A executer lorsque l'erreur se produit pour vérifier si les
evennements sont actifs ou non



Cordialement



--
LSteph



On 27 juil, 13:49, bcar wrote:
Voilà un fichier exemple minimaliste de ce qui se passe.





http://www.cijoint.fr/cjlink.php?file=cj201007/cijYxccIbs.xlsm





Il y a quelques opération à réaliser manuellement, mais il me semble
avoir tout décrit.





Merci pour votre aide.





Le 27/07/2010 12:51, LSteph a écrit :





Bonjour,







Oui mais là tu ne nous donne qu'une fonction qui va être appelée
ce qu'on veut voir (ca doit etre là que se pose souci) c'est
l'enchainement des procèdures évennementielles de ton projet au
complet. Dans l'alternative, (si on ne trouve pas d'erreur sur cette
voie) je laisserai quelqu'un d'autre poursuivre si c'est un bug
exclusif à 2007.- Masquer le texte des messages précédents -







- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -





- Afficher le texte des messages précédents -



Avatar
bcar
Bonjour,

J'ai essayé sur un excel 2000 et le problème ne se produit pas.

Et même mieux, il n'est pas besoin d'utiliser volatile pour obtenir le
comportement voulu, les MEFC sont recalculés automatiquement lors de
l'application d'un filtre.

Il faut que je me trouve un 2003 pour tester.

Le 28/07/2010 10:40, bcar a écrit :
Déjà, merci pour le temps que tu as passé sur ce problème,

j'ai essayé en abaissant la sécurité des macro, mais j'ai le même
comportement.

A moins que ce soit exclusif à la version 2007, je ne peux pas tester
cela. Quelqu'un peut-il essayer?


Je vais essayer de me trouver un excel 2003 pour tester si j'y ai le
même comportement.
En tout cas j'ai testé sur différents postes en 2007 et le même problème
se reproduit.

car en fait là je suppose que peut être dans ton perso ou
ailleurs , il y aurait un autre programme qui s'execute au démarrage
d'excel


Ben là je vois pas. Je me disais plutôt un bug de comportement d'excel
connu ou pas, il en existe quand même pas mal.

et pourquoi diable s'en priver?


Ca c'est la question !

Le 27/07/2010 18:00, LSteph a écrit :
..oupss pas vu cela

Le problème c'est que l'on entre pas dans le Workbook_open



et pourquoi diable s'en priver?



On 27 juil, 14:57, bcar wrote:
Excel n'est pas lancé quand j'ouvre mon classeur, je double clique
simplement dessus. (Quand un classeur est déjà ouvert cela peut marcher
si les macro on déjà été acceptées)

L'erreur ne se produit pas chez moi



tu veux dire que la messagebox s'affiche chaque fois que tu ouvre le
classeur ?
Peut être qu'il faut que tu applique un filtre avant de sauver pour
avoir le mauvais comportement (par exemple dans nom, ne sélectionne que
les Bob (après tu pourras sauver, quitter, relancer et ne pas avoir de
messagebox)

Sinon. Je te suggèrerais ceci dans le Workbook_open
Calculate



Le problème c'est que l'on entre pas dans le Workbook_open (j'ai bien
mis des debug.print partout).

msgbox application.enableevents



Merci pour l'idée, j'ai vérifié, les events sont actifs

Par contre en continuant à tester je maperçois qu'une fonction volatile
a vraiment un comportement bizarre, si je rajoute un
Debug.Print "toto" dans ma fonction champActif et que je sauve (sans
avoir forcé l'exécution de la fonction), à la prochaine ouverture la
messagebox s'affichera,
mais si la fonction s'execute, par exemple en modifiant un filtre auto
et que je sauve après, à la prochaine ouverture, la messagebox ne
s'ouvrira pas

Le 27/07/2010 14:20, LSteph a écrit :



re,



L'erreur ne se produit pas chez moi sur ce classeur, l'activate reste
actif . (Ton fichier tu l'ouvre bien depuis le menu fichier ouvrir
d'excel?)



Sinon. Je te suggèrerais ceci dans le Workbook_open



Calculate



Volatile force la fonction à s'executer à chaque recalcul
ainsi si on lance un recalcul juste avant cela devrait le faire.



Mais je crains qu'autre chose ne désactive les evennements pour
verifier ce point
dans ton perso.xls tu pourrais mettre ceci dans un module standard



Sub testEvent()
msgbox application.enableevents
end sub



A executer lorsque l'erreur se produit pour vérifier si les
evennements sont actifs ou non



Cordialement



--
LSteph



On 27 juil, 13:49, bcar wrote:
Voilà un fichier exemple minimaliste de ce qui se passe.





http://www.cijoint.fr/cjlink.php?file=cj201007/cijYxccIbs.xlsm





Il y a quelques opération à réaliser manuellement, mais il me semble
avoir tout décrit.





Merci pour votre aide.





Le 27/07/2010 12:51, LSteph a écrit :





Bonjour,







Oui mais là tu ne nous donne qu'une fonction qui va être appelée
ce qu'on veut voir (ca doit etre là que se pose souci) c'est
l'enchainement des procèdures évennementielles de ton projet au
complet. Dans l'alternative, (si on ne trouve pas d'erreur sur cette
voie) je laisserai quelqu'un d'autre poursuivre si c'est un bug
exclusif à 2007.- Masquer le texte des messages précédents -







- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -





- Afficher le texte des messages précédents -






Avatar
bcar
Bonjour,

J'ai enfin trouvé un excel 2003. Le problème n'existe pas sous 2003.
De plus comme sous 2000, il n'est nul besoin de déclarer la fonction en
volatile pour qu'elle fonctionne.

D'où ma conclusion : il existe un bug sous Excel 2007 relatif à
- mise en forme conditionnelle
- Volatile
- sécurité faible des macro, macro certifiée et repertoire certifié pour
les macro
Ce qui oblige à utiliser une astuce pour le contourner.

Le 29/07/2010 08:47, bcar a écrit :
Bonjour,

J'ai essayé sur un excel 2000 et le problème ne se produit pas.

Et même mieux, il n'est pas besoin d'utiliser volatile pour obtenir le
comportement voulu, les MEFC sont recalculés automatiquement lors de
l'application d'un filtre.

Il faut que je me trouve un 2003 pour tester.

Le 28/07/2010 10:40, bcar a écrit :
Déjà, merci pour le temps que tu as passé sur ce problème,

j'ai essayé en abaissant la sécurité des macro, mais j'ai le même
comportement.

A moins que ce soit exclusif à la version 2007, je ne peux pas tester
cela. Quelqu'un peut-il essayer?


Je vais essayer de me trouver un excel 2003 pour tester si j'y ai le
même comportement.
En tout cas j'ai testé sur différents postes en 2007 et le même problème
se reproduit.

car en fait là je suppose que peut être dans ton perso ou
ailleurs , il y aurait un autre programme qui s'execute au démarrage
d'excel


Ben là je vois pas. Je me disais plutôt un bug de comportement d'excel
connu ou pas, il en existe quand même pas mal.

et pourquoi diable s'en priver?


Ca c'est la question !

Le 27/07/2010 18:00, LSteph a écrit :
..oupss pas vu cela

Le problème c'est que l'on entre pas dans le Workbook_open



et pourquoi diable s'en priver?



On 27 juil, 14:57, bcar wrote:
Excel n'est pas lancé quand j'ouvre mon classeur, je double clique
simplement dessus. (Quand un classeur est déjà ouvert cela peut marcher
si les macro on déjà été acceptées)

L'erreur ne se produit pas chez moi



tu veux dire que la messagebox s'affiche chaque fois que tu ouvre le
classeur ?
Peut être qu'il faut que tu applique un filtre avant de sauver pour
avoir le mauvais comportement (par exemple dans nom, ne sélectionne que
les Bob (après tu pourras sauver, quitter, relancer et ne pas avoir de
messagebox)

Sinon. Je te suggèrerais ceci dans le Workbook_open
Calculate



Le problème c'est que l'on entre pas dans le Workbook_open (j'ai bien
mis des debug.print partout).

msgbox application.enableevents



Merci pour l'idée, j'ai vérifié, les events sont actifs

Par contre en continuant à tester je maperçois qu'une fonction volatile
a vraiment un comportement bizarre, si je rajoute un
Debug.Print "toto" dans ma fonction champActif et que je sauve (sans
avoir forcé l'exécution de la fonction), à la prochaine ouverture la
messagebox s'affichera,
mais si la fonction s'execute, par exemple en modifiant un filtre auto
et que je sauve après, à la prochaine ouverture, la messagebox ne
s'ouvrira pas

Le 27/07/2010 14:20, LSteph a écrit :



re,



L'erreur ne se produit pas chez moi sur ce classeur, l'activate reste
actif . (Ton fichier tu l'ouvre bien depuis le menu fichier ouvrir
d'excel?)



Sinon. Je te suggèrerais ceci dans le Workbook_open



Calculate



Volatile force la fonction à s'executer à chaque recalcul
ainsi si on lance un recalcul juste avant cela devrait le faire.



Mais je crains qu'autre chose ne désactive les evennements pour
verifier ce point
dans ton perso.xls tu pourrais mettre ceci dans un module standard



Sub testEvent()
msgbox application.enableevents
end sub



A executer lorsque l'erreur se produit pour vérifier si les
evennements sont actifs ou non



Cordialement



--
LSteph



On 27 juil, 13:49, bcar wrote:
Voilà un fichier exemple minimaliste de ce qui se passe.





http://www.cijoint.fr/cjlink.php?file=cj201007/cijYxccIbs.xlsm





Il y a quelques opération à réaliser manuellement, mais il me semble
avoir tout décrit.





Merci pour votre aide.





Le 27/07/2010 12:51, LSteph a écrit :





Bonjour,







Oui mais là tu ne nous donne qu'une fonction qui va être appelée
ce qu'on veut voir (ca doit etre là que se pose souci) c'est
l'enchainement des procèdures évennementielles de ton projet au
complet. Dans l'alternative, (si on ne trouve pas d'erreur sur cette
voie) je laisserai quelqu'un d'autre poursuivre si c'est un bug
exclusif à 2007.- Masquer le texte des messages précédents -







- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -





- Afficher le texte des messages précédents -









1 2