Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3001 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Fonction qui retourne une collection d'objets

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fonction qui retourne une collection d'objets

n°1401155
clems7516
Posté le 05-07-2006 à 15:27:27  profilanswer
 

Bonjour a tout le monde,
 
après de multiples recherches mais sans réelles réponses, je m'en remets a vous. Je voudrais savoir comment retourner une collection d'objets. Je m'explique :  
 
Mon type :  
 
Public Type myCompany
    nomCompany As String
    numCompany As String
End Type
 
Public Type TabCompany
    myCompanies() As myCompany
End Type  
 
 
Ensuite j ai une fonction ou je remplis mon tableau qui marche tres bien ! Mais impossible de retourner quelque chose. Ma fonction est déclaré comme tel:
Public Function RecValeurs() As Variant  
 
ou bien comme tel  
 
Public Function RecValeurs() As TabCompany  
 
J'instancie mes types crées plus haut et avec pour instruction de retour :  
 
RecValeurs() = TabCompany
 
 
Mais rien a faire dans les deux cas une erreur. Que faire ? Est-il impossible de retourner une collection d'objets ?  
 
Je vous remercie d'avance de votre réponse et A très bientôt je l'espere !

mood
Publicité
Posté le 05-07-2006 à 15:27:27  profilanswer
 

n°1401169
Paul Hood
Posté le 05-07-2006 à 15:44:37  profilanswer
 

Si c'est ta fonction "RecValeurs" qui retourne une valeur vaut mieux mettre  
Tabcompany=RecValeurs()
Non ?

n°1401178
clems7516
Posté le 05-07-2006 à 15:52:25  profilanswer
 

Je ne pense pas  
 
c est la fonction qui est egale a la collection d'objets

n°1401182
Paul Hood
Posté le 05-07-2006 à 15:54:56  profilanswer
 

Et c'est quoi le message d'erreur ?

n°1401197
clems7516
Posté le 05-07-2006 à 16:06:44  profilanswer
 

Voila le code se sera plus sipmle pour comprendre ;)
 

Code :
  1. Option Explicit
  2. 'Creation d'un nouveau type
  3. 'Caractéristique d'une societé
  4. Public Type myCompany
  5.     nomCompany As String
  6.     numDsCompany As String
  7. End Type
  8. 'Caractéristique du tableau de societés sélectionnés
  9. Public Type TabCompany
  10.     myCompanies() As myCompany
  11. End Type
  12. Function RecSelection() As Variant
  13. 'Macro des companies sélectionnées et renvoie un tableau des companies selectionnés
  14. 'Tableau composé du nom de la societe et du numero de DataStream
  15. 'Variables locales
  16. 'Variables de la feuille
  17. Dim objxlWorkbook As Excel.Workbook
  18. Dim objxlSheetLis As Excel.Worksheet
  19. 'Variables du tableau
  20. Dim TabComp As TabCompany
  21. Dim MaCompany As myCompany
  22. Dim msg As String
  23. Dim nbCompany As Integer
  24. Dim inc As Integer 'indice d'incrementation
  25. 'Initialisation des feuilles excel
  26. Set objxlWorkbook = ActiveWorkbook
  27. Set objxlSheetLis = objxlWorkbook.Worksheets("Liste" )
  28. 'Initialisation de l'incrementation
  29. inc = 1
  30. nbCompany = 0
  31. 'Calcul du nombre de societés
  32. Do While (objxlSheetLis.Range("NameCompany" ).Offset(inc, 0) <> "" )
  33.     If (objxlSheetLis.Range("SelCompany" ).Offset(inc, 0).Value = "X" ) Then
  34.         nbCompany = nbCompany + 1
  35.     End If
  36.     inc = inc + 1
  37. Loop
  38. 'Redimension du tableau en fonction du nombre de company
  39. ReDim Preserve TabComp.myCompanies(nbCompany)
  40. 'Réinitilisation de l'indice d'incrementation
  41. inc = 1
  42. 'Enregistrement de mes societés selectionnés dans un tableau
  43. Do While (objxlSheetLis.Range("NameCompany" ).Offset(inc, 0) <> "" )
  44.     If (objxlSheetLis.Range("SelCompany" ).Offset(inc, 0) = "X" ) Then
  45.         MaCompany.nomCompany = objxlSheetLis.Range("NameCompany" ).Offset(inc, 0)
  46.         MaCompany.numDsCompany = objxlSheetLis.Range("DsCompany" ).Offset(inc, 0)
  47.         TabComp.myCompanies(inc) = MaCompany
  48.     End If
  49.     inc = inc + 1
  50. Loop
  51.    
  52. 'Renvoie le tableau des companies sélectionnés
  53. RecSelection() = TabComp.myCompanies   <<<==== ICI L'erreur !!!!
  54.    
  55. End Function


 
 
