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

VBA Access Discussion :

Récupérer le résultat de ma fonction dans une requête access


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Récupérer le résultat de ma fonction dans une requête access
    Bonjour,

    j'ai crée une fonction vba (voir code ci-dessous) et je souhaiterai récupérer les valeurs de var, avoir, retour, poids et testVAR dans une requête access.
    Est-ce possible ? ou bien d'afficher le résultat de ses valeurs dans un état...

    Merci par avance


    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
    Public Function testVAR()
     
    Dim Requete As Recordset
    Dim sql As String
    Dim avoir As Currency
    Dim retour As Currency
    Dim poids As Currency
    Dim var As String
     
    'code d'exécution de la requête :
    sql = "SELECT ETAvar.SommeDeAVOIR_AV2, ETAvar.SommeDeRETOUR_AV2, sumPDSFAC2var.SommeDeSommeDePDSFAC_FAC2, sumPDSFAC2var.VAR_AV3 FROM ETAvar INNER JOIN sumPDSFAC2var ON ETAvar.CODVAR_AV2 = sumPDSFAC2var.VAR_AV3;"
     
    Set Requete = CurrentDb.OpenRecordset(sql)
     
    If (Requete.RecordCount < 0) Then
    'requete.Edit 'Il s'arrète ici... "erreure 3021 : Aucun enregistrement en cours"
    Else
    Requete.MoveFirst
     
    Do While Requete.EOF = False
     
    var = Requete("VAR_AV3")
    avoir = Requete("SommeDeAVOIR_AV2")
    retour = Requete("SommeDeRETOUR_AV2")
    poids = Requete("SommeDeSommeDePDSFAC_FAC2")
     
    If testVAR < 0 Then Exit Do
     
    testVAR = (avoir + retour) / poids * 100
     
    Requete.MoveNext
     
    Loop
     
    End If
    End Function

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Malheureusement non, tu ne peux récupérer qu'une seule valeur en sortie d'une fonction dans une requête.

    Si tu veux récupérer 4 valeurs, il va falloir faire 4 fonctions différentes ou une fonction avec un paramêtre appelée 4 fois.

    Pour le dernier cas cela pourrait ressembler à :

    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
    Public Function MaFunction(prmResultatAttendu as string) as variant
       'Mettre ici les calculs
     
       'Determine quel résultat est renvoyé
       select case prmResultAttendu
          case "TestVAR"
              MaFunction=TestVAR
     
          case "Avoir"
              MaFunction=avoir
     
          'ici les autres cas possibles
     
          case else
              MaFunction=Null
     
       end select
     
    end function
    L'avantage de cette solution c'est que toute ta logique de calcul est groupée au même endroit ce qui facilite les tests et la maintenance ultérieure.

    L'appel dans la requette serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NomAliasVAR:MaFunction("TestVAR")
    NomAliasAvoir:MaFunction("Avoir")
    Note aussi que dans un programme VBA tu pourrais récupérer plusieurs valeurs en utilisant un type défini par l'utilisateur (ceci est appelé une "structure" dans d'autres langages).

    Dans ton exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Type ResultatMaFunction
        avoir As Currency
        retour As Currency
        poids As Currency
        var As String
    end Type
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Function MaFunction() as ResultatMaFunction
      dim result as ResultatMaFunction
      result.avoir='Ici le calcul de avoir
      result.retour='ici le calcul de retour
     
      'Autres instructions utiles ici
     
      MaFunction=result
    end function
    Tu pourrais, toujours dans un progarmme VBA utiliser aussi un objet (un module de classe en Access) mais c'est un peu plus complexe.

    A+

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/09/2010, 22h00
  2. Récupérer le résultat d'un .exe dans une variable
    Par stepd dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 02/12/2008, 09h38
  3. Réponses: 3
    Dernier message: 02/02/2007, 14h30
  4. récupérer le résultat d'un SELECT dans une variable ?
    Par budhax dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 06/06/2006, 10h24
  5. Réponses: 3
    Dernier message: 01/02/2006, 23h17

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