Activer l'événement WorkSheet_Active à l'ouverture d'un fichier Ecel

Bonjour,
J'ai un fichier Excel avec une seule feuille.
Je souhaite déclencher l'événement WorkSheet_Active de cette feuille à l'ouverture du fichier pour effectuer certaines initialisations propres à cette feuille qui sans cela "plante" mon code.
j'ai essayé ce code sans succès :

Private Sub Workbook_Open()

    ' aucune des 2 lignes suivantes ne permettent d'activer l'événement "Worksheet_Activate" de "MaFeuille"
    Sheets("MaFeuille").Activate
    Sheets("MaFeuille").Select
End Sub

Dans le cas d'un fichier à 2 feuilles, j'ai bien trouvé une astuce en activant la 2ème feuille et en activant ensuite la 1ère. Pas très beau mais çà marche.

Private Sub Workbook_Open()
    Sheets("Feuille2").Activate
    Sheets("MaFeuille").Activate
End Sub

çà semble pourtant bien banal !
Merci pour votre aide.

Hello,

Il serait mieux d'inserer les initialisations à faire dans un module à part.

Tu fais appelle à ce module dans l'evenement Activate de la feuille et dans l'evenement Open du classeur.

Bonsoir Rag,
C'est ce que je fais, mais la macro majeure est (et doit être) appelée sur le worksheet_activate qui est le déclencheur de la macro.
Dit différemment, chaque fois que j'arrive sur cette feuille, je dois déclencher ma macro. Y compris donc à l'ouverture.
Je pourrais ajouter une feuille vide qui me servirait juste pour l'astuce de la double-activation (voir 1er message) et que je masquerais ensuite. Mais ce n'est pas très satisfaisant.

Bonjour Clr, Rag02700,

Pour cela, faire plutôt par Sheet_selectionchange().

Ainsi tu choisis n'importe quelle cellule de ta seule feuille qui aura pour but de lancer la macro cible.

Exemple: si tu choisis la cellule A1, de préférence une cellule non utilisée. En plaçant la ligne ci-dessous.

If Target.address = $A$1 then Call macrociblée

Bonjour X Cellus,

j'y ai bien pensé mais ce que je souhaite, c'est que le 1er événement déclenché sur la feuille soit le worksheet activate.
Ma raison : J'ai du code sur le Selection Change qui prend en compte des informations renseignées ... sur le worksheet activate.
Merci quand même.

Suite,

Cela n'a aucune importance que tu ais déjà du code sur cet événement. Tu peux mettre la ligne postée en premier puis finir cette ligne par un Exit sub.

Cela lancera ta macro cible et si A1 (ou autre case) ne corresponds pas à une cellule utilisée il fera le reste de ton code.

Ne pas oublier de renseigner aussi le workbook_open.

A nouveau,

Il faut au minimum 2 feuilles pour qu'un worksheet_activate soit opérationnel. Tout comme un worksheet_deactivate.

Quand il n'existe qu'une feuille, elle est active de fait.

Oui, c'est bien ce que j'ai pu constater.
J'avais déjà utilisé cette solution.
Mais j'aurais aimé (on peut rêver) avoir une solution sans bidouille, ou plus exactement avec un code non dispersé.

J'avais aussi tenté

Private Sub Workbook_Open()

    Sheets("MaFeuille").Visible = False
    Sheets("MaFeuille").Visible = True
End Sub

qui évidemment ne marche pas : Une feuille au moins doit être visible...

Bonjour,

La solution est :

1- de rendre publique la procédure relative à l'événement Worksheet_Activate() de votre feuille en enlevant le "Private"

Sub Worksheet_Activate()
    'Votre procédure
End Sub

2- d'appeler la procédure associée dans Workbook_Open() via l'objet feuille correspondant à votre nom de feuille (par défaut "Feuil1")

Private Sub Workbook_Open()
    Feuil1.Worksheet_Activate
End Sub

Super,
c'est exactement ce que je cherchais : simple et robuste.
Merci pour avoir rendu Publique votre astuce et mon WorkSheet_Activate .

Je résume et complète ce qui a été dit dans les échanges sur ce fil :

- ll faut au minimum 2 feuilles pour qu'un WorkSheet_Activate soit opérationnel. Tout comme un WorkSheet_Deactivate.
Quand il n'existe qu'une feuille, elle est active de fait.

On ne passera donc jamais dans le WorkSheet_Activate (sauf en appelant la procédure comme l'indique Thev).
On peut être surpris de passer dans tous les autres événements de la feuille (Worksheet_SelectionChange ...) sans jamais passer dans le WorkSheet_Activate.

Attention : si vous avez 2 feuilles avec du code sur le WorkSheet_Activate de la 1ère feuille (qui sera donc activé lors du passage de la 2ème feuille à la 1ère), si vous supprimez la 2ème feuille, plus d'activation de votre code

A nouveau,

Autant passer directement par le workbook_open pour lancer ta macro cible.

Car de toute façon ce n'est qu'un One-shot. Même en étant Public, tu n'auras pas de réactivation de la feuille. Notamment si un autre classeur est ouvert et vise le classeur comportant une seule feuille.

Il faudrait alors refermer ce dernier pour de nouveau activer la feuille. Contrairement aux autres événements sélection_change voire change qui réactiveront ad libitum la première feuille. Sans fermer le premier classeur.

Rechercher des sujets similaires à "activer evenement worksheet active ouverture fichier ecel"