Voila, maintenant le message d'erreur qui est le suivant :
 
Only user-defined types defined in public object modules can ve coerced to or from a variant or passed to late-bound functions  
 
Merci d'avance de votre réponse ;)

n°1401223
JihemAir
Je sais pas
Posté le 05-07-2006 à 16:27:25  profilanswer
 

Le message, c'est que ton type doit être déclaré public dans un module.
 
Voir la doc, le chapitre concernant le passage de tableaux en paramètres.


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
n°1401699
clems7516
Posté le 06-07-2006 à 09:37:52  profilanswer
 

JihemAir a écrit :

Le message, c'est que ton type doit être déclaré public dans un module.
 
Voir la doc, le chapitre concernant le passage de tableaux en paramètres.


 
Ce qui est le cas, non ? (cf le code)

n°1401719
tegu
Posté le 06-07-2006 à 09:59:31  profilanswer
 

Je pense qu'avec les aménagements suivants cela devrait aller mieux (mais à vérifier)

Function RecSelection() As myCompany()
...
  RecSelection = TabComp.myCompanies


Pour exemple, voici une fonction qui fonctionne en VB6

Function test() As String()
    Dim s() As String
    ReDim s(5) As String
    test = s
End Function


edit: je sais pas si en vba ça marchera aussi bien


Message édité par tegu le 06-07-2006 à 10:00:57
n°1401725
clems7516
Posté le 06-07-2006 à 10:13:49  profilanswer
 

Merci beaucoup a vous, grave a vos conseils j'ai trouvé !!!

n°1401728
Paul Hood
Posté le 06-07-2006 à 10:16:25  profilanswer
 

Et la réponse est ?

mood
Publicité
Posté le 06-07-2006 à 10:16:25  profilanswer
 

n°1401735
clems7516
Posté le 06-07-2006 à 10:23:20  profilanswer
 

Les seuls changements sont :  
 
 Function RecSelection() As TabCompany
 
et  
 
RecSelection = TabComp
 
Merci Mr tegu  
 


Message édité par clems7516 le 06-07-2006 à 10:25:01
n°1401742
Paul Hood
Posté le 06-07-2006 à 10:31:24  profilanswer
 

Et pourquoi tu lui fais pas retourner TabComp (type Tabcompany) à ta fonction recselection ?

n°1401750
clems7516
Posté le 06-07-2006 à 10:35:07  profilanswer
 

Oui c est ce que je fais
 
Message édité :D

n°1401774
Paul Hood
Posté le 06-07-2006 à 11:00:52  profilanswer
 

Alors en conservant le retour d'origine
Public Function RecSelection() As myCompany()
et
RecSelection = TabComp.myCompanies()
ca marche aussi !

n°1401881
clems7516
Posté le 06-07-2006 à 12:32:59  profilanswer
 

Tout a fait


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Fonction qui retourne une collection d'objets

 

Sujets relatifs
[SGDB] PL/SQL : Fonction qui retourne un curseurPasser des parametres dans une fonction JS
Problème Passage de Paramètres à une fonction Javascript[MySQL] Fonction recherche complexe
Acceder aux objets d'un rapportMes débuts avec les objets et prototypes et setInterval
[matlab] fonction imwritefonction mail et CSS
[PHP] parse_ini_file + array retourné 
Plus de sujets relatifs à : Fonction qui retourne une collection d'objets


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR