cerhu > microsoft.* > microsoft.vb

ng (30/12/2003, 15h23)
Salut,

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.
Jean-Michel (30/12/2003, 16h04)
Bonjour, comment je pourrai faire pour qu'une fonction me retourne deux
valeurs ?

Merci
Jean-Michel (30/12/2003, 16h32)
Merci beaucoup de ton aide :)

"ng" <ng> a écrit dans le message de
news:2240
[..]
Pierre Alexis [MVP] (30/12/2003, 16h36)
Salut Jean-Michel,

Tu as écrit :

> Bonjour, comment je pourrai faire pour qu'une fonction me retourne deux
> valeurs ?


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"
?
[..]

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 :-)
Jean-Michel (30/12/2003, 17h01)
Merci, sympa :)

"Pierre Alexis [MVP]" <alexispierre> a écrit dans le message de
news:a548
[..]
Pierre Alexis [MVP] (03/01/2004, 20h06)
Salut Patrice,

Tu as écrit :

> Je ne suis pas tout à fait d'accord avec ta méthode même si effectivement
> 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.


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.
Patrice Henrio (03/01/2004, 20h08)
Je ne suis pas tout à fait d'accord avec ta méthode même si effectivement
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]" <alexispierre> a écrit dans le message de
news:a548
[..]
Patrice Henrio (04/01/2004, 19h39)
Tout à fait d'accord. Je pense que lorsque tu sauras que mon langage de
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]" <alexispierre> a écrit dans le message de
news:2544
> Salut Patrice,
> Tu as écrit :
> Tu as le droit ;-)
> Ceci dit beaucoup de programmeurs préfèrent utiliser la valeur de retour

de la
[..]
Zoury (05/01/2004, 23h03)
> Je préfère de beaucoup la méthode de Zoury avec un type utilisateur.

?! j'ai posté ça moi? je croyais que c'était Nicolas! :O)))
Zoury (05/01/2004, 23h09)
Salut! :O)

> 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.


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.
Patrice Henrio (06/01/2004, 14h35)
exact ! désolé et rendant à César ce qui est à César, il s'agit bien de ng.
"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:2324
[..]
Discussions similaires
Fonction de Hash retournant une clé sur 12 bits

Fonction retournant deux éléments

Fonction retournant une formule

Fonction retournant un pointeur...


Fuseau horaire GMT +2. Il est actuellement 13h08. | Privacy Policy