[ACCESS] Statisque simple sur l'âge

Fermé
Hiwiiiii - 20 mai 2008 à 15:25
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 - 22 mai 2008 à 13:43
Bonjour,
je cherche à faire apparaître 3 simples statistique sur mon formulaire Access,
j'ai donc une table PERSONNE, avec dedans plusieurs enregistrement, j'ai un champ où est stocké la date de naissance de ces personnes (format jj/mm/aa)

dans mon formulaire, j'affiche le nombre total de personne dans la table (ça c'est ok)
je voudrais aussi ajouter ¤ le nombre de personne qui ont moins de 26ans
¤ le nombre de personne ayant entre 27 et 49ans
¤ le nombre de personne ayant plus de 50ans
(à afficher dans des zones texte classique)

Il faudrait donc soustraire la date de naissance avec la date d'aujourd'hui pour obtenir l'âge et ensuite l'attribuer à telle ou telle catégorie et la je nage complètement !

Merci pour vos réponses

21 réponses

Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 385
20 mai 2008 à 17:21
Bonjour,

Pour calculer l'age tu peux utiliser le code suivant
ENT(DIFFDATE("j"; [datenaissance]; NOW( )) / 365.25)

Tu trouveras d'autres informations sur le site suivant

A plus
0
Toujours la même question svp !
0
Désolé je n'avais pas vu votre réponse !!
ça à l'air d'être ce qu'il faut je vais essayer de la faire marcher.
Merci je vous tiens au courant.
0
On est obliger de l'utiliser dans une requête peut-être ??? Moi ça m'arrangerais de pouvoir le mettre directement dans le source contrôle d'une zone texte.
Je regardes, je regardes
0

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

Posez votre question
Bon le premier truc ça marche, cad que j'arrive à avoir l'age en fonction de la date de naissance dans une zone texte :

=DiffDate("aaaa";[TDE_naiss];Maintenant())

maintenant il faut que j'arrive à les comptabiliser dans telle ou telle catégorie, mais pour faire ça je suis obligé de créer un champ dédié, non ?
A+
0
Bon jsuis bloqué lol
help meeeeeeee.
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 385
21 mai 2008 à 11:52
Bonjour,

Tu peux utiliser l'ordre SQL suivant
select count(*) from nomdetatable
where DiffDate("aaaa";[TDE_naiss];Maintenant()) < 26
union
select count(*) from nomdetatable
where DiffDate("aaaa";[TDE_naiss];Maintenant()) between 26 and 49
union
select count(*) from nomdetatable
where DiffDate("aaaa";[TDE_naiss];Maintenant()) > 49

Tu auras comme résultat 3 lignes contenant le nombre de personnes <26 , >25 et < 50 , > 49

Tu peux aussi rajouter une colonne dans ta table qui contient la valeur suivante 1 si age < 26, 2 si age entre 26 et 49, 3 si age > 49 et le code sera alors
select nouvellecolonne , count(*)
from nomdetatable
group by nouvellecolonne

Je pense que cela devrait faire ce que tu cherches
A plus
0
Merci de votre réponse, je n'avais pas pensé au SQL, je parle que votre synthaxe est bonne mais je ne sais pas comment utiliser ce code sous ACCESS, désolé mais j'ai appris le SQL sur un terminal Unix et la je suis perdu lol
Si vous pouvez m'en dire encore un peu plus, vraiment désolé pour toutes ces questions.
A+
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 385
21 mai 2008 à 17:03
Bonjour,

Peux-tu me dire comment tu obtiens le nombre total de personnes dans ton formulaire ?

A plus
0
Salut,
alors pour tout ce qui est comptage "simple", j'utilise une fonction que l'on m'a conseillé sur le forum :

=CpteDom("TDE_id";"TDE")

TDE=table demandeur emploi

je ne passe pas par le SQL, je met ça : clique droit>Donnée>Source contrôle.

A+ merci

Comme je l'ai dit ton code doit faire ce que je veux mais je ne sais pas comment l'utiliser :s
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 385
22 mai 2008 à 10:26
Bonjour,

Tu dois d'abord crée 3 requêtes et les sauver chacune avec un nom différent
Requête 1
Comme colonne --> Expr1: Count(*)
Comme critère --> datediff('aaaa',[TDE.datedenaissance],maintenant()) < 26
Requête 2
Comme colonne --> Expr1: Count(*)
Comme critère --> datediff('aaaa',[TDE.datedenaissance],maintenant()) between 26 and 49
Requête 3
Comme colonne --> Expr1: Count(*)
Comme critère --> datediff('aaaa',[TDE.datedenaissance],maintenant()) > 49

Ensuite tu rajoutes trois champs dans ton formulaire

