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
Merci d'avance pour votre aide
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![]()
Partager