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
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
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" <parci@invalid.fr> a écrit dans le message de news:
vhqt22pfig08hc3puuv8un0velaphgnge0@4ax.com...
On Sat, 1 Apr 2006 21:35:47 +0200, "GnarlyYoyo"
<yoann.duriaud@ifrance.fr> wrote:
Bonjour,
Je travaille en VBA depuis Excel.
J'ai créé une classe, avec en première ligne:
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
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é.
On Sat, 1 Apr 2006 23:33:40 +0200, "GnarlyYoyo"
<yoann.duriaud@ifrance.fr> 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é.
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é.
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é.
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" <parci@invalid.fr> a écrit dans le message de news:
ii20329l47so7opkdrus87vvpu399e6990@4ax.com...
On Sat, 1 Apr 2006 23:33:40 +0200, "GnarlyYoyo"
<yoann.duriaud@ifrance.fr> 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é.
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é.