Recupérer les ouputs d'une fonction [Résolu]

Signaler
Messages postés
6
Date d'inscription
dimanche 25 octobre 2009
Statut
Membre
Dernière intervention
28 octobre 2009
-
Messages postés
6
Date d'inscription
dimanche 25 octobre 2009
Statut
Membre
Dernière intervention
28 octobre 2009
-
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

Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
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
                        
                
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
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 !
Messages postés
6
Date d'inscription
dimanche 25 octobre 2009
Statut
Membre
Dernière intervention
28 octobre 2009

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 ?
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
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).
Messages postés
6
Date d'inscription
dimanche 25 octobre 2009
Statut
Membre
Dernière intervention
28 octobre 2009

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
Messages postés
403
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
7 août 2020
1
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
Messages postés
6
Date d'inscription
dimanche 25 octobre 2009
Statut
Membre
Dernière intervention
28 octobre 2009

Super les exemples !
Merci pour vos conseils, j'y vois plus clair maintenant.