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

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 :-)

10 réponses

1 2
Avatar
Thierry (ze Titi)
Re-bonjour Isa !

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!DateRevision),rs!DU,rs!DateRevision)
For i = 1 To DateDiff("yyyy", rs!DU, rs!AU) - 1
If DCount("*", "Table1", "idbail=" & rs!Numéro & " AND DateRevision=#" & Format(DateAdd("yyyy", i, uDateRevision), "mm/dd/yyyy") & "#") = 0 Then
DoCmd.RunSQL "INSERT INTO Table1(Idbail,DateRevision) VALUES('" & rs!Numéro & "','" & DateAdd("yyyy", i, dateRevision) & "')"
Else
Debug.Print "Enregistrement déjà ajouté"
End If
Next
rs.MoveNext
Wend
rs.Close

A tester...

--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info
Avatar
Fabien
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ébut
et fin de contrat)
dans la Table1, un champ date de révision étant la date anniversaire
du champ DU

Grâce à Thierry(encore merci), j'ai ajouté ce code qui permet de créer
automatiquement les enregistrements :

Dim rs As Recordset, i As Integer
Set rs = CurrentDb.OpenRecordset("LOCATIONS")
rs.MoveLast
rs.MoveFirst
While Not rs.EOF
For i = 1 To DateDiff("yyyy", rs!DU, rs!AU) - 1
If DCount("*", "Table1", "idbail=" & rs!Numéro & " AND
DateRevision=#" & Format(DateAdd("yyyy", i, rs!DU), "mm/dd/yyyy") &
"#") = 0 Then
DoCmd.RunSQL "INSERT INTO Table1(Idbail,DateRevision) VALUES('" &
rs!Numéro & "','" & DateAdd("yyyy", i, rs!DU) & "')"
Else
Debug.Print "Enregistrement déjà ajouté"
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évision n'est pas
la date anniversaire mais par exemple
pour un contrat du 01/04/2007 au 31/03/2016 la date de révision est au
01 janvier de chaque année
J'ai crée un champ DateRevision dans la table LOCATIONS où j'ai
indiqué 01/01/2008 (champ que j'utilise dans des requêtes avec comme
critère est null pour le suivi des autres révisions "normales") mais
comment faire pour créer 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é encore les choses, pour ces cas particuliers, la
date de révision n'est pas forcément au 1er janvier mais peut-être
aussi au 15 octobre de chaque année par exemple

Merci d'avance

Isabelle ex Isa :-)




Salut,
En modifiant legerement
Dim rs As Recordset, i As Integer
Set rs = CurrentDb.OpenRecordset("Select * from LOCATIONS where
DateRevision<>null";)'Tu ne traite que ceux qui ont une valeur dans

DateRevision
rs.MoveLast
rs.MoveFirst
While Not rs.EOF
For i = 1 To DateDiff("yyyy", rs!DateRevision, rs!AU) - 1
If DCount("*", "Table1", "idbail=" & rs!Numéro & " AND
DateRevision=#" & Format(DateAdd("yyyy", i, rs!DateRevision),
"mm/dd/yyyy") &

"#") = 0 Then
DoCmd.RunSQL "INSERT INTO Table1(Idbail,DateRevision) VALUES('" &
rs!Numéro & "','" & DateAdd("yyyy", i, rs!DateRevision) & "')"
Else
Debug.Print "Enregistrement déjà ajouté"
End If
Next
rs.MoveNext
Wend
rs.Close


Set rs = CurrentDb.OpenRecordset("Select * from LOCATIONS where
DateRevision=null") ' Tu ne traites que les baux normaux

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


A tester ;-)

Avatar
Thierry (ze Titi)
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!DateRevision),rs!DU,rs!DateRevision)
For i = 1 To DateDiff("yyyy", rs!DU, rs!AU) - 1
If DCount("*", "Table1", "idbail=" & rs!Numéro & " AND DateRevision=#" & 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

A tester...

--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info
Avatar
Fabien
Re-bonjour Isa !

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!DateRevision),rs!DU,rs!DateRevision)
For i = 1 To DateDiff("yyyy", rs!DU, rs!AU) - 1
If DCount("*", "Table1", "idbail=" & rs!Numéro & " AND DateRevision=#" & Format(DateAdd("yyyy", i, uDateRevision), "mm/dd/yyyy") & "#") = 0 Then
DoCmd.RunSQL "INSERT INTO Table1(Idbail,DateRevision) VALUES('" & rs!Numéro & "','" & DateAdd("yyyy", i, dateRevision) & "')"
Else
Debug.Print "Enregistrement déjà ajouté"
End If
Next
rs.MoveNext
Wend
rs.Close

