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.

10 réponses

1 2
Avatar
isabelle
bonjour bcar,

tu pourrais utiliser Workbook_Open

isabelle


Le 2010-07-26 12:00, bcar a écrit :
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.
Avatar
LSteph
Bonjour,

Si tu veux qu'on y voit quelquechose
Donne le code complet ThisWorkbook et Onglet concerné et le cas
échéant modules ou autre si appelés

Excel c'est le nom l'application, qu'entends tu par
je passe d'un excel à un autre.


veux tu dire feuille classeur ou plusieurs sessions..??

Cordialement.

--
LSteph

On 26 juil, 18:00, bcar wrote:
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 quan d
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.
Avatar
bcar
Merci pour vos premières réponses.
(je précise que tout se passe sous excel 2007)
Workbook_open ou workbook_activate : même combat.
(je passe d'un excel à un autre : j'ai plusieur fichier excel ouvert
(sous la même session / 1 seul process excel) et je passe de l'un à
l'autre)

En fait j'utiliser la formule ()de Jacques Boisgontier) :

Function ChampActif(c)
Application.Volatile
ChampActif Sheets(Application.Caller.Parent.Name).AutoFilter.Filters.Item _
(c.Column -
Sheets(Application.Caller.Parent.Name).Range("_FilterDataBase").Column +
1).On
End Function

pour colorier les headers des mes filtres automatiques.
Tout se passe bien sauf que les Workbook_open ou workbook_activate ne
sont plus executé si les macro sont activées automatiquement au
démarrage du classeur
(si je fais en sorte qu'excel me demande s'il faut activer les macro,
cela fonctionne, mais cette solution n'est pas acceptable)

Le problème semble venir du volatile puisque si je rend la fonction non
volatile les Workbook_open ou workbook_activate fonctionnent.

J'ai essayé en utilisant un paramètre trick : passer en paramètre de ma
fonction un paramètre qui ne sert à rien et qui pointe sur une fonction
d'excel qui est volatile (par exemple Maintenant()) mais si cela
fonctionne parfaitement pour des cellules, cela ne fonctionne pas pour
des formules de mise en forme conditionnelle.

Pour le moment j'en suis réduit à mettre une formule dans une ligne de
cellules superposées puis à m'appuyer sur les valeurs de cette ligne
pour faire ma mise en forme conditionnelle.

Avez vous connaissance de problèmes particulier avec volatile et
d'astuces pour les résoudre.
Ou avez vous une idée pour réaliser mon problème MEFcond d'un header de
filtre auto avec les fonction Workbook_open ou workbook_activate qui
fonctionne.

Merci

Le 26/07/2010 18:55, LSteph a écrit :
Bonjour,

Si tu veux qu'on y voit quelquechose
Donne le code complet ThisWorkbook et Onglet concerné et le cas
échéant modules ou autre si appelés

Excel c'est le nom l'application, qu'entends tu par
je passe d'un excel à un autre.


veux tu dire feuille classeur ou plusieurs sessions..??

Cordialement.

--
LSteph

On 26 juil, 18:00, bcar wrote:
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.



Avatar
LSteph
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.

Par ailleurs:
Attention
(si je fais en sorte qu'excel me demande s'il faut activer les macro,
cela fonctionne, mais cette solution n'est pas acceptable)



si cela suppose un seul instant mettre la sécurité au plus faible
tu ne semble pas réaliser le danger que tu cours, on peut te flinguer
complètement ton pc
avec deux ou trois instructions.

Si cela ne concerne que ton propre environnement tu peux utiliser
selfcert qui te posera la question une première fois et permettra de
rester sur moyen ensuite pour les classeurs certifiés./

si tu diffuse ton classeur

Dans la plupart des cas avec les nouvelles versions (>2K) les
paramêtres de sécurité sont par défaut sur élevé
ce qui ne laisse même pas le choix à l'utilisateur d'utiliser les
macros de ton classeur, elles sont désactivée d'emblée.

Il y a donc contrainte à remettre sur moyen pour redonner ce choix
légitime à l'utilisateur qui dans la majorité des cas ne sait pas
comment effectuer cette manipulation.
Ce n'est qu'à partir de cette condition que là tu peux utiliser les
codes (cf excelabo.net) permettant d'inviter l'utilisateur à activer
les macros sous peine de quoi il ne sera pas en mesure de voir les
feuilles autre que celle d'avertissement .

@+

--
LSteph



On 27 juil, 09:24, bcar wrote:
Merci pour vos premières réponses.
(je précise que tout se passe sous excel 2007)
Workbook_open ou workbook_activate : même combat.
(je passe d'un excel à un autre : j'ai plusieur fichier excel ouvert
(sous la même session / 1 seul process excel) et je passe de l'un à
l'autre)

En fait j'utiliser la formule ()de Jacques Boisgontier) :

Function ChampActif(c)
  Application.Volatile
  ChampActif =
Sheets(Application.Caller.Parent.Name).AutoFilter.Filters.Item _
  (c.Column -
Sheets(Application.Caller.Parent.Name).Range("_FilterDataBase").Column +
1).On
End Function

pour colorier les headers des mes filtres automatiques.
Tout se passe bien sauf que les Workbook_open ou workbook_activate ne
sont plus executé si les macro sont activées automatiquement au
démarrage du classeur
(si je fais en sorte qu'excel me demande s'il faut activer les macro,
cela fonctionne, mais cette solution n'est pas acceptable)

Le problème semble venir du volatile puisque si je rend la fonction non
volatile les Workbook_open ou workbook_activate fonctionnent.

J'ai essayé en utilisant un paramètre trick : passer en paramètre d e ma
fonction un paramètre qui ne sert à rien et qui pointe sur une foncti on
d'excel qui est volatile (par exemple Maintenant()) mais si cela
fonctionne parfaitement pour des cellules, cela ne fonctionne pas pour
des formules de mise en forme conditionnelle.

Pour le moment j'en suis réduit à mettre une formule dans une ligne d e
cellules superposées puis à m'appuyer sur les valeurs de cette ligne
pour faire ma mise en forme conditionnelle.

Avez vous connaissance de problèmes particulier avec volatile et
d'astuces pour les résoudre.
Ou avez vous une idée pour réaliser mon problème MEFcond d'un heade r de
filtre auto avec les fonction Workbook_open ou workbook_activate qui
fonctionne.

Merci

Le 26/07/2010 18:55, LSteph a écrit :



> Bonjour,

> Si tu veux qu'on y voit quelquechose
> Donne le code complet ThisWorkbook et Onglet concerné et le cas
> échéant modules ou autre si appelés

> Excel c'est le nom l'application, qu'entends tu par
>> je passe d'un excel à un autre.
>  veux tu dire feuille classeur ou plusieurs sessions..??

> Cordialement.

> --
> LSteph

> On 26 juil, 18:00, bcar wrote:
>> 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 q uand
>> 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 to ut en
>> conservant ma fonction volatile ?

>> Merci.- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -
Avatar
bcar
Je mettrais un lien dès que possible vers un fichier excel avec ce qu'il
faut dedans.

Pour la sécurité, je n'ai pas abaissé ma sécurité. Quand je dis qu'Excel
ne me demande pas d'autoriser les macro, c'est que soit j'ai signé mon
Excel avec un certificat soit que j'ai autorisé un répertoire bien
particulier (emplacement approuvé) pour réaliser quelques tests.

Merci

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.

Par ailleurs:
Attention
(si je fais en sorte qu'excel me demande s'il faut activer les macro,
cela fonctionne, mais cette solution n'est pas acceptable)



si cela suppose un seul instant mettre la sécurité au plus faible
tu ne semble pas réaliser le danger que tu cours, on peut te flinguer
complètement ton pc
avec deux ou trois instructions.

Si cela ne concerne que ton propre environnement tu peux utiliser
selfcert qui te posera la question une première fois et permettra de
rester sur moyen ensuite pour les classeurs certifiés./

si tu diffuse ton classeur

Dans la plupart des cas avec les nouvelles versions (>2K) les
paramêtres de sécurité sont par défaut sur élevé
ce qui ne laisse même pas le choix à l'utilisateur d'utiliser les
macros de ton classeur, elles sont désactivée d'emblée.

Il y a donc contrainte à remettre sur moyen pour redonner ce choix
légitime à l'utilisateur qui dans la majorité des cas ne sait pas
comment effectuer cette manipulation.
Ce n'est qu'à partir de cette condition que là tu peux utiliser les
codes (cf excelabo.net) permettant d'inviter l'utilisateur à activer
les macros sous peine de quoi il ne sera pas en mesure de voir les
feuilles autre que celle d'avertissement .

Avatar
manu
Bonjour,
Est-ce que l'instruction application.enableeventsúlse ne serait pas
présente qqpart dans ton code ?
manu.
Avatar
bcar
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.
Avatar
LSteph
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 sembl e
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 -
Avatar
bcar
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 -



Avatar
LSteph
Re,

Bien sûr! j'ai testé avant regardé ton code, lu tes précisions
appliqué la mefc et le filtre et abaissé la sécurité pour ne plus
avoir la question
refermé rouvert et le message s'affiche bien dans tous les cas.
J'ai même ouvert aussi depuis l'explorateur, ce qui est probablement
moins avisé certes que le menu fichier mais tout cela fonctionne tout
aussi bien le message s'affiche .

Je ne crois donc pas que cela vienne de là de toutes façons..ma
supposition est autre...:

... si tu ouvre excel, d'abord et que tu ouvres la version certifiée
de ton classeur ensuite seulement depuis le menu fichier d'excel, as-
tu toujours cette erreur?

...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...

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

Cordialement.

--
LSteph

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 -
1 2