OVH Cloud OVH Cloud

Evénement classeur ouvert

12 réponses
Avatar
Jean-Luc CAPEL
Bonjour à tous,
comment déclarer une proc dans un classeur de macros Excel, qui se lance à
toute ouverture de classeurs.
D'avance merci
JLuc

10 réponses

1 2
Avatar
Pounet95
Bonjour,
Mettre l'appel à la procédure ( ou aux procédures ) dans l'évènement
Workbook_Open de ThisWorkbook.
Pour atteindre ce module,ALT+F11 ouvre l'éditeur VBE
Si la fenêtre VBA Project n'est pas ouverte, faire CTRL+R
Double-clic sur le module Thisworkbook et dans la liste déroulante de gauche
sélectionner Workbook
Par défaut, l'évènement s'affiche et il n'y a plus qu'à y mettre les appels
aux procs

Bon courage

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"Jean-Luc CAPEL" a écrit dans le message de news:

Bonjour à tous,
comment déclarer une proc dans un classeur de macros Excel, qui se lance à
toute ouverture de classeurs.
D'avance merci
JLuc




Avatar
anomymousA
bonjour,

je ne suis pas sur que ce soit exactement la question de notre ami. Si je
comprends bien, il souhaite q'une procédure de son classeur se déclenche
chaque fois q'un autre classeur s'ouvre.
Les évenements gérés par thisworkbook ne peuvent détecter pas l'ouverture
d'un autre classeur stricto sensu. Pour y arriver , on peut faire appele à
l'evenement windowDeactivate car à l'ouverture d'un autre classeur, le
classeur contenant l'evenement windowDeactivate , pour peu qu'il était
actif, perd le focus.

On peut cependant mieux faire .

il faut déclarer un objet de type application dans un module de classe

Donc il faut déclarer dans ce classeur un module de classe appelé mettons
AppClassEvents

puis écrire la procédure suivante dans celui-ci

Public WithEvents Appl As Application

Private Sub Appl_WorkbookOpen(ByVal Wb As Workbook)

'ici mettre la procédure qu'on veut exécuter à l'ouverture d'un classeur. Il
est possible de ne la faire exécuter que par des classeurs spécifiques en
faisant une discrimination sur leurs noms ou autres. Pour cela utiliser les
propriétés de workbook en utilisant l'identifiant du classeur qui s'ouvre,
ici wb.

End Sub

Dans le module Thisworkbook du classeur contenant le module de classe, écrire,

Dim ApplicationClass As New AppEventClass

Private Sub Workbook_Open()

Set ApplicationClass.Appl = Application

End Sub


Et evidemment ouvrir le classeur contenant le module de classe.
Désormais, l'objet Aplication pointe sur ApplicationClass. Donc à
l'ouverture du classeur , la veille du module de classe sera déclenchée et
donc tous les futurs classeurs qui s'ouvriront feront l'objet d'un traitement
selon Private Sub Appl_WorkbookOpen(ByVal Wb As Workbook).

A+


Bonjour,
Mettre l'appel à la procédure ( ou aux procédures ) dans l'évènement
Workbook_Open de ThisWorkbook.
Pour atteindre ce module,ALT+F11 ouvre l'éditeur VBE
Si la fenêtre VBA Project n'est pas ouverte, faire CTRL+R
Double-clic sur le module Thisworkbook et dans la liste déroulante de gauche
sélectionner Workbook
Par défaut, l'évènement s'affiche et il n'y a plus qu'à y mettre les appels
aux procs

Bon courage

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"Jean-Luc CAPEL" a écrit dans le message de news:

Bonjour à tous,
comment déclarer une proc dans un classeur de macros Excel, qui se lance à
toute ouverture de classeurs.
D'avance merci
JLuc








Avatar
Michel Gaboly
Bonjour,

Pounet95 t'a déjà répondu, mais je n'ai pas compris la même chose que lui.

Si tu veux une procédure qui se lance à l'ouverture d'un classeur
quelconque, pas seulement celui qui contient le code, il faut utiliser
un événement de niveau application.

Pour ce faire, il faut créer un module de classe, nommé par exemple
"ClasseAppli" où on définit la classe "Xl" comme application :


