Ajouter une année à une date

Comment ajouter une année à toutes les dates d’une table ? Une année, ou une période quelconque bien sûr.

Principe

Pour faire un peu plus clair : je dispose d’une table quelconque (dans mon cas : tbl Inscriptions), qui contient un champ de type Date/Heure (le champ : Date Arrivée).

Pour une raison quelconque, on souhaite augmenter d’une année toutes les lignes de cette table. En gros, toutes les dates d’arrivée doivent être augmentée de 1 an.

Solution par requête graphique

  1. Commencez par prévoir une sauvegarde de votre base : si votre formule de mise à jour est incorrecte, vous n’aurez pas tout perdu !
  2. Créez une nouvelle requête dans Access, requête basée sur la table à traiter.
  3. Transformez cette requête en requête « Mise à jour », grâce à l’icône du même nom.
  4. Placez le ou les champ(s) dates sur la grille de requête. Dans mon cas, le champ Date Arrivée.
  5. Sous chaque champ concernée, définissez une formule de mise à jour comme ceci :
    AjDate("aaaa"; 1; [Date Arrivée])
    ajouter_annee.png
  6. Exécutez la requête grâce à l’icône Exécuter (le point d’exclamation rouge).
Info
Consultez la documentation de la fonction AjDate() pour plus de détails. Ici, le format « aaaa » désigne l’année ; on ajoute donc 1 année. Mais on peut aussi travailler sur les jours, les mois, etc. D’autre part, le nombre peut être négatif (-3 équivaut à retrancher 3 unités, par exemple).

Solution VBA / SQL

Cette mise à jour peut être automatisée en VBA :

  • soit en exécutant la requête précédente, si vous l’avez enregistrée ;
  • soit en exécutant la requête en SQL, directement. Il faut dans ce cas penser à transformer le format à l’anglo-saxonne : « aaaa » devient « yyyy« , les points-virgules deviennent des virgules, et la fonction AjDate() devient DateAdd(). Ce qui donne :

Attention
Dans les 2 exemples (graphique et VBA), toutes les lignes de la table sont affectées. Vous pouvez ajouter un filtre (« Critères » en mode graphique, ou condition WHERE en SQL) pour sélectionner certains enregistrements uniquement.

Vous aimerez aussi...

2 réponses

  1. Hervé Inisan dit :

    david > Les guillemets sont curieux. En principe, ils ne doivent délimiter que des chaînes de texte, mais pas des « objets » au sens Access. Ce critère devrait coller :

    Forms pourrait être remplacé par [Formulaires] après validation, c’est la même chose.

    Maintenant, il y effectivement le cas où les critères sont vides, c’est un autre point à valider. Cet article peut peut-être aider.

  2. david dit :

    Bonjour,
    Je souhaiterais vous soumettre un problème que je n’ai pas réussi à résoudre.
    J’ai un formulaire (indépendant) de recherche avec des champs indépendants qui servent de critères à la requête destinée à trier les enregistrements. Seulement, pour le champs (Date d’inscription) je souhaiterais créer un filtre en Between pour filtrer les inscriptions entre deux dates. J’ai donc mis le critère suivant : Entre « [Formulaires]![nom du formulaire]![champs 1] » Et « [Formulaires]![nom du formulaire]![champs 2]) »

    et tout ceci avec une actualisation sur afterUpdate.
    Résultat : syntaxe incorrecte ou trop complexe.
    J’ai ensuite essayé la formule suivante :Entre « VraiFaux([Formulaires]![nom du formulaire]![champs 1]= » »;Date();[Formulaires]![nom du formulaire]![champs 1]) » Et « VraiFaux([Formulaires]![nom du formulaire]![champs 2]= » »;Date();[Formulaires]![nom du formulaire]![champs 2]).

    Par cette seconde formule je comptais éviter le champs vide à l’ouverture qui aurait pu être la source de l’erreur. Mais le problème persiste.

    je suis sur windows 7 pro avec Access 2010.
    Je visite souvent votre site mais je n’ai rien trouvé.
    Si vous avez une idée, ce serait sympa de m’éclairer.

    cordialement
    david

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *