OVH Cloud OVH Cloud

Créer enregistrements au 1er janvier de chaque année...

16 réponses
Avatar
Isabelle ex Isa :-)
Bonjour


Qui pourrait m'aider ?

Soit une table LOCATIONS et une table Table1
dans la table locations j'ai un champ DU et un champ AU (date de d=E9but
et fin de contrat)
dans la Table1, un champ date de r=E9vision =E9tant la date anniversaire
du champ DU

Gr=E2ce =E0 Thierry(encore merci), j'ai ajout=E9 ce code qui permet de cr=E9=
er
automatiquement les enregistrements :

Dim rs As Recordset, i As Integer
Set rs =3D CurrentDb.OpenRecordset("LOCATIONS")
rs.MoveLast
rs.MoveFirst
While Not rs.EOF
For i =3D 1 To DateDiff("yyyy", rs!DU, rs!AU) - 1
If DCount("*", "Table1", "idbail=3D" & rs!Num=E9ro & " AND
DateRevision=3D#" & Format(DateAdd("yyyy", i, rs!DU), "mm/dd/yyyy") &
"#") =3D 0 Then
DoCmd.RunSQL "INSERT INTO Table1(Idbail,DateRevision) VALUES('" &
rs!Num=E9ro & "','" & DateAdd("yyyy", i, rs!DU) & "')"
Else
Debug.Print "Enregistrement d=E9j=E0 ajout=E9"
End If
Next
rs.MoveNext
Wend
rs.Close

et cela fonctionne nickel

mais, il y a un mais, pour quelques cas la date de r=E9vision n'est pas
la date anniversaire mais par exemple
pour un contrat du 01/04/2007 au 31/03/2016 la date de r=E9vision est au
01 janvier de chaque ann=E9e
J'ai cr=E9e un champ DateRevision dans la table LOCATIONS o=F9 j'ai
indiqu=E9 01/01/2008 (champ que j'utilise dans des requ=EAtes avec comme
crit=E8re est null pour le suivi des autres r=E9visions "normales") mais
comment faire pour cr=E9er des enregistrements dans Table1 avec pour cet
exemple :
01/01/2008
01/01/2009
01/01/2010
01/01/2011
01/01/2012
01/01/2013
01/01/2014
01/01/2015
01/01/2016
01/01/2017

Et pour compliqu=E9 encore les choses, pour ces cas particuliers, la
date de r=E9vision n'est pas forc=E9ment au 1er janvier mais peut-=EAtre
aussi au 15 octobre de chaque ann=E9e par exemple

Merci d'avance

Isabelle ex Isa :-)

6 réponses

1 2
Avatar
Thierry (ze Titi)
Je me permets d'ajouter
j'ai un champ nommé DATE_REVISION dans la table LOCATIONS
et un champ nommé DateRevision dans la table Table1
Tu fais bien de préciser, je n'avais pas fait gaffe... Re-correction:



Dim rs As Recordset, i As Integer, uDateRevision As Date
Set rs = CurrentDb.OpenRecordset("LOCATIONS")
rs.MoveLast
rs.MoveFirst
While Not rs.EOF
uDateRevision = IIf(IsNull(rs!DATE_REVISION), rs!DU, rs!DATE_REVISION)
For i = 1 To DateDiff("yyyy", uDateRevision, rs!AU) - 1
If DCount("*", "Table1", "idbail=" & rs!Numéro & " AND DATE_REVISION=#" & Format(DateAdd("yyyy", i,uDateRevision),"mm/dd/yyyy") & "#") = 0 Then
DoCmd.RunSQL "INSERT INTO Table1(Idbail,DateRevision) VALUES('" & rs!Numéro & "','" & DateAdd("yyyy", i, uDateRevision) & "')"
Else
Debug.Print "Enregistrement déjà ajouté"
End If
Next
rs.MoveNext
Wend
rs.Close
DoCmd.Close


comme le code ne fonctionnait pas j'ai modifié le nom des champs mais
comme je n'arrive pas à tout comprendre j'ai dû modifier ce que ne
fallait pas

Quelle galère, y'a pu rien qui marche :-(