Option Explicit
Public WithEvents Xl As Application


Une fois que c'est fait, "Xl" apparaît dans le menu déroulant d gauche
du module de classe.

Si on le sélectionne, le menu déroulant de droite du module, donne accès
à tous les événements de niveau application. Il faut utiliser ici
"WorkbookOpen" :


Private Sub Xl_WorkbookOpen(ByVal Wb As Workbook)
MsgBox Wb.Name ' A la place, ton code
End Sub


Pour que les événements de niveau application soient efectivements
disponibles, une initialisation doit être faite ainsi, dans un module
quelconque :


Sub InitAppli
Set App.Xl = Application
End Sub


En haut de ce module, une déclaration est nécessaire pour faire la
liaison entre la procédure d'initialisation et le module de classe
contenant le code associé aux événements de niveau appli :


Option Explicit
Dim App As New ClasseAppli ' doit correspondre précisément au nom donné
au module de classe.


Ces événements de niveau appli ne sont disponibles qu'après que la Sub
provoquant l'initialisation (ici InitAppli) ait été lancé.

Pour que le lancement soit automatique, place la déclaration et
l'initialisation dans le module ThisWorkbook, dans le code associé à
l'ouverture du classeur :


Option Explicit
Dim App As New ClasseAppli

Sub Workbook_Open()
Set App.Xl = Application
End Sub

Pour que cela fonctionne en permanence, il faut mettre ce code dans un
classeur ouvert systématiquement quand Excel est lancé, par exemple
Pesrso.xls, sous Windows.

Voilà ;-))


Bonjour à tous,
comment déclarer une proc dans un classeur de macros Excel, qui se lance à
toute ouverture de classeurs.
D'avance merci
JLuc





--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
Michel Gaboly
NB - Déjà posté à 14h09 (heure de Paris), mais le sujet avait disparu ;-((

Bonjour,

Pounet95 t'a déjà répondu, mais je n'ai pas compris la même chose que lui.

Si tu veux une procédure qui se lance à l'ouverture d'un classeur
quelconque, pas seulement celui qui contient le code, il faut utiliser
un événement de niveau application.

Pour ce faire, il faut créer un module de classe, nommé par exemple
"ClasseAppli" où on définit la classe "Xl" comme application :


Option Explicit
Public WithEvents Xl As Application


Une fois que c'est fait, "Xl" apparaît dans le menu déroulant d gauche
du module de classe.

Si on le sélectionne, le menu déroulant de droite du module, donne accès
à tous les événements de niveau application. Il faut utiliser ici
"WorkbookOpen" :


Private Sub Xl_WorkbookOpen(ByVal Wb As Workbook)
MsgBox Wb.Name ' A la place, ton code
End Sub


Pour que les événements de niveau application soient efectivements
disponibles, une initialisation doit être faite ainsi, dans un module
quelconque :


Sub InitAppli
Set App.Xl = Application
End Sub


En haut de ce module, une déclaration est nécessaire pour faire la
liaison entre la procédure d'initialisation et le module de classe
contenant le code associé aux événements de niveau appli :


Option Explicit
Dim App As New ClasseAppli ' doit correspondre précisément au nom donné
au module de classe.


Ces événements de niveau appli ne sont disponibles qu'après que la Sub
provoquant l'initialisation (ici InitAppli) ait été lancé.

Pour que le lancement soit automatique, place la déclaration et
l'initialisation dans le module ThisWorkbook, dans le code associé à
l'ouverture du classeur :


Option Explicit
Dim App As New ClasseAppli

Sub Workbook_Open()
Set App.Xl = Application
End Sub

Pour que cela fonctionne en permanence, il faut mettre ce code dans un
classeur ouvert systématiquement quand Excel est lancé, par exemple
Pesrso.xls, sous Windows.

Voilà ;-))

Bonjour à tous,
comment déclarer une proc dans un classeur de macros Excel, qui se lance à
toute ouverture de classeurs.
D'avance merci
JLuc





--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
Michel Gaboly
Bonjour anomymousA

Apparemmment nous sommes sur la même longueur d'onde : nous avons
répondu la même chose à la minute près ;-))


bonjour,

