Collection dans modules de classe

Youri

XLDnaute Occasionnel
Bonjour a tous,
Je ne suis pas vraiment expérimenté avec les modules de classe donc je me suis dis que vous pourriez m'aider.
Mon problème est donc le suivant :
J'ai crée un module de classe qui simule le fonctionnement d'une base de données très simples. Pour ce faire, j'ai intégré une collection dans le module de classe, et grâce à un suivi des clés de la collection, je peux simuler une mini base de données.
La complication vient du fait que j'ajoute des éléments différents dans la BDD, y compris des objets (par exemple l'objet ListBox d'un UserForm).
Une fois que l'objet a été ajouté avec la méthode Add, il est bien présent dans la collection du module de classe. Toutefois, je n'arrive pas à la renvoyer avec la méthode Item depuis le module de classe. La méthode Item que j'utilise est la suivante :
Code:
Public Function Item(ByVal Name As String) As Variant

If Len(Name) = 0 Then
    MsgBox alert5, alertbuttons, alertslabel
    Exit Function
End If

If MyCollection.Count = 0 Then
    MsgBox alert10, alertbuttons, alertslabel
    Exit Function
End If

If Not ElementReferenced(Name) Then
    MsgBox alert6, alertbuttons, alertslabel
    Exit Function
End If

Item = MyCollection.Item(Name)

End Function

Comme vous pouvez le constater, j'utilise la ligne de code suivante :
Item = MyCollection.Item(Name)
qui n'est pas adaptée aux objets. Il faudrait donc utiliser:
Set Item = MyCollection.Item(Name)

Mais alors comment renvoyer un élément de la collection qui n'est pas un objet ?
Par ailleurs, je ne suis jamais arrivé à transmettre un objet ListBox à une procédure qui utilise une variable d'accueil de type Variant, donc je ne sais même pas s'il est possible de renvoyer un objet avec une fonction de type variant.

Merci à tous pour votre aide,
Youri
 
G

Guest

Guest
Re : Collection dans modules de classe

Bonjour Youri,

Tu peux tester l'item par

If IsObject(MyCollection.Item(Name)) then
Set Item=MyCollection.Item(Name)
Else
Item=MyCollection.Item(Name)
end if

De plus, se serait sans doute préférable de donner un autre nom à ta fonction plutôt que Item qui est un mot réservé, je crois.

'Par exemple: Function GetItem(Name as String) As Variant

A bientôt
 

Discussions similaires

Statistiques des forums

Discussions
312 299
Messages
2 086 986
Membres
103 419
dernier inscrit
mk29