Fonction non définie dans l'expression

allroadspp Messages postés 38 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 31 octobre 2008 - 31 janv. 2008 à 21:21
allroadspp Messages postés 38 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 31 octobre 2008 - 7 mars 2008 à 11:54
Bonsoir,

je bute depuis pas mal de temps ça :

Lorsque je veux faire exécuter une fonction j'ai ce message :

fonction "xxxx" non définie dans l'expression....

J'ai beau coher et décocher les références, rien à faire....à priori pas d'erreur dans le code.....j'ai suivi les tutoriels...help me!!! (access 2007, WXP)

Function Date_convocation3(strDécision As String) As Date
Dim DtmConvocation As Date
'Décision(1) = "Apte 1 an"
'Décision(2) = "Apte 2 ans"
'Décision(3) = "Mis en attente de révision par le médecin-chef"
'Décision(4) = "Inapte opérationnel 1 mois"
'Décision(5) = "Inapte opérationnel 2 mois"
'Décision(6) = "Inapte opérationnel 3 mois"
'Décision(7) = "Inapte opérationnel 6 mois"
'Décision(8) = "Inapte opérationnel 12 mois"
'Décision(9) = "Inapte opérationnel définitif"
'Décision(10) = "Inapte secours à personnes temporaire"
'Décision(11) = "Inapte Secours à personnes définitif"
'Décision(12) = "Inapte incendie temporaire"
'Décision(13) = "Inapte incendie définitif"
'Décision(14) = "Inapte aux sports statutaires temporaire"
'Décision(15) = "Inapte aux sports statutaires définitif"
'Décision(16) = "Adaptation personnelle au sport"
'Décision(17) = "Apte avec restrictions (préciser)"
'Décision(18) = "A revoir"




Select Case strDécision
Case "Apte 1 an": DtmConvocation = (Date + 365)
Case "Apte 2 ans": DtmConvocation = (Date + 730)
Case "Mis en attente de révision par le médecin-chef": DtmConvocation = (Date + 30)
Case "Inapte opérationnel 1 mois": DtmConvocation = (Date + 30)
Case "Inapte opérationnel 2 mois": DtmConvocation = (Date + 60)
Case "Inapte opérationnel 3 mois": DtmConvocation = (Date + 90)
Case "Inapte opérationnel 6 mois": DtmConvocation = (Date + 180)
Case "Inapte opérationnel 12 mois": DtmConvocation = (Date + 365)
Case "Inapte opérationnel définitif": DtmConvocation = (Date + 365)
Case "Inapte secours à personnes temporaire": DtmConvocation = (Date + 90)
Case "Inapte Secours à personnes définitif": DtmConvocation = (Date + 365)
Case "Inapte incendie temporaire": DtmConvocation = (Date + 90)
Case "Inapte incendie définitif": DtmConvocation = (Date + 365)
Case "Inapte aux sports statutaires temporaire": DtmConvocation = (Date + 90)
Case "Inapte aux sports statutaires définitif": DtmConvocation = (Date + 365)
Case "Adaptation personnelle au sport": DtmConvocation = (Date + 365)
Case "Apte avec restrictions (préciser)": DtmConvocation = (Date + 90)
Case "A revoir": DtmConvocation = (Date + 30)
Case Else: DtmConvocation = "Vérifier la date de convocation !"
End Select
Date_convocation3 = DtmConvocation
End Function

64 réponses

LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
31 janv. 2008 à 21:30
Salut,
Dim DtmConvocation As Date
Case Else: DtmConvocation = "Vérifier la date de convocation !"

Alors Date ou String ? !!!

<hr />

... Il y' en a même qui m' ont vu voler.

<hr />
0
allroadspp Messages postés 38 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 31 octobre 2008
2 févr. 2008 à 12:01
Salut,

C'est Date....pourquoi ?
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
2 févr. 2008 à 12:23
Salut,
Parce que : "Vérifier la date de convocation !"
n' est pas une date !

De plus , si tu veux ajouter un nombre à une date ,
comme dans (Date + 365) par exemple,il faut utilider DateAdd("d",Date,350).                 
<hr />
... Il y' en a même qui m' ont vu voler.
<hr />
     
0
allroadspp Messages postés 38 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 31 octobre 2008
2 févr. 2008 à 13:06
Ok,
A priori même si ce n'est pas une date, le fait d'écrire dtm au lieu de str peut provoquer un bug ?

[De plus , si tu veux ajouter un nombre à une date ,
comme dans (Date + 365) par exemple,il faut utilider DateAdd("d",Date,350).   ].... je vais essayer, mais cette syntaxe fonctionne dans la requette !

Sont-ce ces deux points qui peuvent expliquer le messagebox : " fonction "Date_convocation3" non définie dans l'expression ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
2 févr. 2008 à 14:12
Ah oui, ...il me semble que j' ai compris .
Corriges-moi si je me trompe.
-Tu as définis ta fonction dans Access, et tu l' as
intègré dans une requete.
-Si tu exécutes cette requete dans Access, elle marche.
Normal: c' est une fonction intègrée, à l' inmage des
fonctions prédéfinies.

-Mais lorsque tu exécutes cette requete depuis VB,
ça bug !
Je ne dirais pas c' est Normal, mais en tout cas
j' ai jamais réussi à le faire.J' ai tout de suite abandonné
cette approche dès les premiers essais.Depuis j' ai jamais cherché
à résoudre ce problème.
Si tu trouves, n' oublies pas de m' avertir.