je ne suis pas sur que ce soit exactement la question de notre ami. Si je
comprends bien, il souhaite q'une procédure de son classeur se déclenche
chaque fois q'un autre classeur s'ouvre.
Les évenements gérés par thisworkbook ne peuvent détecter pas l'ouverture
d'un autre classeur stricto sensu. Pour y arriver , on peut faire appele à
l'evenement windowDeactivate car à l'ouverture d'un autre classeur, le
classeur contenant l'evenement windowDeactivate , pour peu qu'il était
actif, perd le focus.

On peut cependant mieux faire .

il faut déclarer un objet de type application dans un module de classe

Donc il faut déclarer dans ce classeur un module de classe appelé mettons
AppClassEvents

puis écrire la procédure suivante dans celui-ci

Public WithEvents Appl As Application

Private Sub Appl_WorkbookOpen(ByVal Wb As Workbook)

'ici mettre la procédure qu'on veut exécuter à l'ouverture d'un classeur. Il
est possible de ne la faire exécuter que par des classeurs spécifiques en
faisant une discrimination sur leurs noms ou autres. Pour cela utiliser les
propriétés de workbook en utilisant l'identifiant du classeur qui s'ouvre,
ici wb.

End Sub

Dans le module Thisworkbook du classeur contenant le module de classe, écrire,

Dim ApplicationClass As New AppEventClass

Private Sub Workbook_Open()

Set ApplicationClass.Appl = Application

End Sub


Et evidemment ouvrir le classeur contenant le module de classe.
Désormais, l'objet Aplication pointe sur ApplicationClass. Donc à
l'ouverture du classeur , la veille du module de classe sera déclenchée et
donc tous les futurs classeurs qui s'ouvriront feront l'objet d'un traitement
selon Private Sub Appl_WorkbookOpen(ByVal Wb As Workbook).

A+



Bonjour,
Mettre l'appel à la procédure ( ou aux procédures ) dans l'évènement
Workbook_Open de ThisWorkbook.
Pour atteindre ce module,ALT+F11 ouvre l'éditeur VBE
Si la fenêtre VBA Project n'est pas ouverte, faire CTRL+R
Double-clic sur le module Thisworkbook et dans la liste déroulante de gauche
sélectionner Workbook
Par défaut, l'évènement s'affiche et il n'y a plus qu'à y mettre les appels
aux procs

Bon courage

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"Jean-Luc CAPEL" a écrit dans le message de news:


Bonjour à tous,
comment déclarer une proc dans un classeur de macros Excel, qui se lance à
toute ouverture de classeurs.
D'avance merci
JLuc









--
Cordialement,

Michel Gaboly
www.gaboly.com



Avatar
Pounet95
Salut Michel, salut Anonymous
Effectivement, je ne l'avais pas vu comme cela. :o(((
Je pense que vous avez raison et que ce sera confirmé par le demandeur
bientôt.
Au plaisir

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"Michel Gaboly" a écrit dans le message de news:
%237$
NB - Déjà posté à 14h09 (heure de Paris), mais le sujet avait disparu ;-((

Bonjour,

Pounet95 t'a déjà répondu, mais je n'ai pas compris la même chose que lui.

Si tu veux une procédure qui se lance à l'ouverture d'un classeur
quelconque, pas seulement celui qui contient le code, il faut utiliser un
événement de niveau application.

Pour ce faire, il faut créer un module de classe, nommé par exemple
"ClasseAppli" où on définit la classe "Xl" comme application :


Option Explicit
Public WithEvents Xl As Application


Une fois que c'est fait, "Xl" apparaît dans le menu déroulant d gauche du
module de classe.

Si on le sélectionne, le menu déroulant de droite du module, donne accès à
tous les événements de niveau application. Il faut utiliser ici
"WorkbookOpen" :


Private Sub Xl_WorkbookOpen(ByVal Wb As Workbook)
MsgBox Wb.Name ' A la place, ton code
End Sub


Pour que les événements de niveau application soient efectivements
disponibles, une initialisation doit être faite ainsi, dans un module
quelconque :


Sub InitAppli
Set App.Xl = Application
End Sub


En haut de ce module, une déclaration est nécessaire pour faire la liaison
entre la procédure d'initialisation et le module de classe contenant le
code associé aux événements de niveau appli :


Option Explicit
Dim App As New ClasseAppli ' doit correspondre précisément au nom donné au
module de classe.


Ces événements de niveau appli ne sont disponibles qu'après que la Sub
provoquant l'initialisation (ici InitAppli) ait été lancé.

Pour que le lancement soit automatique, place la déclaration et
l'initialisation dans le module ThisWorkbook, dans le code associé à
l'ouverture du classeur :


Option Explicit
Dim App As New ClasseAppli

Sub Workbook_Open()
Set App.Xl = Application
End Sub

Pour que cela fonctionne en permanence, il faut mettre ce code dans un
classeur ouvert systématiquement quand Excel est lancé, par exemple
Pesrso.xls, sous Windows.

Voilà ;-))

