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

Le
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é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 :-)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Thierry (ze Titi)
Le #6332981
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
Fabien
Le #6332961
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 ;-)

Thierry (ze Titi)
Le #6332951
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
Fabien
Le #6332941
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 ? ^

Thierry (ze Titi)
Le #6332931
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

Isabelle ex Isa :-)
Le #6332911
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 !!!
Thierry (ze Titi)
Le #6332901
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

Isabelle ex Isa :-)
Le #6332891
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
Isabelle ex Isa :-)
Le #6332881
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 :-)
Thierry (ze Titi)
Le #6332871
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

Publicité
Poster une réponse
Anonyme