Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Calcul sur dates

6 réponses
Avatar
access13090
Bonsoir à tou(te)s,

Dans une table CONTRAT, j'ai un champ CONTRAT_DATE (Date) et un champ
CONTRAT_DUREE (numérique : entier).

Je voudrais savoir s'il existe une solution permettant de lister via
une requête, un formulaire ou un état tous les contrats 10 jours avant
chacune de leur date d'anniversaire jusqu'à chacune de leur date
d'anniversaire et durant la durée x ?

Merci d'avance

6 réponses

Avatar
Fabien
access13090 wrote:
Bonsoir à tou(te)s,

Dans une table CONTRAT, j'ai un champ CONTRAT_DATE (Date) et un champ
CONTRAT_DUREE (numérique : entier).

Je voudrais savoir s'il existe une solution permettant de lister via une
requête, un formulaire ou un état tous les contrats 10 jours avant
chacune de leur date d'anniversaire jusqu'à chacune de leur date
d'anniversaire et durant la durée x ?

Merci d'avance




Salut,
Pour ce qui est des calculs sur date utilises dateadd("d",nbrjours,Ladate)
ou
Dateadd("m",nbrmois,ladate)
ect..
@+
Avatar
access13090
Le 08/07/2008, Fabien a supposé :
access13090 wrote:
Bonsoir à tou(te)s,

Dans une table CONTRAT, j'ai un champ CONTRAT_DATE (Date) et un champ
CONTRAT_DUREE (numérique : entier).

Je voudrais savoir s'il existe une solution permettant de lister via une
requête, un formulaire ou un état tous les contrats 10 jours avant
chacune de leur date d'anniversaire jusqu'à chacune de leur date
d'anniversaire et durant la durée x ?

Merci d'avance




Salut,
Pour ce qui est des calculs sur date utilises dateadd("d",nbrjours,Ladate)
ou
Dateadd("m",nbrmois,ladate)
ect..
@+



Bonjour Fabien,

Merci pour la formule.

Mais comment faire, si cela est possible bien entendu, pour que
l'action se répète durant une durée déterminée ?

MaDate : jj/mm/aaaa
MaDurée : 3 ans