Bonjour à tous,
comment déclarer une proc dans un classeur de macros Excel, qui se lance
à
toute ouverture de classeurs.
D'avance merci
JLuc





--
Cordialement,

Michel Gaboly
www.gaboly.com



Avatar
Michel Gaboly
;-))

Salut Michel, salut Anonymous
Effectivement, je ne l'avais pas vu comme cela. :o(((
Je pense que vous avez raison et que ce sera confirmé par le demandeur
bientôt.
Au plaisir




--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
anomymousA
bonjour Michel,

étonnant, non ?.

Cordialement


Bonjour anomymousA

Apparemmment nous sommes sur la même longueur d'onde : nous avons
répondu la même chose à la minute près ;-))


bonjour,

je ne suis pas sur que ce soit exactement la question de notre ami. Si je
comprends bien, il souhaite q'une procédure de son classeur se déclenche
chaque fois q'un autre classeur s'ouvre.
Les évenements gérés par thisworkbook ne peuvent détecter pas l'ouverture
d'un autre classeur stricto sensu. Pour y arriver , on peut faire appele à
l'evenement windowDeactivate car à l'ouverture d'un autre classeur, le
classeur contenant l'evenement windowDeactivate , pour peu qu'il était
actif, perd le focus.

On peut cependant mieux faire .

il faut déclarer un objet de type application dans un module de classe

Donc il faut déclarer dans ce classeur un module de classe appelé mettons
AppClassEvents

puis écrire la procédure suivante dans celui-ci

Public WithEvents Appl As Application

Private Sub Appl_WorkbookOpen(ByVal Wb As Workbook)

'ici mettre la procédure qu'on veut exécuter à l'ouverture d'un classeur. Il
est possible de ne la faire exécuter que par des classeurs spécifiques en
faisant une discrimination sur leurs noms ou autres. Pour cela utiliser les
propriétés de workbook en utilisant l'identifiant du classeur qui s'ouvre,
ici wb.

End Sub

Dans le module Thisworkbook du classeur contenant le module de classe, écrire,

Dim ApplicationClass As New AppEventClass

Private Sub Workbook_Open()

Set ApplicationClass.Appl = Application

End Sub


Et evidemment ouvrir le classeur contenant le module de classe.
Désormais, l'objet Aplication pointe sur ApplicationClass. Donc à
l'ouverture du classeur , la veille du module de classe sera déclenchée et
donc tous les futurs classeurs qui s'ouvriront feront l'objet d'un traitement
selon Private Sub Appl_WorkbookOpen(ByVal Wb As Workbook).

A+



Bonjour,
Mettre l'appel à la procédure ( ou aux procédures ) dans l'évènement
Workbook_Open de ThisWorkbook.
Pour atteindre ce module,ALT+F11 ouvre l'éditeur VBE
Si la fenêtre VBA Project n'est pas ouverte, faire CTRL+R
Double-clic sur le module Thisworkbook et dans la liste déroulante de gauche
sélectionner Workbook
Par défaut, l'évènement s'affiche et il n'y a plus qu'à y mettre les appels
aux procs

Bon courage

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"Jean-Luc CAPEL" a écrit dans le message de news:


Bonjour à tous,
comment déclarer une proc dans un classeur de macros Excel, qui se lance à
toute ouverture de classeurs.
D'avance merci
JLuc









--
Cordialement,

Michel Gaboly
www.gaboly.com






