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 :

Comment mettre à jour automatiquement un champ selon une date [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre éprouvé

    Homme Profil pro
    Technicien
    Inscrit en
    Août 2013
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2013
    Messages : 440
    Points : 1 192
    Points
    1 192
    Par défaut Comment mettre à jour automatiquement un champ selon une date
    Bonjour

    je remplis une base de données d'adhérents et je souhaiterais qu'access me détermine un champ à partir d'un autre champ.
    Ainsi, je demande la date de naissance d'une personne et j'aimerais qu'une fois renseigné ce champ, je puisse avoir un autre champ "Categorie" qui prenne automatiquement la valeur suivant la date de naissance.
    Pour se faire, j'ai utilisé le code ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Private Sub Datenaissance_BeforeUpdate(Cancel As Integer)
    Dim Age As Long
    Age = Year(Date) - Year(Datenaissance)
    Select Case Age
        Case Is <= 6
        Categorie = "Baby volley"
        Case Is = 7, 8
        Categorie = "Pupille"
        Case Is = 9, 10
        Categorie = "Poussin"
        Case Is = 11, 12
        Categorie = "Benjamin"
         Case Is = 13, 14
        Categorie = "Minime"
         Case Is = 15, 16
        Categorie = "Cadet"
        Case Is = 17, 18
        Categorie = "Junior"
        Case Is = 19, 20
        Categorie = "Espoir"
        Case Is > 20
        Categorie = "Sénior"
        End Select
    End Sub
    Mais je me rends compte que ce code n'est adapté que pour des inscriptions jusqu'en décembre de cette année : en effet, en janvier le calcul donnerait un résultat faux ; c'est tout le problème des catégories qui marchent en année civile mais qui sont valables en année scolaire !
    De plus, pour les adhérents qui se réinscriraient l'année prochaine, la catégorie n'est pas mise à jour avec ce code.

    J'aimerais donc améliorer les choses de telle façon :
    - que la catégorie soit calculée du 1er juillet de l'année n jusqu'à juin de l'année n+1
    - quel la catégorie soit mise à jour à partir de juin de l'année n+1 sur la prochaine saison.
    J'avoue que je sèche un peu sur le code à écrire.

    Si vous pouviez m'aider, ce serait sympa.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Bonjour,

    Peut-être en utilisant la fonction ci-jointe dans le FAQ pour le calcul d'âge par rapport à une date donnée?

    Bonne continuation à toi.

  3. #3
    Membre éprouvé

    Homme Profil pro
    Technicien
    Inscrit en
    Août 2013
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2013
    Messages : 440
    Points : 1 192
    Points
    1 192
    Par défaut
    Citation Envoyé par madefemere Voir le message
    Bonjour,

    Peut-être en utilisant la fonction ci-jointe dans le FAQ pour le calcul d'âge par rapport à une date donnée?

    Bonne continuation à toi.
    Bonjour

    Ce n'est pas le calcul de l'âge qui me pose problème car en fait c'est uniquement l'année de naissance qui compte.
    J'ai amélioré mon code en récupérant le mois en cours ce qui me permet de garder la bonne catégorie même si je fais la saisie de janvierà juin.


    En fait, c'est plus le 2eme volet de la question qui me pose le plus de question : à la fin de la saison prochaine, je souhaiterais utiliser la base de cette année pour faire la suivante ; la plupart des données resteront les mêmes notamment la date de naissance sauf que comme l'année en cours n'est plus la même, la catégorie des adhérents peut changer or il me semble que Access ne change pas "de lui même" la valeur d'un champ et donc quand j'ouvrirais la base au mois de juillet prochain, il ne mettra pas à jour le champ catégorie.
    Ma question est donc : comment mettre à jour un champ automatiquement (à partir d'une date ici) ?

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Re-,
    J'ai bien compris l'idée du changement de catégorie par rapport à l'année scolaire.
    En fait, comme les catégories vont changer au fil du temps, je pense qu'il ne faut pas figer le champ catégorie dans la table.
    La fonction Calculage du FAQ permet de calculer l'âge entre une date et une DATE DE REFERENCE (Ici, on utiliserait la fonction SérieDate(Date();6;30) - le 30/06/20XX).

    Pour illustration, une très petite base (tout se passe dans la Requête1), avec les différentes façons de définir les catégories. Et les 2 fonctions.

    J'espère que ça t'ira.

  5. #5
    Membre éprouvé

    Homme Profil pro
    Technicien
    Inscrit en
    Août 2013
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2013
    Messages : 440
    Points : 1 192
    Points
    1 192
    Par défaut
    Re

    En fait, avec la requête, tu ne détermines la catégorie que lorsqu'on en a besoin ?
    A quoi sert le champ catégorie de la table T_membre ? Car elle ne prend aucune valeur.
    Avec les différents calcul, seul celui qui part de ma source donne des résultats corrects.

    Je crois que je vais donc garder une requête que j'utiliserais lorsque j'aurais besoin de connaître la catégorie.

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Re-,

    Pour les 2 premières questions :
    - On transfère le champ Catégorie (j'ai mis CategX) de la table vers la requête (elle est restée dans la table par erreur).
    - Quand tu dois utiliser la valeur du champ Catégorie pour tes adhérents (source de tri ou de filtre) dans tes formulaires ou états ou autres requêtes, tu utilises la requête au lieu de la table (Elle sera à jour automatiquement si la date de référence est bien choisie).

    Pour l'utilisation de la fonction avec date de référence dans la requête, essaies par exemple avec la date du jour (18/08/2013 ou 19/08/2013 si tu le fais lundi) comme date de référence.

    La fonction utilisée dans Categ1 : TxtCat2([DatedeNaissance];#18/08/2013#)
    Fais maintenant des essais sur des adhérents avec des dates de naissance du 17 août et 19 août, normalement tu verras qu'ils seront dans 2 catégories différentes (attention avec les catégories sur 2 ans).

    Ma proposition est d'utiliser en définitive la version
    Categ3: TxtCat2([DatedeNaissance];SérieDate(Année(Date());6;30)) qui va utiliser la date du 30 juin de l'année en cours comme date de référence.

    Bonne continuation.

  7. #7
    Membre éprouvé

    Homme Profil pro
    Technicien
    Inscrit en
    Août 2013
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2013
    Messages : 440
    Points : 1 192
    Points
    1 192
    Par défaut
    Très bien, tout fonctionne !!
    Merci de ton aide.

    Bonne continuation

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

Discussions similaires

  1. [AC-2000] Mise à jour automatique des champs d'une table
    Par Seric31 dans le forum Modélisation
    Réponses: 1
    Dernier message: 29/07/2010, 17h42
  2. Réponses: 1
    Dernier message: 10/02/2010, 13h38
  3. Calcul champ selon une date
    Par fouz12 dans le forum PL/SQL
    Réponses: 1
    Dernier message: 30/10/2008, 12h02
  4. Réponses: 2
    Dernier message: 13/05/2008, 16h57
  5. Comment mettre à jour 1 champ d'une table via une autre tabl
    Par cpasmoibiensur dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/02/2006, 13h33

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