Créer enregistrements au 1er janvier de chaque année...
16 réponses
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
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
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
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
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 :-)
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
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 :-)
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
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
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
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 :-)
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
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 :-)
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 ;-)
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
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