Avatar
anomymousA
re,

suis allé voir ton site . Pas mal.
Je trouve cependant que tu n'insistes pas assez( mais peut-être n'ai je pas
bien lu) sur le fait qu'une appli Excel peut toujours être piratée en raison
du manque flagrant de véritable sécurité fiable (algorithmes d'encryptage
bien faibles pour la potection VBA voire quasi nuls pour la protection d'un
classeur ou d'une feuille).

Je suis curieux de savoir comment tu protèges tes applis VBA si certaines
d'entre elles sont dans le domaine commercial. Moi même , je développe un peu
et ai au cours de mes recherches sur les différents sites glané quelques
infos.

Evidemment, je ne te demande de donner des détails sur un site aussi ouvert,
mais seulement d'énoncer des principes que peut-être tu aurais mis en oeuvre
et qui pourraient être utiles à tous..

A+

Cordialement.


;-))

Salut Michel, salut Anonymous
Effectivement, je ne l'avais pas vu comme cela. :o(((
Je pense que vous avez raison et que ce sera confirmé par le demandeur
bientôt.
Au plaisir




--
Cordialement,

Michel Gaboly
www.gaboly.com




Avatar
Michel Gaboly
Absolument incroyable ;-))))

bonjour Michel,

étonnant, non ?.

Cordialement



Bonjour anomymousA

Apparemmment nous sommes sur la même longueur d'onde : nous avons
répondu la même chose à la minute près ;-))



bonjour,

je ne suis pas sur que ce soit exactement la question de notre ami. Si je
comprends bien, il souhaite q'une procédure de son classeur se déclenche
chaque fois q'un autre classeur s'ouvre.
Les évenements gérés par thisworkbook ne peuvent détecter pas l'ouverture
d'un autre classeur stricto sensu. Pour y arriver , on peut faire appele à
l'evenement windowDeactivate car à l'ouverture d'un autre classeur, le
classeur contenant l'evenement windowDeactivate , pour peu qu'il était
actif, perd le focus.

On peut cependant mieux faire .

il faut déclarer un objet de type application dans un module de classe

Donc il faut déclarer dans ce classeur un module de classe appelé mettons
AppClassEvents

puis écrire la procédure suivante dans celui-ci

Public WithEvents Appl As Application

Private Sub Appl_WorkbookOpen(ByVal Wb As Workbook)

'ici mettre la procédure qu'on veut exécuter à l'ouverture d'un classeur. Il
est possible de ne la faire exécuter que par des classeurs spécifiques en
faisant une discrimination sur leurs noms ou autres. Pour cela utiliser les
propriétés de workbook en utilisant l'identifiant du classeur qui s'ouvre,
ici wb.

End Sub

Dans le module Thisworkbook du classeur contenant le module de classe, écrire,

Dim ApplicationClass As New AppEventClass

Private Sub Workbook_Open()

Set ApplicationClass.Appl = Application

End Sub


Et evidemment ouvrir le classeur contenant le module de classe.
Désormais, l'objet Aplication pointe sur ApplicationClass. Donc à
l'ouverture du classeur , la veille du module de classe sera déclenchée et
donc tous les futurs classeurs qui s'ouvriront feront l'objet d'un traitement
selon Private Sub Appl_WorkbookOpen(ByVal Wb As Workbook).

A+




Bonjour,
Mettre l'appel à la procédure ( ou aux procédures ) dans l'évènement
Workbook_Open de ThisWorkbook.
Pour atteindre ce module,ALT+F11 ouvre l'éditeur VBE
Si la fenêtre VBA Project n'est pas ouverte, faire CTRL+R
Double-clic sur le module Thisworkbook et dans la liste déroulante de gauche
sélectionner Workbook
Par défaut, l'évènement s'affiche et il n'y a plus qu'à y mettre les appels
aux procs

Bon courage

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"Jean-Luc CAPEL" a écrit dans le message de news:



Bonjour à tous,
comment déclarer une proc dans un classeur de macros Excel, qui se lance à
toute ouverture de classeurs.
D'avance merci
JLuc








--
Cordialement,

Michel Gaboly
www.gaboly.com





--
Cordialement,

Michel Gaboly
www.gaboly.com





1 2