OVH Cloud OVH Cloud

Module de classe (bis)

2 réponses
Avatar
anonymousA
Bonjour a tous et merci à tous (cracks ou autres) de m'aider car je ne sais
plus ou chercher l'info.

J'ai déjà posé la question hier, mais la réponse que j'ai eue d'Alain Cros
que je remercie à nouveau au passage ne me convient pas pour la raison
suivante:
Je sais que Combobox n'a pas d'evènement GetFocus (quoique qaund tu le crées
sur une worksheet et que tu vas dans le module de la feuille, il apparaissent
les évenements Got et LostFocus dans les possibilités evenementielles). Je
souhaite en fait profiter de l'ambivalence d'un combobox qui tout à la fois
est un combobox avec tous ces evenements (Click et les autres..) et aussi un
objet OLE avec les seuls évenements GetFocus et LostFocus.
En fait j'ai d'ailleurs un autre module de classe qui fait pointer le
combobox de ma worksheet vers un Public WithEvents FILTH as combobox. Ce
dernier pointage marche très bien.
C'est seulement quand je déclare un pointage vers un objet OLE qu'il y a un
problème et c'est bien tout mon problème.


Je rappelle ci-dessous les termes de mon programme :


Je declare un module de classe que j'appelle OleEventClass et qui contient
les instructions suivantes:

Public WithEvents FILTSH As OLEObject

Private Sub FILTSH_GotFocus()
MsgBox "got focus"
End Sub

Dans un module standard , je declare les instructions suivantes sachant que
"tutu" est le nom d'un combobox cree depuis la barre des controles et place
sur un worksheet.

Dim TABOLEOLE As New OleEventClass

Sub Macro1()

Dim ws As Worksheet

Set ws = ActiveWorkbook.ActiveSheet
Set TABOLEOLE.FILTSH = ws.OLEObjects("tutu")
End sub

A chaque fois, le programme se plante sur Set
TABOLEOLE.FILSH en m'envoyant
le message d'erreur 459 : l'objet ou la classe ne gere
pas le jeu d'evenements

La je seche !!
> >
> >Merci de votre aide

2 réponses

Avatar
Pierre Fauconnier
Bonsoir

Le problème vient du fait que tu ne peux pas gérer les évènements dans un
module standard. D'ailleurs, tu auras une erreur de syntaxe si tu tentes un
public withevents ...
dans un module standard

Par contre, tu peux sans problème créer un objet avec gestion évènementielle
dans un module de classe ( module de feuille par exemple).
Là, tu verras qu'un combobox ( de la boite à outils contrôles, pas de la
boite Formulaires) permet la gestion de son évènement GotFocus sans le
moindre problème...

Dès lors, c'est dans le module de classe de la feuille ( ou du userform )
qui le contient que tu pourras gérer les évènements de ton combobox. Et si
tu souhaites manipuler les propriétés de ce combo dans un module standard,
tu peux l'appeler comme étant un objet de ta feuille ou de ton userform, par
exemple feuil1.Combobox1... mais sans procédure évènementielle dans le
module standard...

Il découle de ceci que tu ne peux pas faire référence à un objet dont tu
gères les évènements dans un module standard.
Déclare ton objet OLE avec withEvents par exemple dans ton module
ThisWorkBook et gère-le comme un objet-propriété de thisworkbook

Cela étant, je n'ai pas compris le lien entre le combo et l'objet ole.

Cela convient-il?


--
Pierre Fauconnier ()
Les sept laids tuent ( Lewis Carol )
Remplacez nospam.nospam par pfi.be pour répondre. Merci



"anonymousA" a écrit dans le message
de news:
Bonjour a tous et merci à tous (cracks ou autres) de m'aider car je ne
sais

plus ou chercher l'info.

J'ai déjà posé la question hier, mais la réponse que j'ai eue d'Alain Cros
que je remercie à nouveau au passage ne me convient pas pour la raison
suivante:
Je sais que Combobox n'a pas d'evènement GetFocus (quoique qaund tu le
crées

sur une worksheet et que tu vas dans le module de la feuille, il
apparaissent

les évenements Got et LostFocus dans les possibilités evenementielles). Je
souhaite en fait profiter de l'ambivalence d'un combobox qui tout à la
fois

est un combobox avec tous ces evenements (Click et les autres..) et aussi
un

objet OLE avec les seuls évenements GetFocus et LostFocus.
En fait j'ai d'ailleurs un autre module de classe qui fait pointer le
combobox de ma worksheet vers un Public WithEvents FILTH as combobox. Ce
dernier pointage marche très bien.
C'est seulement quand je déclare un pointage vers un objet OLE qu'il y a
un

problème et c'est bien tout mon problème.


Je rappelle ci-dessous les termes de mon programme :


