IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[VB6] Comment faire une fonction qui renvoie 2 résultats


Sujet :

VB 6 et antérieur

  1. #1
    Membre du Club

    Inscrit en
    Avril 2003
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 2
    Points : 48
    Points
    48
    Par défaut [VB6] Comment faire une fonction qui renvoie 2 résultats
    Bonjour à tous,
    Sur la FAQ, j'ai trouvé des fonction renvoyant un résultat. Est ce que quelqu'un pourrait me dire comment faire pour réaliser :
    - Une fonction qui renvoie 2 résultats.
    - Une fonction qui renvoie un tableau .

    Merci d'avance.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    pour une fonction qui renvoi deux resultat j'sais pas trop mais tu peut bidouiller une ou deux variables globales qui te affecte lors de ta fonction que tu recupere ensuite dans ton code !!!
    mais si quelqu'un connai j'suis preneur
    À vaincre sans péril, on triomphe sans gloire
    (Corneille)

  3. #3
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 163
    Points : 173
    Points
    173
    Par défaut
    tu peux aussi créer un type résultat avec deux (ou x) propriétés
    et utilisé ce type en retour de fonction
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !
    (Albert Einstein)

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    ben fait une fonction qui retourne un array ???
    resultat[0]
    resultat[1]

    return resultat;
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Il y a différents moyens pour faire retourner deux résultats à une fonction :
    * Retourner un tableau de longueur 2
    * Retourner un type utilisateur
    * Passer les resultats en paramètre et préciser ByRef aux params résultats

    Il existe un topic dédié à ce sujet : Pourquoi une seule valeur de retour pour les fonctions ?

  6. #6
    Membre du Club

    Inscrit en
    Avril 2003
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 2
    Points : 48
    Points
    48
    Par défaut
    si on part de cette exemple, je voudrai que la fonction test me renvoie les resultats a et b.
    Public Function test()

    a = "test"
    b = "essai"

    End Function

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    selon les trois propositions de CB:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function test() as variant
    redim preserve test(2)
    test(0) =  "test" 
    test(1) = "essai" 
    end function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Function test() as variant
    dim mytab(2) 
    mytab(0) =  "test" 
    mytab(1) = "essai" 
    test=mytab
    end function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Function test(byref a as string, byref b as string)
    a="test"
    b="essai"
    end function

    je suis pas sur pour le premier ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  8. #8
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Voici un jeu de test pour comparer les méthodes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Private Type DeuxResultats
        Resultat_1 As String
        Resultat_2 As String
    End Type
     
    Public Sub TestDeuxResultat()
        Dim MesDeuxResultats_A As DeuxResultats
        Dim MesDeuxResultats_B As Variant
        Dim MesDeuxResultats_C_1 As String
        Dim MesDeuxResultats_C_2 As String
     
        MesDeuxResultats_A = DeuxResultats_A()
        MesDeuxResultats_B = DeuxResultats_B()
        DeuxResultats_C MesDeuxResultats_C_1, MesDeuxResultats_C_2
     
        MsgBox "Méthode A" & vbCrLf & _
               "Resultat 1 : " & MesDeuxResultats_A.Resultat_1 & vbCrLf & _
               "Résultat 2 : " & MesDeuxResultats_A.Resultat_2 & vbCrLf & vbCrLf & _
               "Méthode B" & vbCrLf & _
               "Resultat 1 : " & MesDeuxResultats_B(0) & vbCrLf & _
               "Résultat 2 : " & MesDeuxResultats_B(1) & vbCrLf & vbCrLf & _
               "Méthode C" & vbCrLf & _
               "Resultat 1 : " & MesDeuxResultats_C_1 & vbCrLf & _
               "Résultat 2 : " & MesDeuxResultats_C_2
        End Sub
     
    Public Function DeuxResultats_A() As DeuxResultats
        DeuxResultats_A.Resultat_1 = "test de la méthode A"
        DeuxResultats_A.Resultat_2 = "essai de la méthode A"
    End Function
     
    Public Function DeuxResultats_B() As Variant
        Dim Tableau(1) As String
     
        Tableau(0) = "test de la méthode B"
        Tableau(1) = "essai de la méthode B"
     
        DeuxResultats_B = Tableau
    End Function
     
    Public Sub DeuxResultats_C(ByRef R1 As String, ByRef R2 As String)
        R1 = "test de la méthode C"
        R2 = "essai de la méthode C"
    End Sub
    A choisir, je préfère la première méthode...

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Points : 502
    Points
    502
    Par défaut
    A ce niveau, ne serait-il pas temps de passer aux collections d'objets???

  10. #10
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Citation Envoyé par Babyneedle
    A ce niveau, ne serait-il pas temps de passer aux collections d'objets???
    Peux tu préciser ton idée? S'agit-il de faire une fonction qui renvoie une collection? Dans ce cas je ne voie pas en quoi c'est plus simple, ca revient à renvoyer un tableau. Sauf que l'implentation n'est pas la même...

    Personnellement je préfère la solution qui utilise la notion de type utilisateur. Au moins on peut attribuer un nom aux variables manipulées.

    Un exemple d'utilisation, est une fonction qui renvoie les coordonnées du point d'intersection de deux droites. Dans ce cas le type est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Type Coordonnees
        Abs As Integer
        Coord As Integer
    End Type
    Si tu as une solution plus élégante et qui utilise une collection d'objets je suis preneur...

  11. #11
    mat.M
    Invité(e)
    Par défaut
    Peux tu préciser ton idée? S'agit-il de faire une fonction qui renvoie une collection? Dans ce cas je ne voie pas en quoi c'est plus simple, ca revient à renvoyer un tableau. Sauf que l'implentation n'est pas la même...
    Comme il a été mentionné précedemment une fonction renvoit toujours UN élément à moins d'utiliser un tableau ou bien un variant.

    Vouloir retourner plusieurs éléments c'est un peu du travail de , pardonnez-moi , de "cochon" .
    D'ailleurs pourquoi vouloir que la fonction retourne-t-elle plusieurs éléments ?
    Il suffit de passer les éléments qui doivent être affectés en argument à la fonction !!

    Pourquoi les collections ou structures ( avec mot -clé "type" ) passées en argument à une fonction ?
    Parce que c'est un codage plus propre et cela réflete une meilleure organisation et structuration du projet.
    En général , on passe pas plus de 4 arguments à une fonction sinon on passe une structure ou bien une instance de collection.

    Pour ce qui est des fonctions qui retournent une valeur , on utilise ce méchanisme algorithmique pour par exemple retourner un booléen pour s'assurer qu'un traitement soit bien effectué.
    Ou bien pour le résultat d'un calcul , pour calculer une valeur TTC en fonction d'un taux de TVA et montant HT.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. faire une fonction qui renvoie un tableau
    Par ghosty04 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/04/2009, 15h42
  2. Réponses: 2
    Dernier message: 08/01/2009, 11h49
  3. Réponses: 4
    Dernier message: 24/01/2007, 19h45
  4. Comment faire une PS qui renvoi l'annee en cours
    Par hugobob dans le forum Requêtes
    Réponses: 3
    Dernier message: 27/07/2006, 14h08
  5. Comment faire une fonction qui renvoi un tableau.
    Par poly128 dans le forum Delphi
    Réponses: 2
    Dernier message: 01/06/2006, 01h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo