Problème d'utilisation Dlookup

Résolu/Fermé
lulu16100 Messages postés 95 Date d'inscription mardi 3 décembre 2013 Statut Membre Dernière intervention 13 janvier 2019 - 12 juil. 2018 à 19:27
lulu16100 Messages postés 95 Date d'inscription mardi 3 décembre 2013 Statut Membre Dernière intervention 13 janvier 2019 - 26 juil. 2018 à 19:17
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.

2 réponses

yg_be Messages postés 23347 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 novembre 2024 Ambassadeur 1 552
12 juil. 2018 à 21:38
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
1
lulu16100 Messages postés 95 Date d'inscription mardi 3 décembre 2013 Statut Membre Dernière intervention 13 janvier 2019 61
26 juil. 2018 à 19:17
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
0
lulu16100 Messages postés 95 Date d'inscription mardi 3 décembre 2013 Statut Membre Dernière intervention 13 janvier 2019 61
12 juil. 2018 à 19:34
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")
0