Récupérer tableau dans un autre fonction [Résolu/Fermé]

Signaler
Messages postés
176
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
-
Messages postés
176
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
-
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

4 réponses

Messages postés
176
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
8
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
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)
Messages postés
176
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
8
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
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
Messages postés
176
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
8
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
ok j'ai compris.
tu as reussis a resoudre ton probleme ?
Messages postés
176
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
8
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