OVH Cloud OVH Cloud

Garder données

6 réponses
Avatar
Antoine
Bonjour,
J'ai dans un formulaire, une zone de texte qui affiche le=20
nombre de jours restant avant la f=EAte de quelqu'un. Code=20
VBA qui est accessible sur le site de Raymond.=20

Je voudrais pouvoir trier mes enregistrements par ce=20
nombre, mais =E9tant donn=E9 que c'est une zone de texte qui=20
ne d=E9pend pas directement d'une table, je ne peux pas.

J'ai donc pens=E9 l'appel=E9 dans une requ=EAte, mais je ne sais=20
pas comment.=20

Si vous avez la solution pour la requ=EAte ou une autre=20
solution qui arrive au m=EAme r=E9sultat...
Merci,
Antoine

6 réponses

Avatar
Raymond [mvp]
Bonsoir Antoine.

La fonction NbJoursAvantAnniversaire retourne une donnée de type integer.
dans une requête le champ calculé sera conservé en integer.
si tu retrouves cette donnée en texte, il faut convertir ton champ en
integer par Int(Monchamp)
si tu as mis la valeur retournée dans un contrôle texte d'un formulaire, tu
peux définir le format numérique.
Pour récupérer la valeur retournée dans une requête dans une colonne tu
indiques:
MesJours: NbJoursAvantAnniversaire([DateNaissance])

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Antoine" a écrit dans le message de
news:b98801c47985$c4e3a100$
Bonjour,
J'ai dans un formulaire, une zone de texte qui affiche le
nombre de jours restant avant la fête de quelqu'un. Code
VBA qui est accessible sur le site de Raymond.

Je voudrais pouvoir trier mes enregistrements par ce
nombre, mais étant donné que c'est une zone de texte qui
ne dépend pas directement d'une table, je ne peux pas.

J'ai donc pensé l'appelé dans une requête, mais je ne sais
pas comment.

Si vous avez la solution pour la requête ou une autre
solution qui arrive au même résultat...
Merci,
Antoine
Avatar
Antoine
Merci de votre aide, je vais essayer un peu plus tard.

ce que je ne comprends pas, c'est que la fonction
NbJoursAvantAnniversaire est dans un code VBA pour un
formulaire.
Lorsque je vais créer la requête, Access va reconnaître
NbJoursAvantAnniversaire à partir de la fonction VBA du
formulaire?

Merci,
Antoine
Avatar
Raymond [mvp]
la fonction est à placer dans un module standard et non dans un formulaire,
comme toutes les fonctions de ce site, pour être accessible par tous les
objets y compris les requêtes.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Antoine" a écrit dans le message de
news:ba8b01c4798a$aa9907e0$
Merci de votre aide, je vais essayer un peu plus tard.

ce que je ne comprends pas, c'est que la fonction
NbJoursAvantAnniversaire est dans un code VBA pour un
formulaire.
Lorsque je vais créer la requête, Access va reconnaître
NbJoursAvantAnniversaire à partir de la fonction VBA du
formulaire?

Merci,
Antoine
Avatar
Antoine
Rebonjour,
Et remerci pour vos réponses.
J'ai cependant un problème pour intégrer la fonction dans
la requête. Je vais vous donner l'exemple avec la
fonction "Age".

J'ai essayé d'entrer la fonction "Age" pour l'avoir dans
un requête.
J'ai fait un module "Age" , avec votre code VBA.
Dans ma requête j'ai mis les champs 'DateNaissance'
et 'Prénom', et comme toisième:
Age: Age([DateNaissance];Date())

Lorsque je veux aller en mode de données, Il y a ce
message d'erreur: Fonction 'Age' non définie dans
l'expression
Et ce que je mette 'Public Function' ou 'Function'

----------------------------------
Public Function Age(DateNaissance As Date, CeJour As Date)
As Integer
' Renvoie l'Age en années dans une fourchette de deux
dates.
' N'accepte pas les fourchettes négatives. Par
exemple, DateNaissance > CeJour
If Month(CeJour) < Month(DateNaissance) Or (Month
(CeJour) = Month(DateNaissance) And Day(CeJour) < Day
(DateNaissance)) Then
Age = Year(CeJour) - Year(DateNaissance) - 1
Else
[Age = Year(CeJour) - Year(DateNaissance)]
End If
End Function
-----------------------------------


Merci,
Antoine
Avatar
3stone
Salut,

"Antoine"
J'ai essayé d'entrer la fonction "Age" pour l'avoir dans
un requête.
J'ai fait un module "Age" , avec votre code VBA.
Dans ma requête j'ai mis les champs 'DateNaissance'
et 'Prénom', et comme toisième:
Age: Age([DateNaissance];Date())

Lorsque je veux aller en mode de données, Il y a ce
message d'erreur: Fonction 'Age' non définie dans
l'expression


Ne pas créer un champ (même calculé) du même nom qu'une fonction!
Pour éviter cela, prend l'habitude de préfixer tes fonctions par fn...

Donc ici: Public Function fnAge(....)


Et ce que je mette 'Public Function' ou 'Function'


Choux vert et vert choux....
Si tu mets 'Function' elle est considérée publique.


----------------------------------
Public Function fnAge(DateNaissance As Date, CeJour As Date) As Integer


Dans ta requête, cela devient:

Age: fnAge([DateNaissance];Date())


Mais, je présume que tu as placer la fonction dans un
module standard (onglet Module) ??

Et là, attention aussi !! Lorsque tu sauve un module,
veille à ne pas le nommer du même nom qu'une fonction
qu'il contient.
Pas de module "Age" qui contient une fonction "Age"
Encore une fois, préfixe les noms de modules, avec
par exemple "mod", ce qui donne:

modAge ou modCalculSurDate si tu rassemble les
fonctions par theme.


--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------
Avatar
Antoine
Merci énormément
Antoine

Je savais que ce n'était pas trop bon de mettre les mêmes
noms, mais pas à ce point!
MErci encore
Antoine