Isabelle ex Isa :-)


--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info

Avatar
Isabelle ex Isa :-)
C'est encore moi

merci pour les explications

bon alors c'est mieux mais
lorsque je clique sur le bouton, il fait comme il faut pour les
révisions à la date anniversaire (datedebut +1)
par contre lorsqu'il y a une date de révision différente la création
se fait également mais avec un an de décalage
exemple contrat du 01/05/2000 au 30/04/2005 date révision prévue
01/12/2001
les enregistrements crées sont
01/12/2002
01/12/2003
etc

par contre si je saisis un nouveau bail et je clique donc sur le
bouton il recrée à nouveau tous les enregistrements déjà saisis donc
tout en double

voilà, on y est presque

Isabelle ex Isa :-)
Avatar
Fabien
C'est encore moi

merci pour les explications

bon alors c'est mieux mais
lorsque je clique sur le bouton, il fait comme il faut pour les
révisions à la date anniversaire (datedebut +1)
par contre lorsqu'il y a une date de révision différente la création
se fait également mais avec un an de décalage
exemple contrat du 01/05/2000 au 30/04/2005 date révision prévue
01/12/2001
les enregistrements crées sont
01/12/2002
01/12/2003
etc

par contre si je saisis un nouveau bail et je clique donc sur le
bouton il recrée à nouveau tous les enregistrements déjà saisis donc
tout en double

voilà, on y est presque

Isabelle ex Isa :-)



Pour regler la premiére difficulté :

uDateRevision = IIf(IsNull(rs!DATE_REVISION), rs!DU,
dateadd("yyyy",-1,rs!DATE_REVISION))

Avatar
Isabelle ex Isa :-)
Bonsoir

vais-je y arriver ?


il recrée les enregistrements déjà crées => pas bon
de plus j'ai une boîte de dialogue ajout d'une ligne, je clique sur ok
et hop idem pour chaque enregistrement crée => pas bon

que manque-t-il ?

voilà mon code entier :

Private Sub Commande101_Click()

DoCmd.RunCommand acCmdSaveRecord


Dim rs As Recordset, i As Integer, uDateRevision As Date
Set rs = CurrentDb.OpenRecordset("LOCATIONS")
rs.MoveLast
rs.MoveFirst
While Not rs.EOF
uDateRevision = IIf(IsNull(rs!DATE_REVISION), rs!DU, DateAdd("yyyy",
-1, rs!DATE_REVISION))
For i = 1 To DateDiff("yyyy", uDateRevision, rs!AU) - 1
If DCount("*", "Table1", "idbail=" & rs!Numéro & " AND
DATE_REVISION=#" & Format(DateAdd("yyyy", i, uDateRevision), "mm/dd/
yyyy") & "#") = 0 Then
DoCmd.RunSQL "INSERT INTO Table1(Idbail,DateRevision) VALUES('"
& rs!Numéro & "','" & DateAdd("yyyy", i, uDateRevision) & "')"
Else
Debug.Print "Enregistrement déjà ajouté"
End If
Next
rs.MoveNext
Wend
rs.Close

End Sub


Je ne vois ce qu'il y a de différent par rapport à avant lorsque cela
fonctionnait nickel : pas de boîte de dialogue pour confirmer l'ajout
et pas de création d'enregistrement si enregistrement déjà crée

Comprends pas, comprends plus

Merci d'avance


Isabelle ex Isa :-)
Avatar
Isabelle ex Isa ;-)

Pour regler la premiére difficulté :
uDateRevision = IIf(IsNull(rs!DATE_REVISION), rs!DU,
dateadd("yyyy",-1,rs!DATE_REVISION))


ok c'est bon

il ne reste plus que l'ajout à tort de nouveaux enregistrements

normalement il devrait comparer
le champ idbail de la table Table1
avec
le champ Numéro de la table Locations
et si le champ idbail avec le champ DateRevision existe déjà ne pas le
créer à nouveau

c'est fou ce que l'on peut passer comme temps parfois

Allez bonne nuit

Isabelle ex Isa ;-)

Avatar
Isabelle ex Isa :-)
Merci à tous
1 2