Tutoriel réalisé avec Access 2013
Tout comme sur Excel, sur Access, vous avez la possibilité de calculer le nombre de jours, mois ou années entre 2 dates, voire même entre 2 heures, grâce à la fonction Datediff ou DiffDate
Vous retrouverez la base de données utilisée dans ce tutoriel au bas de l’article.
SOMMAIRE
Création de la requête
Cette fonction s’utilisant dans une requête, voire un formulaire ou un état, nous allons créer une requête avec tous les champs présents dans la table Clients. Pour cela, ouvrez la base de données et cliquez sur Création de requête de l’onglet Créer. Affichez la table Clients et cliquez sur chacun des champs.
Dans la première colonne vide après le champ Date de démarrage, cochez la case Afficher et placez-vous sur la ligne Champ.
Nous allons démarrer la formule par le nom que nous souhaitons donner à la colonne. Nous allons l’appeler Client depuis :.
Explication de la syntaxe de la fonction DATEDIF ou DIFFDATE
La fonction DATEDIF ou DIFFDATE se décompose de cette manière :
DiffDate("unité";date1;date2)
Le premier argument vous permet de choisir l’unité dans laquelle renvoyer le calcul :
- J (jour) pour renvoyer le nombre de jours compris entre les deux dates ;
- M (mois) pour renvoyer le nombre de mois compris entre les deux dates ;
- AAAA (année) pour renvoyer le nombre d’années comprises entre les deux dates ;
- T (trimestre) pour renvoyer le nombre de trimestres compris entre les deux dates ;
- H (heure) pour renvoyer le nombre d’heures comprises entre les deux temps ou dates ;
- N (minutes) pour renvoyer le nombre de minutes comprises entre les deux temps ou dates ;
- S (seconde) pour renvoyer le nombre de secondes comprises entre les deux temps ou dates ;
Pour cet exemple, nous allons calculer le nombre de jours entre la date du champ Date de démarrage et aujourd’hui. L’expression complète est donc :
Clients depuis: DiffDate("j";[Date de démarrage];Maintenant())
Je clique maintenant sur Exécuter et Access a calculé automatiquement le nombre de jours entre chaque date de démarrage et la date du jour.
Je peux enregistrer cette requête et la rouvrir un autre jour, les intervalles seront recalculés automatiquement.
Pour modifier l’unité de l’intervalle en mois par exemple, je n’aurais qu’à modifier le J en M dans l’expression de la requête.
Pour indiquer une date fixe à la place de la date du jour, remplacez
Maintenant()
par
"05/02/2014"
par exemple.
Bonsoir
Merci pour la vidéo, mais j’ai un petit problème. Si je veux calculer la différence entre les deux dates, mais sur 30 jours, par exemple, sur Excel, on peut utiliser la fonction JOURS360(T9;U9).
Merci.
Bonjour,
Il faudrait peut-être essayer d’exporter la formule Excel vers Access.
Merci, je vais essayer.
Bonsoir,
J’ai besoin de votre aide dans Access 2007.
J’ai écrit cette fonction conditionnelle sous Excel et je veux le faire sur Access aussi avec vraifaux. Comment je fais ? Merci d’avance.
La fonction est :
=SI(Saisie!L9="";"";SI(AD9>120000;((AD9-120000)*0,35)+29500;SI(AD9>=30000;((AD9-30000)/10)*3+2500;SI(AD9>=28750;((AD9-28750)/10)*2+2250;SI(AD9>=22500;((AD9-22500)/10)*1,2+1500;SI(AD9>=15000;((AD9-15000)/10)*2))))))
NB : AD9 est la cellule.
Bonjour,
Je vous invite à faire une demande de devis.
Quelles sont les informations que je pourrais mettre dans VBA pour que la Diffdate se calcule uniquement sur une ligne dans mon formulaire ?
Je vous conseille plutôt d’utiliser la requête dans votre formulaire.
Bonjour, j’ai essayé d’utiliser l’expression suivante
Clients depuis: DiffDate(« j »;[Date de démarrage];Maintenant())
comme vous l’avez fait, mais, hélas, je reçois un message comme quoi la syntaxe n’est pas bonne, savez-vous d’où le problème pourrait venir ? Je suis pourtant sur Access 2007. Merci d’avance !Bonjour,
Ce doit être à cause des guillemets, saisissez-les manuellement.
Effectivement, c’était le problème, merci beaucoup. D’ailleurs, est-il possible de comparer deux champs date qui font partie d’une même table entre elles (et non pas deux dates d’un même champ) ? Par exemple, dans le cas d’une date de démarrage et d’une date relance. Merci encore.
En fait, j’ai réussi avec la fonction DiffDate, merci !
Simplement en remplaçant la date du jour de l’exemple avec l’autre champ cela a dû fonctionner. Merci pour votre message dans le livre d’or.
Bonjour,
Comment aller plus loin avec cette formule sous Access pour afficher sous la forme ci-dessous :
xx an(s) xx mois xx jour(s) ?
Merci pour l’aide.
Cordialement.
Alain
Bonjour Alain,
Je vous invite à consulter ce sujet : http://www.developpez.net/forums/d1162557/logiciels/microsoft-office/access/requetes-sql/diffdate-calculer-l-age-mois-jours/
Bonjour Lydia,
Merci pour cette réponse.
Je vais étudier cette réponse, car après une rapide consultation, ce n’est pas gagné….
Cordialement.
Bonjour,
Super site.
Je me demandais s’il était possible d’afficher une variable dans la saisie de la deuxième date.
Ce que je cherche à faire est « si le deuxième champ est vide, prendre la date d’aujourd’hui ».
Merci d’avance.
Bonjour Éric,
Voici le champ à remplacer :
Clients depuis: VraiFaux([Date de fin]>Date();DiffDate("j";[Date de démarrage];[Date de fin]);DiffDate("j";[Date de démarrage];Date()))
Bonjour Lydia,
J’ai trouvé la réponse samedi après-midi en bidouillant un petit peu.
Mais je vous remercie énormément d’avoir pris le temps de me répondre.
J’aime beaucoup vos tutoriels, je les trouve clairs et pratiques.
Pourriez-vous en faire d’autres ?
Sur, par exemple, la commande DLookup, comment faire des listes déroulantes dépendantes d’une autre liste déroulante ou encore comment activer les champs d’un formulaire en fonction du choix d’une liste déroulante.
Car ce sont, entre autres choses, des choses que je n’ai pas encore bien saisies.
Merci beaucoup.
Merci Éric.
Je n’ai pas arrêté la publication, mais l’ai mise en stand-by, car entre les commandes de mes clients (ce qui m’a permis récemment de connaître la fonction DLookup) et les créations d’applications et tutoriels payants, cela ne me laisse pas beaucoup de temps pour développer un sujet de tutoriel complet.
Lydia, ça va, je suis en train de créer une base de données Access 2007 et je n’arrive pas à calculer entre deux dates (année + mois + jours), merci pour l’aide.
Que souhaitez-vous faire exactement ?
Merci de me répondre, je m’appelle Abdelati, je cherche la syntaxe pour calculer entre deux dates sur Access 2007 (année;mois;jours). J’ai créé une base de données sur Access 2007 et je veux savoir l’âge du fonctionnaire et l’ancienneté du service exactement. Merci.
C’est exactement le sujet du tutoriel, qu’est-ce qui ne fonctionne pas ?
Salut Lydia, la syntaxe donnée n’affiche que le nombre d’années seulement et, moi, je cherche l’année, le mois et le jour.
Cela ne pourra pas être fait directement dans la requête, mais en VBA.
Bonjour,
Très clair !! Merci.
Par contre, si j’ai bien compris, la mise à jour n’est pas automatique ? Il faut lancer la requête régulièrement ?
Bonjour Marianne,
À chaque lancement de la requête, les données seront à jour, mais si, par exemple, vous créez une zone de liste et que vous mettez comme contenu cette requête, à chaque lancement du formulaire contenant cette zone de liste, cette dernière affichera le résultat à jour.
Comment peut-on faire le calcul en jours, par exemple, sans les weekends, jours fériés et vacances ?
En VBA.
Merci pour votre réponse.
Je suis un débutant, je souhaite savoir où je pourrais renseigner mes champs dans ce code ?
Il faut d’abord mettre la fonction dans un module.
Oui, c’est ce que j’ai fait, mais il faut déclarer mes champs dans le code.
Pourriez-vous me dire où exactement ?
Pour info, j’ai :
Champ 1 : [date de détection]
Champ 2 : maintenant()
Merci.
Je n’ai pas testé, donc il faut essayer. Peut-être remplacer les BegDate et EndDate dans les DateValue.
Salut, j’ai envie de faire le calcul dans un champ de type caractère texte pour avoir la totalité d’entreprises, mais je ne sais comment le faire sous Access 2010.
Bonjour,
Pourquoi ne pas faire un regroupement avec Compte sur le champ des noms d’entreprise ?
Comment créer maintenant le groupement de compte dans une rubrique de type texte ?
Sur le même principe que le lien que je vous ai donné.
Madame, merci pour la vidéo, mais le problème ce que j’ai créé une base de données de gestion de cotisation, mais j’ai une rubrique au nom de « Nom de l’entreprise ». Maintenant, quand je veux faire l’aperçu avant de faire l’impression, j’obtiens déjà la liste des entreprises. Maintenant, le problème est que je veux que, une fois que j’ai la liste des entreprises en dessous de ça, que j’obtienne le nombre d’entreprises que j’ai, c’est cela mon problème, madame.
Il faut créer un contrôle dans l’état
=Compte(*)
.Merci madame, mais comment le créer ? Pourriez-vous m’envoyer le tutoriel pour que je le crée s’il te plaît, madame ?
Envoie-moi le tutoriel parce que je ne sais pas par où commencer pour créer le compte sur l’état.
Je n’ai pas de tutoriel à ce sujet. Dans la liste des contrôles de l’onglet Création, il faut choisir le contrôle Zone de texte et mettre le code dedans.
Salut, merci madame pour votre aide, c’est fait et ça a marché super bien. Merci beaucoup.
Merci infiniment pour la vidéo.
Mais j’ai une question, comment paramétrer pour que personne n’entre dans le code source ?
Bonjour Guillaume,
C’est le sujet d’une future formation.
Ok, ok, merci beaucoup, Madame.
Bonjour madame, je crée un formulaire de connexion, mais j’ai envie de mettre l’heure sur ce dernier et voir aussi comment ça marche, comment je peux le faire sous Access 2010 ? Merci.
Bonjour Guy,
Il y a un contrôle Date et heure disponible dans le ruban par défaut.
Oui, je connais ce contrôle, mais l’heure reste intacte, ça ne bouge pas si je me déplace sur le formulaire, là, ça marche, mais au cas où je suis toujours sur le formulaire, j’ai envie de voir les secondes tourner sous Access 2010.
Il faut mettre un
refresh
du contrôle de l’heure sur évènement du timer et mettre une durée sur la ligne Timer (onglet évènement).Bonsoir madame, je ne sais pas comment le faire, pourriez-vous me diriger ?
Bonjour,
http://www.commentcamarche.net/forum/affich-22052614-mise-a-jour-de-l-heure-dans-formulaire-access
Bonsoir, j’ai créé un formulaire qui est attaché avec ma table. À l’ouverture de ce formulaire, je vois les enregistrements que j’avais déjà effectués. Maintenant, j’ai envie de vider tous les champs après l’ouverture du formulaire, j’ai utilisé entrée de donnée sur Oui, mais ça m’empêche d’utiliser les recherches et les requêtes, comment faire ?
Bonjour,
Vous pouvez dupliquer votre formulaire avec l’un en entrée de données sans recherche et l’autre sans entrée de données, mais avec recherche.
Comment le faire madame ?
Il suffit de copier-coller le formulaire.
Merci madame, ça a marché.
Bonjour madame, j’ai envie de mettre un logo sur le formulaire de base de données Access 2010. La base de données concerne la gestion d’inscription, maintenant, l’école en question m’a donnée leur logo pour que je mette ça sur tous les formulaires. Comment faire ?
Merci.
Bonjour,
Dans l’onglet Création, il y a un bouton Ajouter une image.
Bonjour madame, quand vous créez un formulaire Access, il y a une image de formulaire Access qui apparaît au-dessus du formulaire Access, juste à gauche, une petite image de marque de formulaire. Maintenant, la question est : comment l’enlever et mettre ma propre image ?
Bonjour,
Quand c’est comme ça, il faut supprimer la disposition dans l’onglet Organiser.
Bonjour Madame, j’utilise l’Access 2010 et je fais l’ODBC avec Visual Studio 2010. Maintenant, il y a une table dont j’ai un champ de type date et heure et j’ai envie de mettre un champ de type date en Visual Studio, mais je ne sais comment faire. Pourriez-vous m’aider ?
Bonjour Guy,
Je n’utilise pas Visual Studio.
Merci Madame.
Bonjour Madame, j’aimerais savoir les 3 différents types de fichiers en Excel.
Bonjour,
Je ne vois pas de quoi vous parlez.
Bonjour Lydia pour la vidéo, ça marche bien, mais pour le calcul des nombres des heures avec quelle commande dans la requête ?
Bonjour Ali, c’est écrit dans le tutoriel.
Bonjour,
J’aimerais utiliser cette fonction, mais je voudrais qu’elle calcule uniquement le nombre de jours ouvrés.
Est-ce que c’est possible ?
Merci beaucoup !
Bonjour,
Il n’y a pas de fonction existante, il faut donc faire appel à une fonction personnalisée.