Bonsoir
J'ai une fonction d'une classe qui renvoie une collection constituée de valeurs. Comment récupérer ces valeurs depuis le code d'une form : J'appelle la fonction, et après :
Merci.
Bonsoir
J'ai une fonction d'une classe qui renvoie une collection constituée de valeurs. Comment récupérer ces valeurs depuis le code d'une form : J'appelle la fonction, et après :
Merci.
Cette fonction retourne un objet Collection ou bien un tableau de valeurs :
Un bout de code ... :
Le code utilisé dans la form:
La fonction FindProduit de la classe crée une collection contenant les valeurs des champs d'un enregistrement. La collection est bien créee, mais au retour, la ligne strRetour renvoie une erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Set MyCol = DataFact.FindProduit(dcComboGrille) strRetour = MyCol.Item(1)
MyCol et vRetour ont bien été déclarées par:Argument ou appel de procédure incorect
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Dim MyCol As New Collection Dim vRetour As Variant
juste en passant, c'est surement pas la cause de l'erreur mais tu as du
strRetour et vRetour, c'est normal
Non. J'avais démarré le message avec str, et en écrivant, je me suis rendu compte que vela allait poser un problème. J'ai donc mis en variant, mis j'ai mal corrigé le texte du message .Envoyé par Thierry AIM
Je viens de m'appercevoir que myCol ne contient aucun élément. Jusqu'alors, persuadé que
renvoyait "forcément" la collection, j'avais omis de vérifier avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set MyCol = DataFact.FindProduit(dcComboGrille)
ce qu'il ne faut jamais omettre .
Code : Sélectionner tout - Visualiser dans une fenêtre à part myCol.count
Donc la ligne
ne renvoie pas de collection , mais celle-ci est pourtant bien créée par la fonction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set MyCol = DataFact.FindProduit(dcComboGrille)
Bref, je rame
Je viens de tester ceci avec succes:
Peux tu afficher ta fonction FindProduit?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Private Sub Command1_Click() Dim MyCol As New Collection Dim strRetour As Variant Set MyCol = FindProduit() strRetour = MyCol.Item(3) MsgBox strRetour End Sub Private Function FindProduit() As Collection Set FindProduit = New Collection FindProduit.Add "Item 1" FindProduit.Add "Item 2" FindProduit.Add "Item 3" End Function
Voici.
Mais n'oublies pas que la fonction est dans une classe. Pour ce que tu as essayé, cela ne semble pas être le cas. Mais est-ce la cause du disfonctionnement, ce que je crois sans l'avoir encore testé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 Public Function FindProduit(ByVal CodeProduit As String) As Collection Dim Code As String Dim Designation As String Dim Description As String Dim Prix As Single Dim Taux As String rsProduits.Find "CodeProduit = '" & CodeProduit & "'" Code = rsProduits!CodeProduit Designation = rsProduits!DesignationProd 'Description = rsProduits!DescriptionPro Prix = rsProduits!PuVente Taux = rsProduits!CodeTVA 'Ajoute les membres à la collection DataMembers lors de l'initialisation de la classe MsgBox ("d " & colProduit.Count) With colProduit .Add "Code" .Add "Designation" '.Add "Description" .Add "PrixU" .Add "TVA" '.Add 6 '.Add 7 End With MsgBox ("F " & colProduit.Count) End Function
Je viens de tester ceci :
Ca marche. Donc cela ne vient pas de l'encapsulation de la fonction FindProduit dans une classe...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Private Sub Command1_Click() Dim DataFact As New DataFactClass Dim MyCol As New Collection Dim strRetour As Variant Set MyCol = DataFact.FindProduit() strRetour = MyCol.Item(3) MsgBox strRetour End Sub Public Function FindProduit() As Collection 'Fonction définie dans la classe DataFactClass Set FindProduit = New Collection FindProduit.Add "Item 1" FindProduit.Add "Item 2" FindProduit.Add "Item 3" End Function
Si j'ai fait ce test, c'est pour vérifier qu'une fonction pouvait renvoyer une collection...
C'est normal que ta fonction FindProduit ne renvoie rien ?
Confusion entre FindProduit et ColProduit peut-être?
Là, je ne vois pas du tout ce que tu veux dire, tant question normalité que question confusionEnvoyé par Catbull
FindProduit est la fonction et colProduit est la collection. Une erreur cependant dans le commentaire: c'est
et non "DataMember. Mais comme c'est un commentaire, pas de problème...
Code : Sélectionner tout - Visualiser dans une fenêtre à part 'Ajoute les membres à la collection ColProduit lors de l'initialisation de la classe
Bon, je reprendrais demain, j'en ai plein la tête! La nuit porte conseil, à moins que cela ne soit un contributeur
Merci de ton concours et à +
Désolé, mais je suis comme catbull, je ne comprends pas d'ou tu sors ton colProduit
une idée aussi, pourquoi ne pas renvoyer un rs clone de rsProduits sur lequel tu appliques un .Filter ? (mais c'est juste une idée)
La collection colProduit est crée dans la fonction FindProduit (voit code dans message 20:33).Envoyé par Thierry AIM
Je voudrais justement éviter. D'ailleurs, il faut que je précise que la classe est une classe fournisseur de données, mais cela plante également avec une simple classe.une idée aussi, pourquoi ne pas renvoyer un rs clone de rsProduits sur lequel tu appliques un .Filter ? (mais c'est juste une idée)
Si FindProduit est une fonction qui renvoie une Collection il faut bien que dans le corps de la fonction il y ait une instruction du genre :
Tu ne fais rien renvoyer à ta fonction. Elle instancie seulement colProduit...
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set FindProduit = UneInstanceDeCollection
Bon, j'aurais mieux fait de rester couché depuis hier
Merci
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager