Fonction retournant 2 valeurs
Le
Jean-Michel

Bonjour, comment je pourrai faire pour qu'une fonction me retourne deux
valeurs ?
Merci
valeurs ?
Merci
Plusieurs méthode :
1) Utilisation d'un type utilisateur :
'Dans un module :
Public Type tRetour
sValeur1 As String
lVal2 As Long
End Type
Public Function MultiRetVal1(sArg As String) As tRetour
MultiRetVal1.sValeur1 = sArg
MultiRetVal1.lVal2 = Len(sArg)
End Function
'Dans la form :
Private Sub Form_Load()
Dim Retour As tRetour
Retour = MultiRetVal1("Test !")
MsgBox Retour.sValeur1
MsgBox Retour.lVal2
End Sub
2) Mais le mieux est l'utilisation de *pointeurs* (passage d'une variable en
byref) :
Private Sub Form_Load()
Dim sRetVal As String, lRetVal As Long
Call MultiRetVal2("Test !", sRetVal, lRetVal)
MsgBox sRetVal
MsgBox lRetVal
End Sub
Public Sub MultiRetVal2(ByVal sArg As String, ByRef sValRetour1 As String,
ByRef lRetour2 As Long)
sValRetour1 = sArg
lRetour2 = Len(sArg)
End Sub
3) Ou si toutes les variables retour sont du même type, on peut imaginer
renvoyer un tableau...
Nicolas.
--
http://www.ngsoft-fr.com
"Jean-Michel" message de news:
"ng" news:eO$
en
Tu as écrit :
Ce que l'on fait généralement c'est passer les arguments par référence à la
fonction, ainsi la fonction que tu appelles va pouvoir modifier les paramètres
transmis. Exemple :
Private Sub Form_Load()
Dim Premier As String
Dim Deuxieme As String
Dim Troisieme As String
' La fonction va "remplir" les variables Premier, Deuxieme et Troisieme
Call GetPodiumTourDeFrance(Premier, Deuxieme, Troisieme)
MsgBox Premier
MsgBox Deuxieme
MsgBox Troisieme
End Sub
Private Sub GetPodiumTourDeFrance(ByRef PremierCoureur As String, ByRef
DeuxiemeCoureur As String, ByRef TroisiemeCoureur As String)
PremierCoureur = "Eddy Merckx"
DeuxiemeCoureur = "Laurent Jalaber"
TroisiemeCoureur = "Miguel Indurain"
End Function
Pour savoir ce que sont les arguments par référence (en oppostion aux
arguments par valeur) je te conseille cet article de la FAQ :
Question 23 - Quelle est la différence entre les mots-clés "ByVal" et "ByRef"
?
http://faq.vb.free.fr/index.php?question#
Autre solution, tu peux faire en sorte que ta classe retourne un type perso,
ou encore mieux une classe.
Exemple avec des types persos :
Private Type Podium
Premier As String
Deuxieme As String
Troisieme As String
End Type
Private Sub Form_Load()
Dim PodiumTourDeFrance As Podium
PodiumTourDeFrance = GetPodiumTourDeFrance()
MsgBox PodiumTourDeFrance.Premier
MsgBox PodiumTourDeFrance.Deuxieme
MsgBox PodiumTourDeFrance.Troisieme
End Sub
Private Function GetPodiumTourDeFrance() As Podium
GetPodiumTourDeFrance.Premier = "Eddy Merckx"
GetPodiumTourDeFrance.Deuxieme = "Laurent Jalaber"
GetPodiumTourDeFrance.Troisieme = "Miguel Indurain"
End Function
Bon courage :-)
--
Pierre ALEXIS - MVP Visual Basic
Courriel & messenger :
FAQ Visual Basic : http://faq.vb.free.fr/
"Pierre Alexis [MVP]" news:%
la
paramètres
Troisieme
"ByRef"
perso,
Tu as écrit :
Tu as le droit ;-)
Ceci dit beaucoup de programmeurs préfèrent utiliser la valeur de retour de la
fonction pour retourner les éventuels codes d'erreurs. Cela se fait très
couramment en C/C++ où l'on passe souvent en paramètre des pointeurs ou des
références et où la valeur retour des fonctions est un long. Preuve à l'appui,
les API Windows, elles employent abondamment cette technique pour retourner
une ou plusieurs informations.
Toi on t'as peut-être appris à ne pas travailler comme ça, mais moi on est en
train de m'apprendre à justement travailler comme ça... ;-) Ca prouve bien
qu'il n'y a pas vraiment une solution meilleure que l'autre, ça dépend des
sensibilités je pense.
--
Pierre ALEXIS - MVP Visual Basic
Courriel & messenger :
FAQ Visual Basic : http://faq.vb.free.fr/
cela marche. mais pour moi une fonction a des paramètres et renvoie un
résultat. Les paramètres ne doivent pas être modifiés dasn la fonction.
Sinon autant faire des sub, le résultat étant l'un des paramètres.
Il est vrai aussi que j'ai appris la programmation au début des années 80 et
nos formateurs étaient très stricts sur ces notions.
Je préfère de beaucoup la méthode de Zoury avec un type utilisateur.
"Pierre Alexis [MVP]" news:%
la
paramètres
Troisieme
"ByRef"
perso,
prédilection reste le LISP pour sa pureté tu comprendras mieux mes
réticences. C'est vrai aussi que je n'ai jamais accepté de me mettre au
C/C++, et que je me suis limité au minimum requis de l'époque (deux semaines
de C) sur une années complète de formation informatique (Algorithmique,
Pascal, Lisp, SmallTalk, Prolog).
Après tout comme quelqu'un me l'a déjà dit sur un autre sujet, l'important
est quand même de réussir à faire un programme qui remplisse la tâche qui
lui est assigné.
"Pierre Alexis [MVP]" news:OT9q$
effectivement
80 et
de la
des
l'appui,
retourner
en
?! j'ai posté ça moi? je croyais que c'était Nicolas! :O)))
de la
des
l'appui,
retourner
Yep.
Toutefois, on trouve de plus en plus (VB6, .NET, JAVA, etc.) un concept
d'erreur ou d'exception qui peuvent être levé afin d'alleger le code et les
fonctions. Les fonctions ne renvoient plus de code "d'erreur" mais
avertissent plutôt le système qu'une exception à été rencontrée.
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Merci de poster les réponses au groupe afin d'en faire profiter à tous
"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news: