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 :

[VBA] Fonction non définie dans l'expression


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 27
    Points : 10
    Points
    10
    Par défaut [VBA] Fonction non définie dans l'expression
    Bonjour à tous,
    pour répondre à mon problème j'ai tenté de suivre les instructions trouvées dans la FAQ ICI mais rien n'y fait...

    J'ai copié-collé le code d'une fonction dans un module d'une nouvelle base de données.
    Lorsque je veux l'utiliser dans une requête, j'obtiens le message "Fonction non définie dans l'expression".

    Or la fonction ne pose aucun problème dans la BD d'origine.

    Par ailleurs, dans la nouvelle BD, dans Outils/Références, aucune bibliothèque n'est marquée comme manquante...

    Auriez-vous une idée ?

    Merci d'avance.

    ----edit-----------
    il s'agit d'ACCESS 2003

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Sans le code de la fonction cela sera dur, il faudrait le mettre

    Starec

  3. #3
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut,

    Euh.... nan pas d'idées sans avoir plus de précision sur cette fonction (code, emplacement, déclaration etc...), et comment tu t'en sers dans la requête.

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    oupss, pardon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function classvar(x, Y) As Double
    ' transformation de la variable en classes centrées
    ' arguments :
    '                  x = Variable
    '                  y = amplitude de la classe ( ex 200 pour classes centrées de 200 )
    If IsNull(x) Then classvar = Null: Exit Function
    If Val(x) = Y / 2 + (2 * Y * Int(Val(x) / (2 * Y))) Then x = Val(x) + 1  ' pour retrouver les mêmes classes que dans les anciennes fonctions de
                                                        ' de regroupement lorsque variable vaut 2 fois Y  ou Y/2
    'classVAR = classVAR((CInt(x / Y)) * Y, 4)
    classvar = (CInt(x / Y)) * Y
     
    End Function
    la fonction est dans un module,
    dans la requête j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomduchamps : classvar([Matable].[monchamps] ; 100)

  5. #5
    Invité
    Invité(e)
    Par défaut
    Re

    Déclare ta fonction Public (à mettre devant le mot Function), et montre nous le bout de code où tu fais appel à elle.

    Starec

  6. #6
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Citation Envoyé par Starec
    Re

    Déclare ta fonction Public (à mettre devant le mot Function), et montre nous le bout de code où tu fais appel à elle.

    Starec
    Il fait appel à la fonction dans la requête.

    Rien que de déclarer Public devrait suffir.

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    J'ai ajouté Public mais hélas ça ne fonctionne toujours pas.

    Citation Envoyé par Kikof
    Il fait appel à la fonction dans la requête.
    Oui, c'est en effet dans ma requête que j'utilise la fonction.

  8. #8
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Il y a quoi comme erreur maintenant ?
    nomduchamp est de quel type ?

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Il y a toujours le même message d'erreur "Fonction non définie dans l'expression".

    monchamps est de type numérique réel double.

    Je précise qu'il appartient à une table liée provenant d'une autre BD (je ne sais pas si c'est important).

  10. #10
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    J'ai utilisé la technique déjà (et je viens de me rendre compte au passage que ma fonction n'est pas déclarée en Public) et je ne vois pas ce qui cloche...

  11. #11
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Ca y est je pense savoir ce qui cloche.
    Compare ton entête de fonction avec la mienne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function Tranche(ByVal Valeur As Currency) As String
    Et avec celle des sources.

    Edit : ça me parait quand même bizarre que ça fonctionnait avant dans ton autre base

  12. #12
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    j'ai un très vague souvenir (mais sans être sûr que se soit vraiment ça) que la personne m'ayant donné cette fonction, m'avait dit (y a un bail...) d'aller dans Outil/Référence et de faire je ne sais plus trop quelle manip....
    Mais là j'ai décoché puis recoché toutes les bibliothèques présentes dans la BD originale (dans laquelle la fonction fonctionne) mais sans succès...

    ----edit----
    viens de voir ton second post, je teste.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Re

    Ta fonction est bizarre, car ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    classvar = (CInt(x / Y)) * Y
    tu fais une conversion en entier, alors que tu récupére des données sans type, en plus en double, tu devrais avoir une erreur de type incompatible, ce qui a priori n'est pas le cas.

    est-ce que les données de la base d'origine (où était la fonction) sont les mêmes que la base actuelle ?

    Starec

  14. #14
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Personnellement, au niveau des références je n'ai rien de spécial de coché.

  15. #15
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Starec
    est-ce que les données de la base d'origine (où était la fonction) sont les mêmes que la base actuelle ?
    Oui, j'ai importé une table pour faire le test, ça fonctionne dans une BD et pas dans l'autre, avec exactement les mêmes données.

    Citation Envoyé par Starec
    tu fais une conversion en entier, alors que tu récupére des données sans type, en plus en double, tu devrais avoir une erreur de type incompatible, ce qui a priori n'est pas le cas.
    En fait au final on récupère bien un entier ; par exemple si la valeur X vaut 203, et qu'on a indiqué une classe d'intervalle Y de 100, on récupère l'entier 200.

    Ceci me fait dire que cette fonction est un peu différente de celle que m'a indiqué Kikof, qui renvoie du texte.
    Du coup j'ai pas trop su quoi faire avec...

    Mais bon, comme vous vous en rendez compte je suis une bille en prog, donc je dis peut-être des bêtises...

  16. #16
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Kikof
    Personnellement, au niveau des références je n'ai rien de spécial de coché.
    Oui, je dois sûrement me tromper et confondre avec autre chose.

  17. #17
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Bon ben c'est du chinois pour moi, car j'ai remplacé le nom "classvar" par "test", sans rien changer d'autre, et ça marche...

    Mon pb est donc résolu et je vous remercie beaucoup de votr aide !

    Toutefois, si vous avez une explication, je suis preneur !

  18. #18
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Je crois que je viens de comprendre :
    j'ai intitulé mon module comme ma fonction ! Cela doit générer un conflit quelquepart !

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

Discussions similaires

  1. [AC-2003] Module VBA dans requête : Erreur "Fonction non définie dans l'expression"
    Par laurentw dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 12/11/2011, 14h32
  2. [XL-2007] Fonction non définie dans l'expression
    Par Bamban dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 15/09/2011, 17h00
  3. [AC-2007] Fonction non définie dans l'expression
    Par teuzadur dans le forum VBA Access
    Réponses: 1
    Dernier message: 15/06/2011, 21h48
  4. Fonction non définie dans l'expression
    Par bartbart dans le forum VBA Access
    Réponses: 8
    Dernier message: 21/11/2007, 15h40
  5. Réponses: 2
    Dernier message: 01/06/2006, 14h54

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