OVH Cloud OVH Cloud

Erreur automation

4 réponses
Avatar
GnarlyYoyo
Bonjour,
Je travaille en VBA depuis Excel.
J'ai créé une classe, avec en première ligne:

Public WithEvents TextBox As TextBox

(je l'ai recopiée de l'exemple d'un livre)

Dès que j'essaye d'instancier la classe, je reçois le message suivant,
pointant sur la première ligne de ma classe:

"Erreur de compilation: L'objet n'est pas source d'évènements automation"

Connaissez-vous une explication pour ce message d'erreur?

Yoann

4 réponses

Avatar
parci
On Sat, 1 Apr 2006 21:35:47 +0200, "GnarlyYoyo"
wrote:

Bonjour,
Je travaille en VBA depuis Excel.
J'ai créé une classe, avec en première ligne:

Public WithEvents TextBox As TextBox



Public WithEvents TextBox As MSForms.TextBox
Avatar
GnarlyYoyo
Merci beaucoup!
Cela va me permettre d'écrire mon code beaucoup plus facilement.
Voici ce que j'essaye de faire: j'ai beaucoup de labels sur une feuille. Si
je clique sur un label, je veux qu'il devienne bleu.

Une solution consisterait à faire un controle ActiveX spécial dérivé du
label, mais je ne connais pas trop ce sujet.

Une autre solution consisterait à créer une classe pour récupérer
l'évènement MouseDown, et à associer à chaque label une instance de la
classe.
D'après ce que j'ai lu, il me semble que cette solution est impossible en
VBA, car elle nécessite d'utiliser des tableaux de labels sur la feuille.
Les instances de la classe doivent être déclarées en variables globales,
sinon elles ne répondent plus aux évènements. Il faut donc faire apparaître
dans le code le nom de tous les labels utilisés (d'où la nécessité
d'utiliser des tableaux).

Ou y a-t-il une autre solution à laquelle je ne pense pas?

Yoann




"parci" a écrit dans le message de news:

On Sat, 1 Apr 2006 21:35:47 +0200, "GnarlyYoyo"
wrote:

Bonjour,
Je travaille en VBA depuis Excel.
J'ai créé une classe, avec en première ligne:

Public WithEvents TextBox As TextBox



Public WithEvents TextBox As MSForms.TextBox



Avatar
parci
On Sat, 1 Apr 2006 23:33:40 +0200, "GnarlyYoyo"
wrote:

Merci beaucoup!
Cela va me permettre d'écrire mon code beaucoup plus facilement.
Voici ce que j'essaye de faire: j'ai beaucoup de labels sur une feuille. Si
je clique sur un label, je veux qu'il devienne bleu.

Une solution consisterait à faire un controle ActiveX spécial dérivé du
label, mais je ne connais pas trop ce sujet.



Possible en effet mais pas directement en VBA.

Une autre solution consisterait à créer une classe pour récupérer
l'évènement MouseDown, et à associer à chaque label une instance de la
classe.
D'après ce que j'ai lu, il me semble que cette solution est impossible en
VBA, car elle nécessite d'utiliser des tableaux de labels sur la feuille.
Les instances de la classe doivent être déclarées en variables globales,
sinon elles ne répondent plus aux évènements. Il faut donc faire apparaître
dans le code le nom de tous les labels utilisés (d'où la nécessité
d'utiliser des tableaux).

Ou y a-t-il une autre solution à laquelle je ne pense pas?



On peut le faire avec un tableau dynamique de classes liées à chaque
Label. Il suffit que ce tableau soit déclaré au niveau UserForm.
On peut aussi préférer utiliser une collection de classes (elle aussi
doit être déclaré au niveau UserForm), ce qui permettrait de
communiquer entre chaque classe liée à un label et la collection par
un événement correspondant au MouseDown. Cette dernière option - la
communication par événement - n'est permise qu'à partir d'Excel 2000.
Si j'ai bien compris c'est plus ou moins cette solution que tu as
utilisé.
Avatar
GnarlyYoyo
C'est bien ce que je fais maintenant, mais je n'avais pas pensé à utiliser
une collection globale avant qu'on me le suggère. Je créais des objets
globaux un à un, ce qui faisait donc autant de déclarations à écrire que de
labels sur la feuille.

Yoann



"parci" a écrit dans le message de news:

On Sat, 1 Apr 2006 23:33:40 +0200, "GnarlyYoyo"
wrote:

Merci beaucoup!
Cela va me permettre d'écrire mon code beaucoup plus facilement.
Voici ce que j'essaye de faire: j'ai beaucoup de labels sur une feuille.
Si
je clique sur un label, je veux qu'il devienne bleu.

Une solution consisterait à faire un controle ActiveX spécial dérivé du
label, mais je ne connais pas trop ce sujet.



Possible en effet mais pas directement en VBA.

Une autre solution consisterait à créer une classe pour récupérer
l'évènement MouseDown, et à associer à chaque label une instance de la
classe.
D'après ce que j'ai lu, il me semble que cette solution est impossible en
VBA, car elle nécessite d'utiliser des tableaux de labels sur la feuille.
Les instances de la classe doivent être déclarées en variables globales,
sinon elles ne répondent plus aux évènements. Il faut donc faire
apparaître
dans le code le nom de tous les labels utilisés (d'où la nécessité
d'utiliser des tableaux).

Ou y a-t-il une autre solution à laquelle je ne pense pas?



On peut le faire avec un tableau dynamique de classes liées à chaque
Label. Il suffit que ce tableau soit déclaré au niveau UserForm.
On peut aussi préférer utiliser une collection de classes (elle aussi
doit être déclaré au niveau UserForm), ce qui permettrait de
communiquer entre chaque classe liée à un label et la collection par
un événement correspondant au MouseDown. Cette dernière option - la
communication par événement - n'est permise qu'à partir d'Excel 2000.
Si j'ai bien compris c'est plus ou moins cette solution que tu as
utilisé.