Récupérer tableau dans un autre fonction

Résolu/Fermé
ezor Messages postés 177 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 27 octobre 2016 - Modifié par ezor le 17/08/2014 à 23:46
ezor Messages postés 177 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 27 octobre 2016 - 25 août 2014 à 21:01
Bonsoir à toutes et à tous,

Je débute en vba (même pas 2 semaines :s) et j'ai un problème depuis plusieurs jours.
En effet, j'ai codée deux fonctions qui prennent en argument un tableau (et d'autre trucs aussi ) et qui sont censée renvoyer un tableau.

Donc en gros, elles ont cette tête
 Function exemple(argument1, argument2) as double()

Dim Tableau() As Double

'corps de la fonction, qui remplit le tableau Tableau qui vient d'être créé

exemple = Tableau
End Function


ou cette tête

Public Function exemple1(tab() As Double, argument1, argument2) as double()

'je fais ma fonction que "transforme" le tableau tab

exemple1 = tab

End Function




ce que je veux faire, c'est pouvoir réutiliser ces fonctions dans une fonction plus global, où l'utilisateur (donc moi pour le moment :) ) peut choisir les arguments et elle appelera les fonctions qui vont bien. J'ai tenté quelque chose mais j'ai toujours un message d'erreur

sub test(arg, arg, ... )

mon_tableau = exemple(arg_que_je_choisi1, arg_que_je_choisi2)
msgbox mon_tableau(3)

Call exemple2(mon_tableau, arg_que_je_choisi1, arg_que_je_choisi2)

End Sub

le bug vient de mon_tableau qui n'est pas reconnu comme un tableau par exemple2
Cependant, le MsgBox renvoie bien la valeur de la 3e case du tableau....

--j'ai essayé sans le "call", mais il faut que je mette un = d'apres le message d'erreur
--ça fonctionne uniquement si je passe en arguement de a fonction exemple2 toute la fonction exemple
Call exemple2(exemple(arg1, arg2), arg3, arg4)

mais c'est pas ce que je veux faire ! je souhaite vraiment (si c'est possible) récupérer ce tableau renvoyé par ma fonction dans une variable pour en faire ce que je veux ensuite

J'espère avoir été suffisamment clair dans mes explications, et je remercie par avance toutes les personnes qui essayeront de m'aider.



ezor
A voir également:

4 réponses

ezor Messages postés 177 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 27 octobre 2016 11
18 août 2014 à 10:17
j'ai eu l'idée cette nuit de commencer par déclarer ma variable mon_tableau en tant que tel au début de ma routine

sub test(arg, arg, ... )

Dim mon_tableau() as Double

mon_tableau = exemple(arg_que_je_choisi1, arg_que_je_choisi2)

Call exemple2(mon_tableau, arg_que_je_choisi1, arg_que_je_choisi2)

End Sub


du coup, plus de problème.
Je laisse la discussion (enfin mon monologue) au cas où quelqu'un tombe dessus un jour

Mais s'il y a un solution plus intéressante, ou au moins une explication sur le fait qu'il arrive à trouver la valeur des cases du tableau sans comprendre ensuite que c'est un objet de type tableau, je suis preneur
0
quand tu appelle une fonction, le programme pense que la fonction va renvoyer une valeur et il attend donc que tu mette une variable qui va recuperer cette valeur. il y a sans doute un moyen pour dire que la fonction ne renvoi rien mais je ne sais pas comment faire donc moi je contourne le probleme en utilisan une variable qui ne sera pas utiliser par la suite :
variable_inutile = exemple2(mon_tableau, arg_que_je_choisi1, arg_que_je_choisi2)
0
ezor Messages postés 177 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 27 octobre 2016 11
22 août 2014 à 10:17
Salut,

Oui, c'est ce que j'avais fais, mais cette variable était inutilisable par une autre fonction ensuite, et c'était là mon problème.

NB : Une fonction renvoie toujours quelque chose, sinon, c'est une routine
0
si tu veux que la variable soit utilisable par une autre fonction soit tu met la variable en public soit tu l'envoi en argument a ta fonction

si ce n'etait pas ca ta question, j'ai du mal a comprendre ce que tu veux...

NB : je ne sais comment c'est en vba mais en C on peut faire des fonctions qui ne renvoie rien : ce sont les fonction de type void. la difference c'est qu'en vba, les fonctions n'ont pas de type
0
ezor Messages postés 177 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 27 octobre 2016 11
Modifié par ezor le 25/08/2014 à 19:38
oui, en C ou java, il y a le type void, mais en vba, il y a deux types de procédures, les fonctions qui renvoient quelque chose et les routines qui renvoient...rien
en gros, routine = fonction de type void
j'ne sais pas beaucoup plus car je début le vba en fait

pour en revenir au sujet, la variable était déjà public. C'est jsute qu'avant de la réutiliser ailleurs, il faut redéfinir son type dans la nouvelle fonction/routine qui va l'utiliser
0
ok j'ai compris.
tu as reussis a resoudre ton probleme ?
0
ezor Messages postés 177 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 27 octobre 2016 11
25 août 2014 à 21:01
oui, justement en redéclarant que la varible issue de la fonction était un tableau.
en gros ça donne

Dim mon_tableau as double()

puis

mon_tableau = fonctionQuiRenvoitUnTableau(argument1,argument2....)

et la je réutilise cette variable mon_tableau
0