Recupérer les ouputs d'une fonction

Résolu
bouigs Messages postés 6 Date d'inscription dimanche 25 octobre 2009 Statut Membre Dernière intervention 28 octobre 2009 - 26 oct. 2009 à 14:04
bouigs Messages postés 6 Date d'inscription dimanche 25 octobre 2009 Statut Membre Dernière intervention 28 octobre 2009 - 28 oct. 2009 à 07:36
Bonjour à tous,
je débute en VB, et je me pose une question toute bête : si dans une fonction, je calcul plusieurs outputs, et que je souhaite les récupérer dans mon programme principal, comment je fait ??

Un petit exemple pour illustrer tout ça. Il s'agit de calculer dans une fonction les nombres d et e, à partir de nombres a, b et c définis dans le programme principal. Ensuite, je souhaite récupérer les nombres d et e calculés pour un autre usage (les afficher, ou bien les utiliser comme arguments d'une autre fonction).

Savez-vous comment faire ??

sub main()
dim a,b,c as double
call Ma_Fonction(a,b,c)
msgbox(d,e)
end sub

Function Ma_Fonction(a,b,c)
...
d=a+b
e=a+b+c
End function

7 réponses

jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
26 oct. 2009 à 18:20
Ecoute,
Je ne suis pas VCB.Netiste (comme déjà dit)
voilà (entre autres) deux manières qui fonctionneraient sous VB6 (à toi d'adapter... le principe doit être le même) :

Private Type toto
  titi As Integer
  tata As Integer
End Type


Private Sub Command1_Click()
  MsgBox lafonc(4, 7).titi & vbCrLf & lafonc(4, 7).tata
  MsgBox lafoncaut(4, 7)(0) & vbCrLf & lafoncaut(4, 7)(1)
End Sub


Private Function lafonc(A As Integer, B As Integer) As toto ' ici en utilisant une structure (UserType, donc)
  lafonc.tata = A + B
  lafonc.titi = A - B
End Function


Private Function lafoncaut(A As Integer, B As Integer) As Variant ' ici en utilisant un Array
  lafoncaut = Array(A - B, A + B)
End Function

                
3
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
26 oct. 2009 à 14:11
Bonjour,

une fonction retourne quelquechose et est normalement définie dans le type qu'elle retourne ...
Function Ma_Fonction(a,b,c)
n'est pas définie dans un type et ne retourne donc strictement rien ! Elle n'est finalement, telle que rédigée, qu'une simple routine !
0
bouigs Messages postés 6 Date d'inscription dimanche 25 octobre 2009 Statut Membre Dernière intervention 28 octobre 2009
26 oct. 2009 à 14:25
Bonjour,
merci pour cette précision.
Mais alors, comment définir correctement ma fonction pour qu'elle utilise les inputs a, b et c, et qu'elle donne en sortie d et e ?
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
26 oct. 2009 à 14:36
Alors là !
Soit on la définit comme un UserType (à définir lui-même)
soit on la définit comme un tableau avec 2 valeurs
Maqis là ... il va falloiur que tu t'intéresses un peu à cela avant de continuer... c'est indispensable.
Observation : je t'ai répondu bien que totalement ignorant de VB.Net (tellement c'est évident).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bouigs Messages postés 6 Date d'inscription dimanche 25 octobre 2009 Statut Membre Dernière intervention 28 octobre 2009
26 oct. 2009 à 14:52
Visiblement, ma question t'as choqué...et je suis passé pour une buse ! En réalité, j'ai codé pendant plusieurs années presque exclusivement en Fortran (où je suis beaucoup plus habitué à la gestion entrée/sortie des fonctions). Aujourd'hui, je souhaite juste adapter un de mes programmes en VB. Actuellement, tout fonctionne bien, sauf ce problème de récupération de données dans mon programme principal.

Je vais regarder de plus près les usertypes. Merci bien
0
lesdis Messages postés 403 Date d'inscription mercredi 19 avril 2006 Statut Membre Dernière intervention 7 août 2020
27 oct. 2009 à 16:37
Bonjour,

En vb.net, tu peux avoir trois solution.

Soit le résultat de ta fonction renvoi un tableau contenant tes deux valeurs, soit tu utilises des arguments par référence (équivalent des pointeurs) ou bien comme dans l'exemple de jmf0 tu peux utiliser les structures.

'Solution utilisant un tableau
    Private Function Calcul1(ByVal a As Integer, ByVal b As Integer, ByVal c As Integer) As Integer()
        Dim resultat(1) As Integer
        resultat(0) = a + b
        resultat(1) = b + c
        Return resultat
    End Function

'Solution utilisant une structure
    Private Structure resultat
        Dim e As Integer
        Dim f As Integer
    End Structure

    Private Function Calcul2(ByVal a As Integer, ByVal b As Integer, ByVal c As Integer) As resultat
        Dim result As New resultat
        result.e = a + b
        result.f = b + c
        Return result
    End Function

'Solution utilisant les arguments par référence
    Private Sub Calcul3(ByVal a As Integer, ByVal b As Integer, ByVal c As Integer, ByRef e As Integer, ByRef f As Integer)

        e = a + b
        f = b + c

    End Sub


A toi de choisir celle que tu préfères :)

Bonne Prog
0
bouigs Messages postés 6 Date d'inscription dimanche 25 octobre 2009 Statut Membre Dernière intervention 28 octobre 2009
28 oct. 2009 à 07:36
Super les exemples !
Merci pour vos conseils, j'y vois plus clair maintenant.
0
Rejoignez-nous