portée variables dans Module de classe et Userform
6 réponses
Emcy
bonjour,
J'ai un Userfrom dans lequel j'ai des Label.
J'ai créer un module de classe pour simplifier la gestion de l'evenement
Click de chaque Label
A l'initialisation de mon Userform, j'affecte mes Label dans la variable
ListLabel()
Dans Mon Userform j'ai déclaré deux variable UserCaption et UserLabel
ce que je voudrais c'est que lorsque je clic sur un de mes Label, j'affecte
dans UserCaption la valeur de caption du Label selectionné et dans UserLabel
l'objet Label (selectionné)
Comment faire (je veux que tout le code apparaisse soit dans le userform
soit dans le module de classe : non pas dans le module qui appele le
userform) ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
anonymousA
Bonjour, meilleurs voeux
je ne suis pas sur de saisir exactement ta demande. Mais j'ai fait un petit exemple suivant qui illustre que l'ensemble des codes sont contenus à la fois dans le module du UF et dans celui du module de classe, le seul code situé dans un autre module étant l'appel au UF.
Dim arrlbl(1 To 2) As New Cls1 Public usercaption As String Public userlabel As MSForms.Label
Private Sub UserForm_Initialize()
Set arrlbl(1).lbl = Me.Label1 Set arrlbl(2).lbl = Me.Label2
End Sub
Dans un module standard
userform1.show
Je ne sais pas si ca peut t'aider et si ca correspond exactement à ta demande. Dans le cas contraire, renvoies une suite.
A+
Bonjour, meilleurs voeux
je ne suis pas sur de saisir exactement ta demande. Mais j'ai fait un
petit exemple suivant qui illustre que l'ensemble des codes sont
contenus à la fois dans le module du UF et dans celui du module de
classe, le seul code situé dans un autre module étant l'appel au UF.
je ne suis pas sur de saisir exactement ta demande. Mais j'ai fait un petit exemple suivant qui illustre que l'ensemble des codes sont contenus à la fois dans le module du UF et dans celui du module de classe, le seul code situé dans un autre module étant l'appel au UF.
Dim arrlbl(1 To 2) As New Cls1 Public usercaption As String Public userlabel As MSForms.Label
Private Sub UserForm_Initialize()
Set arrlbl(1).lbl = Me.Label1 Set arrlbl(2).lbl = Me.Label2
End Sub
Dans un module standard
userform1.show
Je ne sais pas si ca peut t'aider et si ca correspond exactement à ta demande. Dans le cas contraire, renvoies une suite.
A+
michdenis
Bonjour anonymousA,
MsgBox userabel.Caption & "/ " & userlabel.name A ) Il y a une faute d'orthographe : c'est UserLabel.Caption
B ) Lbl dans ton module de classe représente déjà le Label qui vient d'être cliqué. Pourquoi utilisé une seconde variable pour faire le travail ? Set userlabel = lbl
C ) Si tu utilises une variable déclarée dans un module de classe que ce soit le module de classe que tu as ajouté ou celui du formulaire ou des modules de feuille, cette variable est plutôt une "PROPRIÉTÉ" appartenant au module de classe où elle a été créée et à ce titre pour pouvoir y faire référence en dehors de son module, elle doit être précédée du nom de l'objet de ladite "Classe d'objet" .
D ) L'exemple que tu as donné transgresse à plus d'un égard les notions de base de la programmantion objet. Le fait que le msgbox affiche l'information demandée ne rend pas cet exemple plus acceptable !
C'était seulement pour le smilllmaidcck !!!
Salutations!
"anonymousA" a écrit dans le message de news: Bonjour, meilleurs voeux
je ne suis pas sur de saisir exactement ta demande. Mais j'ai fait un petit exemple suivant qui illustre que l'ensemble des codes sont contenus à la fois dans le module du UF et dans celui du module de classe, le seul code situé dans un autre module étant l'appel au UF.
Dim arrlbl(1 To 2) As New Cls1 Public usercaption As String Public userlabel As MSForms.Label
Private Sub UserForm_Initialize()
Set arrlbl(1).lbl = Me.Label1 Set arrlbl(2).lbl = Me.Label2
End Sub
Dans un module standard
userform1.show
Je ne sais pas si ca peut t'aider et si ca correspond exactement à ta demande. Dans le cas contraire, renvoies une suite.
A+
Bonjour anonymousA,
MsgBox userabel.Caption & "/ " & userlabel.name
A ) Il y a une faute d'orthographe : c'est UserLabel.Caption
B ) Lbl dans ton module de classe représente déjà le Label qui vient
d'être cliqué. Pourquoi utilisé une seconde variable pour faire le
travail ?
Set userlabel = lbl
C ) Si tu utilises une variable déclarée dans un module de classe que ce
soit le module de classe que tu as ajouté ou celui du formulaire ou des
modules de feuille, cette variable est plutôt une "PROPRIÉTÉ" appartenant
au module de classe où elle a été créée et à ce titre pour pouvoir y faire
référence en dehors de son module, elle doit être précédée du nom de
l'objet de ladite "Classe d'objet" .
D ) L'exemple que tu as donné transgresse à plus d'un égard les notions
de base de la programmantion objet. Le fait que le msgbox affiche
l'information demandée ne rend pas cet exemple plus acceptable !
C'était seulement pour le smilllmaidcck !!!
Salutations!
"anonymousA" <anonymousA@wanadoo.fr> a écrit dans le message de news: 1136284420.634312.84880@g49g2000cwa.googlegroups.com...
Bonjour, meilleurs voeux
je ne suis pas sur de saisir exactement ta demande. Mais j'ai fait un
petit exemple suivant qui illustre que l'ensemble des codes sont
contenus à la fois dans le module du UF et dans celui du module de
classe, le seul code situé dans un autre module étant l'appel au UF.
MsgBox userabel.Caption & "/ " & userlabel.name A ) Il y a une faute d'orthographe : c'est UserLabel.Caption
B ) Lbl dans ton module de classe représente déjà le Label qui vient d'être cliqué. Pourquoi utilisé une seconde variable pour faire le travail ? Set userlabel = lbl
C ) Si tu utilises une variable déclarée dans un module de classe que ce soit le module de classe que tu as ajouté ou celui du formulaire ou des modules de feuille, cette variable est plutôt une "PROPRIÉTÉ" appartenant au module de classe où elle a été créée et à ce titre pour pouvoir y faire référence en dehors de son module, elle doit être précédée du nom de l'objet de ladite "Classe d'objet" .
D ) L'exemple que tu as donné transgresse à plus d'un égard les notions de base de la programmantion objet. Le fait que le msgbox affiche l'information demandée ne rend pas cet exemple plus acceptable !
C'était seulement pour le smilllmaidcck !!!
Salutations!
"anonymousA" a écrit dans le message de news: Bonjour, meilleurs voeux
je ne suis pas sur de saisir exactement ta demande. Mais j'ai fait un petit exemple suivant qui illustre que l'ensemble des codes sont contenus à la fois dans le module du UF et dans celui du module de classe, le seul code situé dans un autre module étant l'appel au UF.
Dim arrlbl(1 To 2) As New Cls1 Public usercaption As String Public userlabel As MSForms.Label
Private Sub UserForm_Initialize()
Set arrlbl(1).lbl = Me.Label1 Set arrlbl(2).lbl = Me.Label2
End Sub
Dans un module standard
userform1.show
Je ne sais pas si ca peut t'aider et si ca correspond exactement à ta demande. Dans le cas contraire, renvoies une suite.
A+
Emcy
merci
"anonymousA" a écrit dans le message de news:
Bonjour, meilleurs voeux
je ne suis pas sur de saisir exactement ta demande. Mais j'ai fait un petit exemple suivant qui illustre que l'ensemble des codes sont contenus à la fois dans le module du UF et dans celui du module de classe, le seul code situé dans un autre module étant l'appel au UF.
Dim arrlbl(1 To 2) As New Cls1 Public usercaption As String Public userlabel As MSForms.Label
Private Sub UserForm_Initialize()
Set arrlbl(1).lbl = Me.Label1 Set arrlbl(2).lbl = Me.Label2
End Sub
Dans un module standard
userform1.show
Je ne sais pas si ca peut t'aider et si ca correspond exactement à ta demande. Dans le cas contraire, renvoies une suite.
A+
merci
"anonymousA" <anonymousA@wanadoo.fr> a écrit dans le message de news:
1136284420.634312.84880@g49g2000cwa.googlegroups.com...
Bonjour, meilleurs voeux
je ne suis pas sur de saisir exactement ta demande. Mais j'ai fait un
petit exemple suivant qui illustre que l'ensemble des codes sont
contenus à la fois dans le module du UF et dans celui du module de
classe, le seul code situé dans un autre module étant l'appel au UF.
je ne suis pas sur de saisir exactement ta demande. Mais j'ai fait un petit exemple suivant qui illustre que l'ensemble des codes sont contenus à la fois dans le module du UF et dans celui du module de classe, le seul code situé dans un autre module étant l'appel au UF.
Dim arrlbl(1 To 2) As New Cls1 Public usercaption As String Public userlabel As MSForms.Label
Private Sub UserForm_Initialize()
Set arrlbl(1).lbl = Me.Label1 Set arrlbl(2).lbl = Me.Label2
End Sub
Dans un module standard
userform1.show
Je ne sais pas si ca peut t'aider et si ca correspond exactement à ta demande. Dans le cas contraire, renvoies une suite.
A+
anonymousA
Bonjour,
A-exact, il s'agit d'une erreur d'orthographe.
B et C-En effet, j'ai omis dans la rapidité de la réponse qu'il est vrai qu'il est nécessaire de dénommer le module où se situe la variable donc qu'il convient d'écrire Set UserForm1.userlabel = lbl MsgBox UserForm1.userlabel.Caption & "/" & UserForm1.userlabel.Name Ceci dit, le seul interet de ce Set est l'affectation à une variable qu'en conséquence on peut réutiliser dans la suite pour une autre procédure , que cette dernière, d'ailleurs, appartienne au module du UF ou à un autre module. Le Msgbox , du coup , serait plus parlant si p.e il existait un commandbutton et que le click sur celui-ci déclencherait une proc contenant MsgBox UserForm1.userlabel.Caption & "/" & UserForm1.userlabel.Name auquel cas il serait visible que ce qui est contenu dans la variable userlabel est bien formellement identique au dernier label cliqué.
D-Qu'à celà ne tienne. Sois donc remercié par avance de m'énumerer les "plus d'un égard" . Je ne demande qu'à m'enrichir.
A+
Bonjour,
A-exact, il s'agit d'une erreur d'orthographe.
B et C-En effet, j'ai omis dans la rapidité de la réponse qu'il est
vrai qu'il est nécessaire de dénommer le module où se situe la
variable donc qu'il convient d'écrire Set UserForm1.userlabel = lbl
MsgBox UserForm1.userlabel.Caption & "/" & UserForm1.userlabel.Name
Ceci dit, le seul interet de ce Set est l'affectation à une variable
qu'en conséquence on peut réutiliser dans la suite pour une autre
procédure , que cette dernière, d'ailleurs, appartienne au module du
UF ou à un autre module. Le Msgbox , du coup , serait plus parlant si
p.e il existait un commandbutton et que le click sur celui-ci
déclencherait une proc contenant MsgBox UserForm1.userlabel.Caption &
"/" & UserForm1.userlabel.Name auquel cas il serait visible que ce qui
est contenu dans la variable userlabel est bien formellement identique
au dernier label cliqué.
D-Qu'à celà ne tienne. Sois donc remercié par avance de m'énumerer
les "plus d'un égard" . Je ne demande qu'à m'enrichir.
B et C-En effet, j'ai omis dans la rapidité de la réponse qu'il est vrai qu'il est nécessaire de dénommer le module où se situe la variable donc qu'il convient d'écrire Set UserForm1.userlabel = lbl MsgBox UserForm1.userlabel.Caption & "/" & UserForm1.userlabel.Name Ceci dit, le seul interet de ce Set est l'affectation à une variable qu'en conséquence on peut réutiliser dans la suite pour une autre procédure , que cette dernière, d'ailleurs, appartienne au module du UF ou à un autre module. Le Msgbox , du coup , serait plus parlant si p.e il existait un commandbutton et que le click sur celui-ci déclencherait une proc contenant MsgBox UserForm1.userlabel.Caption & "/" & UserForm1.userlabel.Name auquel cas il serait visible que ce qui est contenu dans la variable userlabel est bien formellement identique au dernier label cliqué.
D-Qu'à celà ne tienne. Sois donc remercié par avance de m'énumerer les "plus d'un égard" . Je ne demande qu'à m'enrichir.
A+
michdenis
Bonjour anonymousA,
| Sois donc remercié par avance de m'énumerer | les "plus d'un égard" . Je ne demande qu'à m'enrichir.
Je croyais l'avoir fait dans le message précédent .... t'avoir mis au moins sur la piste !
Prenons ce bout de code de ton module de classe : '-------------------------- Private Sub lbl_Click()
A ) Lbl représente le label qui vient d'être cliqué nul besoin d'utiliser une variable pour faire ce travail Le msgbox devrait se lire pour être conséquent : Msgbox Lbl.caption & "/ " & lbl.name
B ) Dans le module formulaire, tu fais la déclaration de ces variables : Public usercaption As String Public userlabel As MSForms.Label Le fait que tu utilises ces noms de variables dans ton module de classe dans la procédure citée plus haut, laisse croire qu'il s'agit effectivement des mêmes variables que tu renseignes dans ladite procédure. En fait, il n'en n'est rien. La déclaration de tes 2 variables dans ton formulaire ne servent absolument. Pour les utiliser adéquatement dans ton module de classe cls1, il aurait fallut les faire précéder du Nom de l'objet "Userform1.usercaption" et "userform1.userlabel" Et pour être plus pointilleux, il aurait fallut que tu utilises le terme "PROPRIÉTÉ" pour désigner ces dernières plutôt que le terme variable.
En conséquence, les 2 variables utilisées dans ton module de classe sont des variables : 1 - locales ... c'est à dire que l'étendue de leur action se limite au niveau de cette procédure et on ne peut pas y faire référence à l'extérieur de cette procédure. Pourtant, Lbl est déjà disponible pour toutes les procédures de ton module de classe. 2 - des variables NON DÉCLARÉES au niveau d'une procédure c'est pas top en programmation.
Conclusion : Pour demeurer poli, ton exemple fait preuve d'une grande confusion. Ose prétendre le contraire si la chose t'amuse....mais faut pas compter sur moi pour alimenter la suite de cet échange!!!
Salutations!
"anonymousA" a écrit dans le message de news: Bonjour,
A-exact, il s'agit d'une erreur d'orthographe.
B et C-En effet, j'ai omis dans la rapidité de la réponse qu'il est vrai qu'il est nécessaire de dénommer le module où se situe la variable donc qu'il convient d'écrire Set UserForm1.userlabel = lbl MsgBox UserForm1.userlabel.Caption & "/" & UserForm1.userlabel.Name Ceci dit, le seul interet de ce Set est l'affectation à une variable qu'en conséquence on peut réutiliser dans la suite pour une autre procédure , que cette dernière, d'ailleurs, appartienne au module du UF ou à un autre module. Le Msgbox , du coup , serait plus parlant si p.e il existait un commandbutton et que le click sur celui-ci déclencherait une proc contenant MsgBox UserForm1.userlabel.Caption & "/" & UserForm1.userlabel.Name auquel cas il serait visible que ce qui est contenu dans la variable userlabel est bien formellement identique au dernier label cliqué.
D-Qu'à celà ne tienne. Sois donc remercié par avance de m'énumerer les "plus d'un égard" . Je ne demande qu'à m'enrichir.
A+
Bonjour anonymousA,
| Sois donc remercié par avance de m'énumerer
| les "plus d'un égard" . Je ne demande qu'à m'enrichir.
Je croyais l'avoir fait dans le message précédent .... t'avoir mis au moins sur la piste !
Prenons ce bout de code de ton module de classe :
'--------------------------
Private Sub lbl_Click()
A ) Lbl représente le label qui vient d'être cliqué
nul besoin d'utiliser une variable pour faire ce travail
Le msgbox devrait se lire pour être conséquent :
Msgbox Lbl.caption & "/ " & lbl.name
B ) Dans le module formulaire, tu fais la déclaration
de ces variables :
Public usercaption As String
Public userlabel As MSForms.Label
Le fait que tu utilises ces noms de variables dans ton module de
classe dans la procédure citée plus haut, laisse croire qu'il s'agit
effectivement des mêmes variables que tu renseignes dans ladite
procédure. En fait, il n'en n'est rien. La déclaration de tes 2
variables dans ton formulaire ne servent absolument. Pour les utiliser
adéquatement dans ton module de classe cls1, il aurait fallut les faire précéder
du Nom de l'objet "Userform1.usercaption" et "userform1.userlabel"
Et pour être plus pointilleux, il aurait fallut que tu utilises le terme "PROPRIÉTÉ"
pour désigner ces dernières plutôt que le terme variable.
En conséquence, les 2 variables utilisées dans ton module de classe sont des
variables :
1 - locales ... c'est à dire que l'étendue de leur action se limite
au niveau de cette procédure et on ne peut pas y faire référence
à l'extérieur de cette procédure. Pourtant, Lbl est déjà disponible
pour toutes les procédures de ton module de classe.
2 - des variables NON DÉCLARÉES au niveau d'une procédure
c'est pas top en programmation.
Conclusion : Pour demeurer poli, ton exemple fait preuve d'une grande confusion.
Ose prétendre le contraire si la chose t'amuse....mais faut pas compter sur moi
pour alimenter la suite de cet échange!!!
Salutations!
"anonymousA" <anonymousA@wanadoo.fr> a écrit dans le message de news: 1136297802.086816.229920@g14g2000cwa.googlegroups.com...
Bonjour,
A-exact, il s'agit d'une erreur d'orthographe.
B et C-En effet, j'ai omis dans la rapidité de la réponse qu'il est
vrai qu'il est nécessaire de dénommer le module où se situe la
variable donc qu'il convient d'écrire Set UserForm1.userlabel = lbl
MsgBox UserForm1.userlabel.Caption & "/" & UserForm1.userlabel.Name
Ceci dit, le seul interet de ce Set est l'affectation à une variable
qu'en conséquence on peut réutiliser dans la suite pour une autre
procédure , que cette dernière, d'ailleurs, appartienne au module du
UF ou à un autre module. Le Msgbox , du coup , serait plus parlant si
p.e il existait un commandbutton et que le click sur celui-ci
déclencherait une proc contenant MsgBox UserForm1.userlabel.Caption &
"/" & UserForm1.userlabel.Name auquel cas il serait visible que ce qui
est contenu dans la variable userlabel est bien formellement identique
au dernier label cliqué.
D-Qu'à celà ne tienne. Sois donc remercié par avance de m'énumerer
les "plus d'un égard" . Je ne demande qu'à m'enrichir.
A ) Lbl représente le label qui vient d'être cliqué nul besoin d'utiliser une variable pour faire ce travail Le msgbox devrait se lire pour être conséquent : Msgbox Lbl.caption & "/ " & lbl.name
B ) Dans le module formulaire, tu fais la déclaration de ces variables : Public usercaption As String Public userlabel As MSForms.Label Le fait que tu utilises ces noms de variables dans ton module de classe dans la procédure citée plus haut, laisse croire qu'il s'agit effectivement des mêmes variables que tu renseignes dans ladite procédure. En fait, il n'en n'est rien. La déclaration de tes 2 variables dans ton formulaire ne servent absolument. Pour les utiliser adéquatement dans ton module de classe cls1, il aurait fallut les faire précéder du Nom de l'objet "Userform1.usercaption" et "userform1.userlabel" Et pour être plus pointilleux, il aurait fallut que tu utilises le terme "PROPRIÉTÉ" pour désigner ces dernières plutôt que le terme variable.
En conséquence, les 2 variables utilisées dans ton module de classe sont des variables : 1 - locales ... c'est à dire que l'étendue de leur action se limite au niveau de cette procédure et on ne peut pas y faire référence à l'extérieur de cette procédure. Pourtant, Lbl est déjà disponible pour toutes les procédures de ton module de classe. 2 - des variables NON DÉCLARÉES au niveau d'une procédure c'est pas top en programmation.
Conclusion : Pour demeurer poli, ton exemple fait preuve d'une grande confusion. Ose prétendre le contraire si la chose t'amuse....mais faut pas compter sur moi pour alimenter la suite de cet échange!!!
Salutations!
"anonymousA" a écrit dans le message de news: Bonjour,
A-exact, il s'agit d'une erreur d'orthographe.
B et C-En effet, j'ai omis dans la rapidité de la réponse qu'il est vrai qu'il est nécessaire de dénommer le module où se situe la variable donc qu'il convient d'écrire Set UserForm1.userlabel = lbl MsgBox UserForm1.userlabel.Caption & "/" & UserForm1.userlabel.Name Ceci dit, le seul interet de ce Set est l'affectation à une variable qu'en conséquence on peut réutiliser dans la suite pour une autre procédure , que cette dernière, d'ailleurs, appartienne au module du UF ou à un autre module. Le Msgbox , du coup , serait plus parlant si p.e il existait un commandbutton et que le click sur celui-ci déclencherait une proc contenant MsgBox UserForm1.userlabel.Caption & "/" & UserForm1.userlabel.Name auquel cas il serait visible que ce qui est contenu dans la variable userlabel est bien formellement identique au dernier label cliqué.
D-Qu'à celà ne tienne. Sois donc remercié par avance de m'énumerer les "plus d'un égard" . Je ne demande qu'à m'enrichir.
A+
anonymousA
....mais faut pas compter sur moi pour alimenter la suite de cet échan ge!!!
Ben ca tombe bien, parce que si tu avais lu entre les lignes et pris la peine de me lire attentivement , tu aurais compris que je ne te demandais rien , étant entendu que j'avais déjà répondu dans mon POST précédent à toutes tes remarques d'ordre informatique.
Ensuite, je n'ai rien à oser ou pas. Je suis libre d'écrire ce que je veux et parfois de me tromper ou d'omettre , ce qui ne semble guère être ton cas . De mon point de vue , pour clore ce débat et commencer une excellente année 2006 , il m'apparait que ta suffisance et ta condescendance sont , semble t-il, proportionnelles au nombre de tes contributions.
End of the story.
....mais faut pas compter sur moi pour alimenter la suite de cet échan ge!!!
Ben ca tombe bien, parce que si tu avais lu entre les lignes et pris la
peine de me lire attentivement , tu aurais compris que je ne te
demandais rien , étant entendu que j'avais déjà répondu dans mon
POST précédent à toutes tes remarques d'ordre informatique.
Ensuite, je n'ai rien à oser ou pas. Je suis libre d'écrire ce que je
veux et parfois de me tromper ou d'omettre , ce qui ne semble guère
être ton cas . De mon point de vue , pour clore ce débat et
commencer une excellente année 2006 , il m'apparait que ta suffisance
et ta condescendance sont , semble t-il, proportionnelles au nombre
de tes contributions.
....mais faut pas compter sur moi pour alimenter la suite de cet échan ge!!!
Ben ca tombe bien, parce que si tu avais lu entre les lignes et pris la peine de me lire attentivement , tu aurais compris que je ne te demandais rien , étant entendu que j'avais déjà répondu dans mon POST précédent à toutes tes remarques d'ordre informatique.
Ensuite, je n'ai rien à oser ou pas. Je suis libre d'écrire ce que je veux et parfois de me tromper ou d'omettre , ce qui ne semble guère être ton cas . De mon point de vue , pour clore ce débat et commencer une excellente année 2006 , il m'apparait que ta suffisance et ta condescendance sont , semble t-il, proportionnelles au nombre de tes contributions.