Bonne continuation.

<hr />
... Il y' en a même qui m' ont vu voler.
<hr />
0
allroadspp Messages postés 38 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 31 octobre 2008
2 févr. 2008 à 20:49
Désolé, c'est pas ça le pb. Le fait est que j'ai intégré cette fontion dans une requête et lorsque j'ouvre cette requête j'ai cette foutu message-box.

Lorsque je vais dans les références (sous VBA) j'ai beau les décocher et les recocher, comme certains l'ont suggéré, mais pour moi rien n'y fait.

Au fait j'ai modifié les codes selon ta correction, sauf pour la dernière ligne car je n'ai pas pigé comment il faudrait rédiger cette ligne si il y a erreur :
Case Else: DtmConvocation = "Vérifier la date de convocation !"
Effectivement ce n'est pas une date, mais c'est le message que je voudrais voir afficher si les autres conditions (les 18) ne sont pas remplies.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 22
2 févr. 2008 à 21:08
Case Else: MsgBox "Vérifier la date de convocation !"

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
allroadspp Messages postés 38 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 31 octobre 2008
2 févr. 2008 à 21:33
ça ça va me faire apparaitre une messagebox ! , moi je voudrais juste cet item dans la case de la requête....

Mais vs avez pas une solution pour ce *$$^& !!!de problème de "fonction non définie dans l'expression", là j'ai les nerfs en pelotte...si , si
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 22
2 févr. 2008 à 21:39
Tu déclares ceci
Dim DtmConvocation As Date

Donc, on est d'accord, DtmConvocation est une variable et elle est de type Date.

Maintenant, si tu ne veux pas voir de MsgBox et que tu veux ton textbox afficher un message, mets le nom du textbox


Case Else: MonTextBox.Text = "Vérifier la date de convocation !"

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 22
2 févr. 2008 à 21:53
Autre chose qui m'échappait...
On est dans un Function qui retourne une date.

Tu dois donc avoir une date de retour quand tu écris
Date_convocation3 = DtmConvocation

Donc, dans ton Case Else, mets une date bidon du genre 1/1/1900
>>> Case Else: DtmConvocation = #1/1/1900#

Et lorsque tu appelles cette Function, vérifies la valeur de retour. Si elle est égale à 1/1/1900, fais ce que tu dois faire... inscrire un message dans un textbox, mettre un MsgBox, autre...(?)

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
allroadspp Messages postés 38 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 31 octobre 2008
2 févr. 2008 à 21:54
Oui, je veux afficher ce message à la place d'une date (puisque les conditions ne sont pas remplies).

Par contre, je ne pourrais pas essayer cette option, puisque j'ai toujours cette maudite "fonction non définie dans l'expression", à l'ouverture de la requête...quelqu'un a t'il déjà eu ce problèmeuh ?
0
allroadspp Messages postés 38 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 31 octobre 2008
2 févr. 2008 à 22:00
Ah OK, je tenterai ça.......dès que quelqu'un m'aura tuyauté sur ce problème de fonction non définie dans l'expression car actuellement ma requête ne s'ouvre pas.....puisque la fonction n'est pas reconnue....ouinnnnnn !
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 22
2 févr. 2008 à 22:02
Où est cette Function ?
Dans module standard (.bas) et déclarée en Public, j'espère (?!)

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
allroadspp Messages postés 38 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 31 octobre 2008
2 févr. 2008 à 22:04
Effectivement, elle est dans le module (comme les autres que j'ai mis pour tester) et la première ligne renseigne bien : Public function....
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 22
2 févr. 2008 à 22:25
Et comment appelles-tu cette Function ?

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
allroadspp Messages postés 38 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 31 octobre 2008
2 févr. 2008 à 22:38
elle s'appelle : Date_convocation3
pour l'instant.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 22
2 févr. 2008 à 22:42
Non, je veux dire quand tu appelles la Function dans ton code, comment le fais-tu ? Qu'écris-tu exactement ?

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
allroadspp Messages postés 38 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 31 octobre 2008
2 févr. 2008 à 22:47
Première ligne :
Public Function Date_convocation3(strDécision As String) As Date
Puis :
Dim DtmConvocation as Date
(j'ai mis l'ensemble du code dans mon premier post)
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 22
2 févr. 2008 à 22:54
Non non non... on va y arriver...

Le code de ta Function, tu l'as déjà donné et je vois bien comment tu l'as nommée et définie, avec un paramètre strDécision et retour sous format Date...  Mais pour pouvoir l'utiliser, tu dois l'appeler à quelque part dans ton programme, non ? C'est cet appel que je veux voir.

Normalement, ce devrait être quelque chose comme

MonTextboxDate = Date_convocation3("MaValeur")
ou encore
MaVariableDate = Date_convocation3("MaValeur")

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
allroadspp Messages postés 38 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 31 octobre 2008
2 févr. 2008 à 23:03
Oui, oui (ahem....merci pour ta patience) alors voilà :

J'ai mis dans le champs de ma requête :
Convocation : Date_convocation3([Décision)]
Décision est le titre d'un autre champ de cette requête. ce champ contient un menu déroulant avec les 18 items que j'ai fais apparaître dans le code pour mémoire.
0