Problème d'utilisation Dlookup
Résolu
lulu16100
Messages postés
109
Statut
Membre
-
lulu16100 Messages postés 109 Statut Membre -
lulu16100 Messages postés 109 Statut Membre -
Bonjour à tous,
Voici une brève explication de ce que je veux faire:
J'ai un formulaire où je saisie une date de début et une date de fin.
Je veux créer un enregistrement par date du début à la fin mais seulement s'il n'existe pas. J'ai regardé pas mal de forum, ne connaissant rien au DAO (et mes connaissances étant limité en vba) j'ai vu une alternative avec la fonction Dlookup.
Voici mon code:
Private Sub BOUTON_CREER_Click()
Dim occurence As Integer
Dim date_temp As Date
Dim rech As Date
occurence = DateDiff("d", DATE_DEB, DATE_FIN) + 1
For i = 1 To occurence
date_temp = DATE_DEB + i - 1
rech = Nz(DLookup("[DATE_JOUR]", "REPARTITION_TPS_REELLE", "[DATE_JOUR] =" & date_temp), "01/01/1900")
MsgBox (date_temp & " " & rech)
Next
End If
End Sub
La fonction ne fonctionne pas car même si la date existe dans ma table j'ai toujours la valeur par défaut qui s'affiche... j'ai également essayé de ne mettre que date_temp dans le critère mais dans ce cas c'est toujours la date de début qui s'affiche.
Sauriez-vous d'où cela vient?
Je vous remercie d'avance.
Voici une brève explication de ce que je veux faire:
J'ai un formulaire où je saisie une date de début et une date de fin.
Je veux créer un enregistrement par date du début à la fin mais seulement s'il n'existe pas. J'ai regardé pas mal de forum, ne connaissant rien au DAO (et mes connaissances étant limité en vba) j'ai vu une alternative avec la fonction Dlookup.
Voici mon code:
Private Sub BOUTON_CREER_Click()
Dim occurence As Integer
Dim date_temp As Date
Dim rech As Date
occurence = DateDiff("d", DATE_DEB, DATE_FIN) + 1
For i = 1 To occurence
date_temp = DATE_DEB + i - 1
rech = Nz(DLookup("[DATE_JOUR]", "REPARTITION_TPS_REELLE", "[DATE_JOUR] =" & date_temp), "01/01/1900")
MsgBox (date_temp & " " & rech)
Next
End If
End Sub
La fonction ne fonctionne pas car même si la date existe dans ma table j'ai toujours la valeur par défaut qui s'affiche... j'ai également essayé de ne mettre que date_temp dans le critère mais dans ce cas c'est toujours la date de début qui s'affiche.
Sauriez-vous d'où cela vient?
Je vous remercie d'avance.
2 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonsoir, je ferais ainsi (désolé, avec DAO):option explicit Private Sub BOUTON_CREER_Click() Dim date_temp As Date Dim db As DAO.Database, tb As DAO.Recordset Set db = CurrentDb Set tb = db.OpenRecordset("REPARTITION_TPS_REELLE", dbOpenDynaset) date_temp = CLng(DATE_DEB) Do While date_temp <= DATE_FIN tb.FindFirst ("DATE_JOUR = " & CLng(date_temp)) If tb.NoMatch Then tb.AddNew tb!DATE_JOUR = date_temp tb.Update End If date_temp = date_temp + 1 Loop 'Do While date_temp <= DATE_FIN End Sub-
Bonsoir,
Merci pour votre réponse. Au final voici le code que j'ai réalisé (avec DAo :D ) :
Dim occurence As Integer
Dim date_temp As Date
Dim rech As Date
occurence = DateDiff("d", DATE_DEB, DATE_FIN) + 1
'regarde les dates une à une
Dim count As Integer
count = 0
For i = 1 To occurence
date_temp = DATE_DEB + i - 1
'rech retourne date_temp si la date existe déjà dans la table sinon retourne 01/01/1900
rech = Nz(DLookup("[DATE_JOUR]", "REPARTITION_TPS_REELLE", "[ID_SALARIE] = ID_EMP.Value And [DATE_JOUR] =#" & Format(date_temp, "mm/dd/yyyy") & "#"), "01/01/1900")
If rech = "01/01/1900" Then
'regarde si pas week-end
If Not (Weekday(date_temp) = 7 Or Weekday(date_temp) = 1) Then
Dim t As Recordset
Set t = CurrentDb.OpenRecordset("REPARTITION_TPS_REELLE", DB_OPEN_DYNASET)
count = count + 1
t.AddNew
t![DATE_JOUR] = date_temp
t.Update
t.MoveLast
End If
End If
Next
MsgBox (count & " dates ont été créées!")
End If
End If
-
-
En allant sur un autre forum j'ai trouvé la solution :
rech = Nz(DLookup("[DATE_JOUR]", "REPARTITION_TPS_REELLE", "[DATE_JOUR] =#" & Format(date_temp, "mm/dd/yyyy") & "#"), "01/01/1900")