Ensuite tu rajoutes le code suivant en ouvrant les propriétés de ton formulaire et cliquant sur l'événement onload (j'ai Access en anglais)
Dim db As Database ' Pointeur pour la base courante
Dim rst As Recordset ' Pointeur pour le recorset devant contenir le résultat de la recherche

Set db = CurrentDb ' On pointe sur la base courante

Set rst = db.OpenRecordset("nomdetarequête1") 'On défini la requete

rst.MoveFirst ' On pointe sur le premier élément trouvé

While Not (rst.EOF) ' On passe en revue tous les enregistrement tant qu'il y en a
        nomchamp1.Value = rst!Expr1 ' On affiche la valeur du champ voulu de l'enregistrement courant
        rst.MoveNext ' On passe à l'enregistrement suivant
Wend ' on va au début de la boucle

rst.Close ' Fermeture du recordset

Set rst = db.OpenRecordset("nomdetarequête2") 'On défini la requete

rst.MoveFirst ' On pointe sur le premier élément trouvé

While Not (rst.EOF) ' On passe en revue tous les enregistrement tant qu'il y en a
        nomchamp2.Value = rst!Expr1 ' On affiche la valeur du champ voulu de l'enregistrement courant
        rst.MoveNext ' On passe à l'enregistrement suivant
Wend ' on va au début de la boucle

rst.Close ' Fermeture du recordset

Set rst = db.OpenRecordset("nomdetarequête3") 'On défini la requete

rst.MoveFirst ' On pointe sur le premier élément trouvé

While Not (rst.EOF) ' On passe en revue tous les enregistrement tant qu'il y en a
        nomchamp3.Value = rst!Expr1 ' On affiche la valeur du champ voulu de l'enregistrement courant
        rst.MoveNext ' On passe à l'enregistrement suivant
Wend ' on va au début de la boucle

rst.Close ' Fermeture du recordset


J'espère que cela pourra t'aider.

A plus
0
Waa tout ça pour ça lol.

Merci pour ta raison bien développé j'y travail.

Pour l'instant :
la syntaxe n'est pas bonne et l'expression "Expr1: Count(*) " je ne sais pas où elle va lol

Comme tu es en anglais je vais te donné ce que j'ai comme "champ" :

Champ: TDE_naiss
Table: TDE
Tri:
Afficher:
Critères:
Ou:

En tout cas merci je cherche
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 385
22 mai 2008 à 12:32
Bonjour,

Dans Champ, tu tapes tout simplement Count(*) et Access va rajouté Expr1 devant une fois la requête sauvée.
Dans critères tu tapes DiffDate('aaaa',[TDE.datedenaissance],Maintenant()) < 26

Concernant la fonction Datediff , c'est celle en anglais, en français c'est comme tu l'as indiqué DiffDate, désolé pour cela.

A plus
0
J'ai essayé de voir avec ce site :
https://www.techonthenet.com/access/functions/date/datediff.php
J'ai essayé de le présenté différemment mais ça ne marche pas.

Lorsque j'essaye de sortir du champ, j'ai un message erreur de syntaxe, si je choisis ok je reviens et si je fais aide, le volet s'ouvre mais reste vide.
de plus le curseur se replace au niveau de la première virgule, cela signifie que le problème vient de la ?

Expr1 : datediff('yyyy',[TDE_naiss],maintenant())



j'ai essayé avec des guillemets, avec aaaa mais ça ne fonctionne toujours pas.
0
shuya89 Messages postés 470 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 28 novembre 2014 39
22 mai 2008 à 11:16
et pourquoi au lieu de demander la dte de naissance tu met pas direct l'age
0
Voila la syntaxe qui fonctionne chez moi !!!!

Expr1 : DiffDate("aaaa";[TDE_naiss];Maintenant())<26

Cela retourne -1 sir c'est effectivement inférieur à 26 et 0 dans les autres cas.
0
Bahh pour que l'âge ne soit pas obsolète l'année prochaine, après c'est vrai qu'il est peut-être possible d'augmenter de 1 tous les ans je ne sais pas...

mais la j'ai besoin des date exact donc de la naissance.
0
shuya89 Messages postés 470 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 28 novembre 2014 39
22 mai 2008 à 11:22
et ben tu bosse sur une base de donnée que tu doit actualise donc tout les ans tu actualise l'age
0
j'ai pas compris xD
sinon moi je fais un log. pour des secrétaires et après il n'y aura plus aucune modification, elle vont pas s'amuser à rajouter un an partout...
Ma solution me convient lol A+

Avec ma requête précédente et un critère "-1" ça me sors ce que je veux comme résultat.

Maintenant je vais voir pour afficher ce résultat dans un texte.
0
Comment afficher le nombre de -1 que me retourne ma requête dans un champ txt, svp.
0
Je pense que c'est la que je dois utiliser le record set
0