OVH Cloud OVH Cloud

instanciation d'un module de classe

3 réponses
Avatar
Isabelle Robin
Bonjour,

Voilà, j'essaie de créer une instance vers un module de classe situé
dans une macro complémentaire (.xla). Dans mon excel 'normal', j'ai bien
ajouté la référence du fichier xla.

Voici un exemple de ce que j'ai fait, dans un module normal de mon
application :
Code:
sub affichage()
Dim X As toto
X.Init ("toto")
End Sub

et dans mon module de classe ("toto") de ma macro complémentaire :
Code:
Sub Init(text)
MsgBox text
End Sub

Lorsque j'exécute la procédure de mon module normal, il trouve bien la
classe mais me dit 'Variable objet ou variable bloc With non définie
(erreur 91)'.

J'ai essayé d'instancier avec le mot "new" mais cela me fait une erreur.

Auriez vous des idées ? Est ce qu'il est en fait possible d'instancier
une classe qui se trouve dans un xla ?

Merci pour votre aide

3 réponses

Avatar
Pascal Engelmajer
Salut,
à première vue...
Dim X As New toto

ou au choix

Dim X As toto
set X= New toto
X. Init ("toto")

--
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
"Isabelle Robin" a écrit dans le message de
news:
Bonjour,

Voilà, j'essaie de créer une instance vers un module de classe situé
dans une macro complémentaire (.xla). Dans mon excel 'normal', j'ai bien
ajouté la référence du fichier xla.

Voici un exemple de ce que j'ai fait, dans un module normal de mon
application :
Code:
sub affichage()
Dim X As toto
X.Init ("toto")
End Sub

et dans mon module de classe ("toto") de ma macro complémentaire :
Code:
Sub Init(text)
MsgBox text
End Sub

Lorsque j'exécute la procédure de mon module normal, il trouve bien la
classe mais me dit 'Variable objet ou variable bloc With non définie
(erreur 91)'.

J'ai essayé d'instancier avec le mot "new" mais cela me fait une erreur.

Auriez vous des idées ? Est ce qu'il est en fait possible d'instancier
une classe qui se trouve dans un xla ?

Merci pour votre aide



Avatar
Isabelle Robin
Salut,

Ben justement, ce que je ne comprends pas, c'est qu'il aime pas le mot "new"
('utilisation incorrecte du mot') alors que je l'utilise nul part sauf ici.

Et là, je suis coincée et je n'ai plus d'idées.

Merci pour votre aide



Pascal Engelmajer wrote:

Salut,
à première vue...
Dim X As New toto

ou au choix

Dim X As toto
set X= New toto
X. Init ("toto")

--
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
"Isabelle Robin" a écrit dans le message de
news:
Bonjour,

Voilà, j'essaie de créer une instance vers un module de classe situé
dans une macro complémentaire (.xla). Dans mon excel 'normal', j'ai bien
ajouté la référence du fichier xla.

Voici un exemple de ce que j'ai fait, dans un module normal de mon
application :
Code:
sub affichage()
Dim X As toto
X.Init ("toto")
End Sub

et dans mon module de classe ("toto") de ma macro complémentaire :
Code:
Sub Init(text)
MsgBox text
End Sub

Lorsque j'exécute la procédure de mon module normal, il trouve bien la
classe mais me dit 'Variable objet ou variable bloc With non définie
(erreur 91)'.

J'ai essayé d'instancier avec le mot "new" mais cela me fait une erreur.

Auriez vous des idées ? Est ce qu'il est en fait possible d'instancier
une classe qui se trouve dans un xla ?

Merci pour votre aide





Avatar
Isabelle Robin
re-bonjour,

J'ai trouvé la solution, je vous la donne :

- Dans un module standard du fichier xla, créer une fonction
Public Function GetMyClass() As MyClass
Set GetMyClass = New MyClass
End Function

où MyClass est le nom du module de classe.

- Dans le workbook
Dans un module standard, déclare une varibale MyClass et utiliser la fonction
GetMyClass pour initialiser une nouvelle instance de MyClass

Dim MC As MyProj.MyClass
Set MC = MyProj.GetMyClass()

Voilà, et de mon côté, ça marche.
@+


Isabelle Robin wrote:

Salut,

Ben justement, ce que je ne comprends pas, c'est qu'il aime pas le mot "new"
('utilisation incorrecte du mot') alors que je l'utilise nul part sauf ici.

Et là, je suis coincée et je n'ai plus d'idées.

Merci pour votre aide

Pascal Engelmajer wrote:

Salut,
à première vue...
Dim X As New toto

ou au choix

Dim X As toto
set X= New toto
X. Init ("toto")

--
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
"Isabelle Robin" a écrit dans le message de
news:
Bonjour,

Voilà, j'essaie de créer une instance vers un module de classe situé
dans une macro complémentaire (.xla). Dans mon excel 'normal', j'ai bien
ajouté la référence du fichier xla.

Voici un exemple de ce que j'ai fait, dans un module normal de mon
application :
Code:
sub affichage()
Dim X As toto
X.Init ("toto")
End Sub

et dans mon module de classe ("toto") de ma macro complémentaire :
Code:
Sub Init(text)
MsgBox text
End Sub

Lorsque j'exécute la procédure de mon module normal, il trouve bien la
classe mais me dit 'Variable objet ou variable bloc With non définie
(erreur 91)'.

J'ai essayé d'instancier avec le mot "new" mais cela me fait une erreur.

Auriez vous des idées ? Est ce qu'il est en fait possible d'instancier
une classe qui se trouve dans un xla ?

Merci pour votre aide