Problème d'utilisation Dlookup

Résolu
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

  1. 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")
    1. Contributeur
      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. 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