Bonjour,

Je m'adresse enfin directement à ce forum, car pour une fois, je n'arrive pas à trouver mon erreur avec les différentes discussion que j'ai lues. Je dois sûrement louper quelque chose de gros.

Je souhaite remplir une table via VBA grâce à un formulaire. Mes requêtes fonctionnent (quand je l'ai copie-colle dans la fenêtre SQL ACCESS, elles me renvoient ce que je veux). Mais soit je n'arrive pas à me servir correctement du recordset, soit... Je sais pas : Bref, voici le code.

L'erreur apparaît sur le rsTDataAbs.Update me disant que je n'ai pas de valeur sur mon champ TDataAbs.TShiftName.
C'est bien le cas, et je n'ai pas de valeur non plus pour les autres requêtes ouvertes avec le "openrecordset".

Le problème est donc sur la fin du code, je pense. Au niveau de ce fameux openrecordet

Je pensais au début que ma requête était mauvaise, mais après l'avoir testé directement dans ACCESS, je n'ai pas l'impression que cela vienne de là.



Petites précisions :
Le but est de saisir des congés.
Chaque opérateur est dans une équipe, chaque équipe a un planning différent avec des temps de travail qui peuvent être différents



Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
 
Private Sub Validationconges_Click()
 
Dim rsTDataAbs As DAO.Recordset
Dim LgNbLignes  As Long
Dim RequeteJrTravailleEquipe As String
Dim Postedujourtravaille As String
Dim Duration As String
Dim Shop1 As String
Dim i As Integer
Dim CodeOperateur As String
 
Set db = CurrentDb()
Set rsTDataAbs = db.OpenRecordset("TDataAbs", dbOpenDynaset)
 
RequeteJrTravailleEquipe = "SELECT TShiftCalendar.TShiftCalDate As TShiftCalDate FROM TShiftCalendar, TOpTeam WHERE (((TOpTeam.TOPCode)=" & "'" & Me.TOpCode & "'" & ") AND ((TOpTeam.TTeamId)=[TShiftCalendar].[TTeamId]) AND ((TOpTeam.TOPTEamStartDate)<TShiftCalendar.TShiftCalDate) AND ((TOpTeam.TOPTeamEndDate)>TShiftCalendar.TShiftCalDate));"
 
Set rcs = db.OpenRecordset(RequeteJrTravailleEquipe)
 
With rcs
   If Not .EOF Then
      'récupération du nombre d'enregistrements https://www.developpez.net/forums/d446953/logiciels/microsoft-office/access/vba-access/affecter-resultat-d-requete-variable/
      .MoveLast
      .MoveFirst
      LgNbLignes = .RecordCount
      JrTravailleEquipedate = .GetRows(LgNbLignes)
   End If
End With
 
' parcours de chaque ligne et entrer dans la boucle if pour celles correspondants à un jour travaillé par l'équipe dans la période
For i = 0 To LgNbLignes - 1
If JrTravailleEquipedate(0, i) <= Me.DateFin And JrTravailleEquipedate(0, i) >= Me.DateDebut Then
JrTravailleEquipe = CStr(JrTravailleEquipedate(0, i))
 
CodeOp = Me.TOpCode
 
Postedujourtravaille = "SELECT TShiftCalendar.TShiftName FROM TShiftCalendar, TOPTeam WHERE (((TOPTeam.TOPCode)=" & "'" & CodeOp & "'" & ") AND ((TOPTeam.TTeamId)=[TShiftCalendar].[TTeamId]) AND ((TShiftCalendar.TShiftCalDate)=" & "#" & JrTravailleEquipe & "#" & "));"
 
Duration = "SELECT TShiftCalendar.TShiftCalOpenTime FROM TShiftCalendar,  TOPTeam WHERE TOPTeam.TOPCode = " & "'" & CodeOp & "'" & " AND TOpTeam.TTeamId= TShiftCalendar.TTeamId AND TShiftCalendar.TShiftCalDate=" & "#" & JrTravailleEquipe & "#" & ";"
 
Shop1 = "SELECT TShiftCalendar.TShop1Name FROM TShiftCalendar,  TOPTeam WHERE TOPTeam.TOPCode = " & "'" & CodeOp & "'" & " AND TOpTeam.TTeamId= TShiftCalendar.TTeamId AND TShiftCalendar.TShiftCalDate=" & "#" & JrTravailleEquipe & "#" & ";"
 
 
rsTDataAbs.AddNew
rsTDataAbs![TDataAbsDate] = JrTravailleEquipedate(0, i)
rsTDataAbs![TOpCode] = Me.TOpCode
rsTDataAbs![TShiftName] = CurrentDb.OpenRecordset(Postedujourtravaille, dbOpenSnapshot)
rsTDataAbs![TShop1Name] = CurrentDb.OpenRecordset(Shop1, dbOpenSnapshot)
rsTDataAbs![TAbsCode] = Me.TAbsCode
rsTDataAbs![TDataAbsDuration] = CurrentDb.OpenRecordset(Duration, dbOpenSnapshot)
rsTDataAbs![TDataAbsComment] = Me.TDataAbsComment
rsTDataAbs![TDataAbsLocked] = False
 
rsTDataAbs.Update
 
End If
Next
 
MsgBox "Période de congés saisie"
 
rcs.Close
rsTDataAbs.Close
Set rcs = Nothing
Set rsTDataAbs = Nothing
Erase JrTravailleEquipe
 
 
End Sub
Merci d'avance pour votre aide