dateadd("d",10,serialdate(year(MaDate)+1,Month(MaDate),Day(MaDate))
dateadd("d",10,serialdate(year(MaDate)+2,Month(MaDate),Day(MaDate))
dateadd("d",10,serialdate(year(MaDate)+3,Month(MaDate),Day(MaDate))

Au lieu d'avoir 3 lignes de formule dans cet exemple, en avoir qu'une
seule, et que la variable +1, +2, +3 soit calculée automatiquement avec
une structure répétitive Tant que ... Fin tant que ?

Merci d'avance.
Avatar
Fabien
access13090 wrote:
Le 08/07/2008, Fabien a supposé :
access13090 wrote:
Bonsoir à tou(te)s,

Dans une table CONTRAT, j'ai un champ CONTRAT_DATE (Date) et un champ
CONTRAT_DUREE (numérique : entier).

Je voudrais savoir s'il existe une solution permettant de lister via une
requête, un formulaire ou un état tous les contrats 10 jours avant
chacune de leur date d'anniversaire jusqu'à chacune de leur date
d'anniversaire et durant la durée x ?

Merci d'avance




Salut,
Pour ce qui est des calculs sur date utilises
dateadd("d",nbrjours,Ladate)
ou
Dateadd("m",nbrmois,ladate)
ect..
@+



Bonjour Fabien,

Merci pour la formule.

Mais comment faire, si cela est possible bien entendu, pour que l'action
se répète durant une durée déterminée ?

MaDate : jj/mm/aaaa
MaDurée : 3 ans

dateadd("d",10,serialdate(year(MaDate)+1,Month(MaDate),Day(MaDate))
dateadd("d",10,serialdate(year(MaDate)+2,Month(MaDate),Day(MaDate))
dateadd("d",10,serialdate(year(MaDate)+3,Month(MaDate),Day(MaDate))

Au lieu d'avoir 3 lignes de formule dans cet exemple, en avoir qu'une
seule, et que la variable +1, +2, +3 soit calculée automatiquement avec
une structure répétitive Tant que ... Fin tant que ?

Merci d'avance.




Salut
Peut-être qu'avec
Dim StrSql as String
Dim I as Integer
For i=1 to Madurée
StrSQl=strsql & "Select * from Contrat where Contrat_Date=#" &
format(dateadd("d",10,serialdate(year(MaDate)+i,Month(MaDate),Day(MaDate)),"yyyymmdd")
& "# Union "
Next I
StrSql=left(StrSQl,len(Strsql)-7) & ";" 'Pour enleve le denier " union "
et le remplacer par un ;
aprés soit ce sql est source du formulaire et tu peux faire
me.recordsource=strsql
me.refresh
Soit c'est une requte qui existe est qui est source d'un état ou d'un
autre formulaire alors currentdb.querydefs("lenomdelarequete").sql=StrSql
Soit tu peu demander l'execution de cette requete
Docmd.OpenQuery StrSQl
A toi de voir selon le contexte.
@+
Avatar
access13090
Bonjour Fabien,

Je suis un peu perdu.
J'ai donc recréé un formulaire ayant pour source la table PCE.Cette
table PCE contient entre autre
- le champ PCE_DATE (de type Date/heure au format jj/mm/aaaa)
- le champ PCE_DUREE (de type Numérique au format entier long)

La procédure peut être enclenchée à l'ouverture du formulaire ou par
clic sur un bouton de commande.

J'ai repris ta procédure et l'ai modifié comme ci-dessous. Mais j'ai ne
erreur d'exécution 3075 http://cjoint.com/?hnhumaWLPK

Dim StrSql As String
Dim i As Integer
For i = 1 To [PCE_DUREE]
StrSql = StrSql & "Select * From PCE "
StrSql = StrSql & "Where Now() Between"
StrSql = StrSql & DateAdd("d", -10, DateSerial(Year([PCE_DATE]) + i,
Month([PCE_DATE]), Day([PCE_DATE]))) & " And "
StrSql = StrSql & DateAdd("d", 1, DateSerial(Year([PCE_DATE]) + i,
Month([PCE_DATEE]), Day([PCE_DATE]))
Next i
Dim rq As DAO.QueryDef
Set rq = CurrentDb.CreateQueryDef("tmpQuery", strSQL)
DoCmd.OpenQuery "tmpQuery"
CurrentDb.QueryDefs.Delete "tmpQuery"
Set rq = Nothing
End Sub

Le but de cette procédure étant de vérifier les pièces qui sont en
cours de validité selon PCE_DATE et PCE_DUREE en fonction de l'horloge
système.
Exemple :
PCE_DATE = 15/01/2008
PCE_DUREE = 2
Ma requête TmpQuery devrait m'afficher toutes les pièces lorsque ma
date système se situe entre 05/01/2009 et le 16/01/2009 puis entre le
05/01/2010 et le 16/01/2010

Cordialement.

Bonjour Fabien,

Merci pour la formule.

Mais comment faire, si cela est possible bien entendu, pour que l'action
se répète durant une durée déterminée ?

MaDate : jj/mm/aaaa
MaDurée : 3 ans

dateadd("d",10,serialdate(year(MaDate)+1,Month(MaDate),Day(MaDate))
dateadd("d",10,serialdate(year(MaDate)+2,Month(MaDate),Day(MaDate))
dateadd("d",10,serialdate(year(MaDate)+3,Month(MaDate),Day(MaDate))

Au lieu d'avoir 3 lignes de formule dans cet exemple, en avoir qu'une
seule, et que la variable +1, +2, +3 soit calculée automatiquement avec
une structure répétitive Tant que ... Fin tant que ?

Merci d'avance.




Salut
Peut-être qu'avec
Dim StrSql as String
Dim I as Integer
For i=1 to Madurée
StrSQl=strsql & "Select * from Contrat where Contrat_Date=#" &
format(dateadd("d",10,serialdate(year(MaDate)+i,Month(MaDate),Day(MaDate)),"yyyymmdd")
& "# Union "
Next I
StrSql=left(StrSQl,len(Strsql)-7) & ";" 'Pour enleve le denier " union " et
le remplacer par un ;
aprés soit ce sql est source du formulaire et tu peux faire
me.recordsource=strsql
me.refresh
Soit c'est une requte qui existe est qui est source d'un état ou d'un autre
formulaire alors currentdb.querydefs("lenomdelarequete").sql=StrSql
Soit tu peu demander l'execution de cette requete
Docmd.OpenQuery StrSQl
A toi de voir selon le contexte.
@+


Avatar
Fabien
access13090 a écrit :
Bonjour Fabien,

Je suis un peu perdu.
J'ai donc recréé un formulaire ayant pour source la table PCE.Cette
table PCE contient entre autre
- le champ PCE_DATE (de type Date/heure au format jj/mm/aaaa)
- le champ PCE_DUREE (de type Numérique au format entier long)

La procédure peut être enclenchée à l'ouverture du formulaire ou par
clic sur un bouton de commande.

J'ai repris ta procédure et l'ai modifié comme ci-dessous. Mais j'ai ne
erreur d'exécution 3075 http://cjoint.com/?hnhumaWLPK

Dim StrSql As String
Dim i As Integer
For i = 1 To [PCE_DUREE]
StrSql = StrSql & "Select * From PCE "
StrSql = StrSql & "Where Now() Between"
StrSql = StrSql & DateAdd("d", -10, DateSerial(Year([PCE_DATE]) + i,
Month([PCE_DATE]), Day([PCE_DATE]))) & " And "
StrSql = StrSql & DateAdd("d", 1, DateSerial(Year([PCE_DATE]) + i,
Month([PCE_DATEE]), Day([PCE_DATE]))
Next i
Dim rq As DAO.QueryDef
Set rq = CurrentDb.CreateQueryDef("tmpQuery", strSQL)
DoCmd.OpenQuery "tmpQuery"
CurrentDb.QueryDefs.Delete "tmpQuery"
Set rq = Nothing
End Sub

Le but de cette procédure étant de vérifier les pièces qui sont en cours
de validité selon PCE_DATE et PCE_DUREE en fonction de l'horloge système.
Exemple :
PCE_DATE = 15/01/2008
PCE_DUREE = 2
Ma requête TmpQuery devrait m'afficher toutes les pièces lorsque ma date
système se situe entre 05/01/2009 et le 16/01/2009 puis entre le
05/01/2010 et le 16/01/2010

Cordialement.



Salut,
C'est logique cette erreur puisque tu contatène une suite de select.
Il faut passer par une 'union de select'
ensuite les dates sont toujours au format US et encardrées par # dans
les SQL
For i = 1 To [PCE_DUREE]
StrSql = StrSql & "SELECT * FROM PCE " & _
"WHERE now() Between #" & format(DateAdd("d", -10,
DateSerial(Year([PCE_DATE]) + i, Month([PCE_DATE]),
Day([PCE_DATE]))),"mmddyyyy") & "# And #" & _
format(DateAdd("d", 1,
DateSerial(Year([PCE_DATE]) + i, Month([PCE_DATEE]),
Day([PCE_DATE])),"mmddyyyy") & "# UNION "
> Next i
StrSQl=left(strsql,len(strsql)-6) & ";" ' pour enlever le dernier UNION
et le remplacer par un ;
.
.
.
@+
Avatar
access13090
Fabien a émis l'idée suivante :

Salut,
C'est logique cette erreur puisque tu contatène une suite de select.
Il faut passer par une 'union de select'
ensuite les dates sont toujours au format US et encardrées par # dans les SQL
For i = 1 To [PCE_DUREE]
StrSql = StrSql & "SELECT * FROM PCE " & _
"WHERE now() Between #" & format(DateAdd("d", -10,
DateSerial(Year([PCE_DATE]) + i, Month([PCE_DATE]),
Day([PCE_DATE]))),"mmddyyyy") & "# And #" & _
format(DateAdd("d", 1,
DateSerial(Year([PCE_DATE]) + i, Month([PCE_DATEE]),
Day([PCE_DATE])),"mmddyyyy") & "# UNION "
> Next i
StrSQl=left(strsql,len(strsql)-6) & ";" ' pour enlever le dernier UNION et
le remplacer par un ;
.
.
.
@+



Bonjour Fabien,
Merci pour ces explications.
@+