Je declare un module de classe que j'appelle OleEventClass et qui contient
les instructions suivantes:

Public WithEvents FILTSH As OLEObject

Private Sub FILTSH_GotFocus()
MsgBox "got focus"
End Sub

Dans un module standard , je declare les instructions suivantes sachant
que

"tutu" est le nom d'un combobox cree depuis la barre des controles et
place

sur un worksheet.

Dim TABOLEOLE As New OleEventClass

Sub Macro1()

Dim ws As Worksheet

Set ws = ActiveWorkbook.ActiveSheet
Set TABOLEOLE.FILTSH = ws.OLEObjects("tutu")
End sub

A chaque fois, le programme se plante sur Set
TABOLEOLE.FILSH en m'envoyant
le message d'erreur 459 : l'objet ou la classe ne gere
pas le jeu d'evenements

La je seche !!

Merci de votre aide






Avatar
anonymousA
ta réponse très complète m'intéresse. Ceci dit compte tenu de la relative
complexité du sujet et en raison peut-être du faible intérêt pour la très
grande majorité des utilisateurs de ce forum, puis-je me permettre de
communiquer directement avec toi à l'adresse e-mail dont je pense avoir
compris qu'elle est


si tu en es d'accord, Merci de me répondre sur ce message.


Bonsoir

Le problème vient du fait que tu ne peux pas gérer les évènements dans un
module standard. D'ailleurs, tu auras une erreur de syntaxe si tu tentes un
public withevents ...
dans un module standard

Par contre, tu peux sans problème créer un objet avec gestion évènementielle
dans un module de classe ( module de feuille par exemple).
Là, tu verras qu'un combobox ( de la boite à outils contrôles, pas de la
boite Formulaires) permet la gestion de son évènement GotFocus sans le
moindre problème...

Dès lors, c'est dans le module de classe de la feuille ( ou du userform )
qui le contient que tu pourras gérer les évènements de ton combobox. Et si
tu souhaites manipuler les propriétés de ce combo dans un module standard,
tu peux l'appeler comme étant un objet de ta feuille ou de ton userform, par
exemple feuil1.Combobox1... mais sans procédure évènementielle dans le
module standard...

Il découle de ceci que tu ne peux pas faire référence à un objet dont tu
gères les évènements dans un module standard.
Déclare ton objet OLE avec withEvents par exemple dans ton module
ThisWorkBook et gère-le comme un objet-propriété de thisworkbook

Cela étant, je n'ai pas compris le lien entre le combo et l'objet ole.

Cela convient-il?


--
Pierre Fauconnier ()
Les sept laids tuent ( Lewis Carol )
Remplacez nospam.nospam par pfi.be pour répondre. Merci



"anonymousA" a écrit dans le message
de news:
Bonjour a tous et merci à tous (cracks ou autres) de m'aider car je ne
sais

plus ou chercher l'info.

J'ai déjà posé la question hier, mais la réponse que j'ai eue d'Alain Cros
que je remercie à nouveau au passage ne me convient pas pour la raison
suivante:
Je sais que Combobox n'a pas d'evènement GetFocus (quoique qaund tu le
crées

sur une worksheet et que tu vas dans le module de la feuille, il
apparaissent

les évenements Got et LostFocus dans les possibilités evenementielles). Je
souhaite en fait profiter de l'ambivalence d'un combobox qui tout à la
fois

est un combobox avec tous ces evenements (Click et les autres..) et aussi
un

objet OLE avec les seuls évenements GetFocus et LostFocus.
En fait j'ai d'ailleurs un autre module de classe qui fait pointer le
combobox de ma worksheet vers un Public WithEvents FILTH as combobox. Ce
dernier pointage marche très bien.
C'est seulement quand je déclare un pointage vers un objet OLE qu'il y a
un

problème et c'est bien tout mon problème.


Je rappelle ci-dessous les termes de mon programme :


Je declare un module de classe que j'appelle OleEventClass et qui contient
les instructions suivantes:

Public WithEvents FILTSH As OLEObject

Private Sub FILTSH_GotFocus()
MsgBox "got focus"
End Sub

Dans un module standard , je declare les instructions suivantes sachant
que

"tutu" est le nom d'un combobox cree depuis la barre des controles et
place

sur un worksheet.

Dim TABOLEOLE As New OleEventClass

Sub Macro1()

Dim ws As Worksheet

Set ws = ActiveWorkbook.ActiveSheet
Set TABOLEOLE.FILTSH = ws.OLEObjects("tutu")
End sub

A chaque fois, le programme se plante sur Set
TABOLEOLE.FILSH en m'envoyant
le message d'erreur 459 : l'objet ou la classe ne gere
pas le jeu d'evenements

La je seche !!

Merci de votre aide