A tester...

Salut

Je l'avais presque ;-)
mais
DoCmd.RunSQL "INSERT INTO Table1(Idbail,DateRevision) VALUES('" &
rs!Numéro & "','" & DateAdd("yyyy", i, UdateRevision) & "')"
ne serait pas plus juste ? ^

Avatar
Thierry (ze Titi)
Je l'avais presque ;-)
C'est vrai, j'ai vu ça...


mais
DoCmd.RunSQL "INSERT INTO Table1(Idbail,DateRevision) VALUES('" &
rs!Numéro & "','" & DateAdd("yyyy", i, UdateRevision) & "')"
ne serait pas plus juste ? ^
Juste 3 minutes trop tard... lol


--
Cordialement,
Thierry

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

Avatar
Isabelle ex Isa :-)
Merci à vous deux

bon j'ai essayé le code suivant
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!DateRevision), rs!DU, rs!DateRevision)
For i = 1 To DateDiff("yyyy", rs!DU, rs!AU) - 1
If DCount("*", "Table1", "idbail=" & rs!Numéro & " AND
DateRevision=#" & 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


End Sub

Ben cela ne fait rien du tout
sniff !!!
Avatar
Thierry (ze Titi)
bon j'ai essayé le code suivant
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!DateRevision), rs!DU, rs!DateRevision)
For i = 1 To DateDiff("yyyy", rs!DU, rs!AU) - 1
If DCount("*", "Table1", "idbail=" & rs!Numéro & " AND
DateRevision=#" & 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


End Sub

Ben cela ne fait rien du tout
S'il existe déjà des enregistrements pour les dates calculées, la

fonction n'insère rien. Pars-tu bien d'une Table1 vide ?

Sinon, petite correction au niveau du For:
For i = 1 To DateDiff("yyyy", uDateRevision, rs!AU) - 1

--
Cordialement,
Thierry

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

Avatar
Isabelle ex Isa :-)
je viens de tester à nouveau j'ai une erreur sur cette ligne

uDateRevision = IIf(IsNull(rs!DateRevision), rs!DU, rs!DateRevision)

erreur 3265
élément non trouvé sur cette collection

c'est ma faute je m'a gouré dans le nomp du champ j'ai modifié mais
cela ne fonctionne toujours pas

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, rs!
DATE_REVISION)
For i = 1 To DateDiff("yyyy", rs!DU, rs!AU) - 1
If DCount("*", "Table1", "idbail=" & rs!Numéro & " AND
DATE_REVISION=#" & Format(DateAdd("yyyy", i, =====> uDATE_REVISI ON),
"mm/dd/yyyy") & "#") = 0 Then
DoCmd.RunSQL "INSERT INTO Table1(Idbail,DATE_REVISION) VALUES('"
& rs!Numéro & "','" & DateAdd("yyyy", i, uDATE_REVISION) & "')"
Else
Debug.Print "Enregistrement déjà ajouté"
End If
Next
rs.MoveNext
Wend
rs.Close
DoCmd.Close


End Sub

erreur variable non défini au niveau de
=======>uDATE_REVISION

P.S. qui pourrait me traduire tout ce code et comment vous faites pour
écrire tout çà ?

Merci
Avatar
Isabelle ex Isa :-)
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

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 :-)
Avatar
Thierry (ze Titi)
uDateRevision doit rester tel quel, c'est le nom de la variable que je définis au départ par:
Dim uDateRevision As Date
Elle me permet de stocker la date d'origine du contrat (ou la date de première révision si elle est renseignée dans la table LOCATIONS. Je fais ce test au niveau de la ligne:
uDateRevision = IIf(IsNull(rs!DATE_REVISION), rs!DU, rs!DATE_REVISION)
Si l'on tient compte de la correction du nom du champ dans la table, on doit donc obtenir:


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", uDateRevions, 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,DATE_REVISION) 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

La boucle While - Wend permet de parcourir l'ensemble des enregistrements de ta table LOCATIONS
A l'intérieur de cette boucle, j'en fais une autre (For - Next) qui permet de créer l'ensemble des enregistrements entre la date de début et de fin de contrat
Dans cette boucle For-Next, je teste juste la non existence d'un enregistrement à la date calculée.
C'est tout ce qu'il y a dans ce code, rien de particulièrement sorcier.

--
Cordialement,
Thierry

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

1 2