Partage
  • Partager sur Facebook
  • Partager sur Twitter

[VBA] Appeler fonction en SQL

    9 janvier 2018 à 17:38:18

    Bonjour à tous

    Voici mon léger soucis auquel j'en n'ai pas trouvé de solutions malgré beaucoup de recherches.

    Je travaille sur Access et j'ai écrit une fonction dans un module VBA, qui se compile sans soucis.

    Seulement lorsque j'écris une requête (en mode SQL, je n'ai pas encore bien saisi le mode Design d'access) en appelant cette fonction, on me répond qu'elle est "undefined".

    SELECT maFonction (colonne) FROM MaTable -> ne fonctionne pas

    Existe-t-il une solution ?

    Merci

    -
    Edité par Benzouye 10 janvier 2018 à 9:19:07

    • Partager sur Facebook
    • Partager sur Twitter
      10 janvier 2018 à 9:18:47

      Bonjour,

      Je déplace dans le forum "Autres langages" car VBA est différent de .NET ;)

      Franck94 a écrit:

      lorsque j'écris une requête (en mode SQL, je n'ai pas encore bien saisi le mode Design d'access) en appelant cette fonction, on me répond qu'elle est "undefined"

      Ce que tu veux faire n'est pas possible. Une fonction VBA n'est pas reconnue par le moteur de BDD de Access (Jet).

      Par ailleurs, il me semble qu'il n'est pas possible non plus de créer des nouvelles fonctions SQL dans Access (User Defined Functions).

      Donc à mon avis la solution c'est de récupérer tes données "brutes" en VBA, puis d'appliquer ta fonction après sur la valeur de la colonne en question dans une boucle pour les afficher "calculées" ensuite ...

      -
      Edité par Benzouye 10 janvier 2018 à 9:22:20

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        10 janvier 2018 à 14:46:42

        Ok désolé pour l'erreur et merci pour la réponse !
        • Partager sur Facebook
        • Partager sur Twitter
          11 janvier 2018 à 15:17:09

          Bonjour,

          Il est possible d'utiliser des fonctions d'un module VBA dans une commande SQL sous Access.

          Prenons pour exemple la table suivante :

          Table1
          PRENOMSEXEDONNEES
          FLORENT 1 10
          SYLVIE 2 9
          DAMIEN 1 4
          ROBERT 1 30
          JULIE 2 3
          AMELIE 2 20
          ANDRE 1 7

          L’exécution des commandes et routines suivantes :

          Option Compare Database
          Option Explicit
          Public Function fct_sexe(x As Integer) As String
          If x = 1 Then
          fct_sexe = "H"
          ElseIf x = 2 Then
          fct_sexe = "F"
          End If
          End Function
          Public Function fct_donnees(y As Integer) As Integer
          Select Case y
              Case 0 To 4
               fct_donnees = y - 1
              Case 5 To 10
               fct_donnees = y + 1
              Case Is > 10
               fct_donnees = y + 2
              Case Else
               fct_donnees = 0
          End Select
          End Function

          Sub test2()
          DoCmd.RunSQL ("SELECT PRENOM, fct_sexe(SEXE) AS GENRE, fct_donnees(DONNEES) AS DONNEES_TRANSFO " & _
                        "INTO Table2 " & _
                        "FROM Table1;")
          End Sub

          donnera :

          Table2
          PRENOMGENREDONNEES_TRANSFO
          FLORENT H 11
          SYLVIE F 10
          DAMIEN H 3
          ROBERT H 32
          JULIE F 2
          AMELIE F 22
          ANDRE H 8

          -
          Edité par mendes_florent 11 janvier 2018 à 15:19:52

          • Partager sur Facebook
          • Partager sur Twitter
            11 janvier 2018 à 15:26:23

            Merci Florent pour la précision ;)

            Et désolé Franck pour la désorientation ... :-°

            • Partager sur Facebook
            • Partager sur Twitter
            Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
              22 janvier 2018 à 15:35:30

              OK merci pour la réponse (que je n'avais pas vue ;)
              • Partager sur Facebook
              • Partager sur Twitter

              [VBA] Appeler fonction en SQL

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown