Problème d'utilisation Dlookup

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

2 réponses

  1. 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
    1
    1. lulu16100 Messages postés 109 Statut Membre 61
       
      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
  2. lulu16100 Messages postés 109 Statut Membre 61
     
    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