OVH Cloud OVH Cloud

Module de classe

5 réponses
Avatar
Emcy
voila mon code :

Option Explicit

Dim MaListeDeLabel As New Collection
Dim ObjetClasse As New MaClasse4

Private Sub UserForm_Initialize() 'utilise le module de=20
classe MaClasse4

Dim i, j, NombreDeLignes, NombreDeColonnes, Num=E9roLabel=20
As Integer
Dim EspasseX, EspasseY, OrigineX, OrigineY As=20
Integer 'd=E9fini l'origine du tableau et l'espace entre=20
les diff=E9rents Labels
Dim LabelLargeur, LabelHauteur As Integer
Dim LabelPlacementX, LabelPlacementY As Integer
Dim NomLabel As String
Dim Element As Object
Dim aa As Variant
'****** Initialisation des variables qui d=E9finissent les=20
dimensions du Tableau ******
EspasseX =3D 20
EspasseY =3D 40
OrigineX =3D 5
OrigineY =3D 5
LabelLargeur =3D 40
LabelHauteur =3D 30
'*********************************************************
****************************

NombreDeLignes =3D InputBox("Nombre de lignes :")
NombreDeColonnes =3D InputBox("Nombre de colonnes :")

UserForm5.Width =3D 2 * OrigineX + LabelLargeur +=20
(NombreDeColonnes - 1) * (LabelLargeur +=20
EspasseX) 'defini la largeur de l'userform
UserForm5.Height =3D 2 * OrigineY + LabelHauteur +=20
(NombreDeLignes - 1) * (LabelHauteur + EspasseY) 'defini=20
la hauteur de l'userform

Num=E9roLabel =3D 0

For j =3D 1 To NombreDeLignes
For i =3D 1 To NombreDeColonnes

NomLabel =3D "Label" & Str(Num=E9roLabel)
=20
Num=E9roLabel =3D Num=E9roLabel + 1
=20
MaListeDeLabel.Add Item:=3DObjetClasse, key:=3DCStr
(Num=E9roLabel)
Set ObjetClasse =3D Nothing 'cette ligne est=20
obligatoire mais je n'ai pas bien compris sint=20
fonctionnement
=20
Set MaListeDeLabel.Item(Num=E9roLabel).Label_Prog =3D=20
UserForm5.Controls.Add("Forms.Label.1", NomLabel)
=20
LabelPlacementX =3D OrigineX + (i - 1) *=20
(LabelLargeur + EspasseX)
LabelPlacementY =3D OrigineY + (j - 1) *=20
(LabelHauteur + EspasseY)
=20
With MaListeDeLabel.Item(Num=E9roLabel).Label_Prog
.Caption =3D NomLabel
.Top =3D LabelPlacementY
.Left =3D LabelPlacementX
.Width =3D LabelLargeur
.Height =3D LabelHauteur
.BackColor =3D &H8000000E 'blanc
End With

Next i
Next j

Num=E9roLabel =3D 0

For Each Element In MaListeDeLabel 'ins=E8re un text d'aide=20
sur chaque Label
Element.Label_Prog.ControlTipText =3D "Label" & Str
(Num=E9roLabel)
Num=E9roLabel =3D Num=E9roLabel + 1
Next

End Sub

je voudrais savoir pourquoi je suis oblig=E9 d'utiliser la=20
commande "Set ObjetClasse =3D Nothing" pour que =E7a =20
fonctionne ? quuelqu'un a-t-il une th=E9orie ?

5 réponses

Avatar
Pascal Engelmajer
salut,
je voudrais savoir pourquoi je suis obligé d'utiliser la
commande "Set ObjetClasse = Nothing" pour que ça
fonctionne ? quuelqu'un a-t-il une théorie ?


Cette ligne sert à liberer la mémoire utilisée par l'objet "ObjetClasse"
cet objet est donc instancié (= New) et utilisé (.AddItem) une seule fois
!!!
Je ne comprend pas bien à quoi il sert.

--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel

Avatar
Emcy
Donc si j'ai bien compris, tu n'en sais pas plus que moi ?

Remarque : si je ne mets pas la commande "nothing", il y
a seulement le dernier Label qui est affecté à mon module
de classe "MaClasse4" dans la collection "MaListeDeLabel".

-----Message d'origine-----
salut,
je voudrais savoir pourquoi je suis obligé d'utiliser
la


commande "Set ObjetClasse = Nothing" pour que ça
fonctionne ? quuelqu'un a-t-il une théorie ?


Cette ligne sert à liberer la mémoire utilisée par
l'objet "ObjetClasse"

cet objet est donc instancié (= New) et utilisé
(.AddItem) une seule fois

!!!
Je ne comprend pas bien à quoi il sert.

--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait
pas ou il va."

Sénèque.
http://www.ilyapa.net/excel



.




Avatar
Pascal Engelmajer
Salut,
Remarque : si je ne mets pas la commande "nothing", il y
a seulement le dernier Label qui est affecté à mon module
de classe "MaClasse4" dans la collection "MaListeDeLabel".


Je ne comprends pas comment Label peut être affecté à un module de classe.
L'objet ObjetClasse sert à créer un membre de la collection, après la
pemière boucle il est égal à un objet vide(Nothing).
Il me semble qu'une seule instance de la classe MaClasse4 est créée...
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"Emcy" a écrit dans le message de
news: 067f01c3c88f$16e17a20$

Avatar
Emcy
voici un exemple pour que tu comprennes comment affecter
un Label : :
http://www.excel-downloads.com/html/French/tele_clic.php?
nom_fichier=Exemples%20modules%20de%20classe

-----Message d'origine-----
Salut,
Remarque : si je ne mets pas la commande "nothing", il
y


a seulement le dernier Label qui est affecté à mon
module


de classe "MaClasse4" dans la
collection "MaListeDeLabel".



Je ne comprends pas comment Label peut être affecté à un
module de classe.

L'objet ObjetClasse sert à créer un membre de la
collection, après la

pemière boucle il est égal à un objet vide(Nothing).
Il me semble qu'une seule instance de la classe
MaClasse4 est créée...

--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait
pas ou il va."

Sénèque.
http://www.ilyapa.net/excel
"Emcy" a écrit
dans le message de

news: 067f01c3c88f$16e17a20$




.




Avatar
Pascal Engelmajer
salut,
il semble que nous n'utilisons pas les mêmes termes :
pour moi on cré des instances de la classe MaClasse, on n'affecte pas un
Label à maClasse.
et mes remarques restent fondées : une seule instance de la classe MaClasse4
est créée par
Dim ObjetClasse As New MaClasse4

Set ObjetClasse = Nothing ré-initialise totalement l'objet ObjetClasse =>
il n'est plus une instance de MaClasse4
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel