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
- Commencez par prévoir une sauvegarde de votre base : si votre formule de mise à jour est incorrecte, vous n’aurez pas tout perdu !
- Créez une nouvelle requête dans Access, requête basée sur la table à traiter.
- Transformez cette requête en requête « Mise à jour », grâce à l’icône du même nom.
- Placez le ou les champ(s) dates sur la grille de requête. Dans mon cas, le champ
Date Arrivée
. - Sous chaque champ concernée, définissez une formule de mise à jour comme ceci :
AjDate("aaaa"; 1; [Date Arrivée])
- Exécutez la requête grâce à l’icône Exécuter (le point d’exclamation rouge).
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 fonctionAjDate()
devientDateAdd()
. Ce qui donne :
1 2 3 4 5 6 |
Sub ModifierDates() Dim strSQL As String strSQL = "UPDATE [tbl Inscriptions] SET [Date Arrivée] = DateAdd("yyyy",1,[Date Arrivée]);" CurrentDb.Execute strSQL End Sub |
WHERE
en SQL) pour sélectionner certains enregistrements uniquement.
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.
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