Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/06/2011, 12h46   #1
Membre régulier
 
Inscription : janvier 2011
Messages : 311
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 311
Points : 77
Points : 77
Par défaut ComboBox intervalles de dates

Bonjour à tous,

Je souhaite calculer automatiquement une date de début et de fin par rapport à un combobox qui contiendrait une liste de type :

- Année en cours -1
- Année en cours -2
- Année en cours -3
- Ce trimestre ci
- Ce trimestre -1
- Ce trimestre -2
- Ce trimestre -3
- Ce mois-ci
- Etc ...

Je voudrais écrire une fonction qui remplirait les champs "Date de début" et "Date de fin" automatiquement par rapport à la liste et actualiserait une liste de données basée sur une requête.

Je sais à peu près quoi faire, toute ma structure et requête marchent, il ne me manque plus que le calcul des dates dans les 2 champs date après maj du combo.

Je suppose qu'il faut utiliser datediff en négatif pour soustraire entre deux dates, mais comment faire pour calculer par exemple une date de début du genre "Année en cours" ou "Trimestre en cours" ou "Trimestre en cours -1".

Il faut qu'après maj du combo les 2 champs dates se remplissent correctement du genre :

"Année en cours" >>> Date debut = 1/1/2011, Date fin = 31/12/2011

Enfin, je pense que vous comprenez le but ...

Merci d'avance
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 14h38   #2
Membre Expert
 
Homme Frédéric
Développeur informatique
Inscription : juin 2009
Messages : 944
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France, Vosges (Lorraine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2009
Messages : 944
Points : 1 249
Points : 1 249
Bonjour

Penches toi sur des fonctions comme:
-DateSerial(y,m,d) qui permet de reconstituer une date en partant de année,mois,jour
-DateAdd("interval",nombre,dateDepart) qui permet d'additioner ou soustraire un nombre de jour, mois ou année.
- bien évidemment la fonction Date() qui renvoie la date du jour.
- sans oublier Day(),Month(),Year()

Bon courage
__________________
Frédéric
Développeur d'Applications Access
fgiambelluco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 18h01   #3
Membre régulier
 
Inscription : janvier 2011
Messages : 311
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 311
Points : 77
Points : 77
C'est gentil de répondre, mais je connaissais déjà ces fonctions ...
J'aurai surtout besoin d'aide concernant la mise en place / logique à adopter ...

Ce que je veux c'est qu'une date de début et de fin soit injectée dans les champs [date début], [date fin], or je ne vois pas comment utiliser ces fonctions dans ce cas là ...

Prenons par exemple "Année en cours -1" qui devra injecter automatiquement > 1/1/2010 dans le premier champ et 31/12/2010 dans le deuxième...
Il faut donc que l'intervalle correct donne le premier jour de l'année antérieure ainsi que le dernier , par rapport à l'année en cours déclarée en variable year(now()), je suppose...

Comment extraire ces dates ?

J'ai essayé :

Code :
DateSerial(Year(now()), Month(now()) + 1, 0)
mais ça ne marche pas ...
Je pense que ça doit pas être très compliqué mais je ne vois pas pour l'instant comment faire...

Merci
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2011, 12h42   #4
Membre Expert
 
Homme Frédéric
Développeur informatique
Inscription : juin 2009
Messages : 944
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France, Vosges (Lorraine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2009
Messages : 944
Points : 1 249
Points : 1 249
Bonjour
On va prendre ton exemple
Citation:
Prenons par exemple "Année en cours -1" qui devra injecter automatiquement > 1/1/2010 dans le premier champ et 31/12/2010 dans le deuxième...
Soit txtDateDeb et txtDateFin les 2 zones de texte contenant les dates de début et de fin.
Code :
1
2
Me.txtDateDeb = DateSerial(Year(Now()) - 1, 1, 1)
Me.txtDateFin = DateSerial(Year(Now()), 1, 1) - 1
Voilà une première approche
__________________
Frédéric
Développeur d'Applications Access
fgiambelluco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2011, 17h49   #5
Membre régulier
 
Inscription : janvier 2011
Messages : 311
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 311
Points : 77
Points : 77
C'est plus qu'une approche cette fois-ci, c'est LA solution !

Mais avant de clore le sujet, pourrait-on expliquer aux non initiés le pourquoi de cette syntaxe "rocambolesque " (entre autre l' espace laissé vide devant la première virgule de la deuxième formule et la parenthèse fermée avant le "- 1" ?).

Bref, expliquer un peu la logique à adopter ...

Merci mille fois
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2011, 18h14   #6
Membre du Club
 
Homme
Chef d'entreprise
Inscription : mai 2011
Messages : 57
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef d'entreprise
Secteur : Arts - Culture

Informations forums :
Inscription : mai 2011
Messages : 57
Points : 61
Points : 61
Bonjour,

Il n'y a pas d'espace vide devant la première virgule de la deuxième formule mais l'expression "Year(now())", autrement dit, l'année de la date du jour (soit 2011). C'est d'ailleurs ainsi que l'on obtient l'année précédente dans la première formule en retirant 1 à l'année actuelle (Year(now()) -1).

Pour finir sur la seconde formule, il faut visualiser le fait que les dates sont stockées sous forme de Réel double où la partie entière représente un nombre de jours et la partie décimale un nombre de secondes. La seconde formule revient donc à fixer la date au premier janvier de l'année en cours (DateSerial(Year(Now()), 1, 1)), puis de retrancher 1, soit 1 jour afin d'arriver au 31 décembre de l'année précédente.
Francesco34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 00h46   #7
Membre régulier
 
Inscription : janvier 2011
Messages : 311
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 311
Points : 77
Points : 77
J'ai enfin saisi ! C'est génial !

Merci
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h30.


 
 
 
 
Partenaires

Hébergement Web