Bonjour,

Bonne année à toutes et tous!!

Je poste ceci parceque je m'embrouille un peu.

Chaque enregistrement corresponds à un objet qui peut ou non avoir été prêté (le champs Dates.[In] stocke l'info 1=non prêté; 2 = en prêt). Par ailleurs, a chaque prêt et retour de prêt j'ai une date (stockée dans la table Dates). Et dans la table PAC (correspondant aux descriptions d'items j'ai les infos liés à l'item en question. Un item peut avoir été prêté et^être rentré plusieurs fois. L'info est stocké chronologiquement dans les tables Dates et PAC

Je souhaiterai faire apparaitre dans une liste (d'un formulaire non lié) tous les items qui sont actuellement prêtés (avec leurs informations). Actuellement, j'ai pensé à une liste alimentée par valeurs. Mais ca devrait être possible d'avoir plutôt une liste alimentée par Table/Query, je pense.

J'ai pensé faire cela par des requêtes mais je m'en sortais pas. Alros je me suis tourné vers le VBA et les recordsets.

Ici dessous, Je vous mets le code correspondant pour alimenter la liste à l'ouverture du formulaire. Mais ce code ne fonctionne pas...
Avez vous des suggestions pour l'améliorer ou peut-être d'autres piste pour faire ce que je souhaite?

Un tout grand merci et à bientôt



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 Form_Load()
 
Dim SQL2 As String
Dim db As DAO.Database
Dim rs01 As DAO.Recordset 'recordset pour les enregistrements
Dim rs02 As DAO.Recordset 'recordset pour les enregistrements
Dim rs02Filtre As DAO.Recordset 'recordset pour les enregistrements
Dim BytPosition() As Byte 'pour stocker le bookmark
 
Dim tnummic As String
Dim tsubnummic As String
Dim strList2 As String
 
strList2 = "MIC;Pims;Greffe;Descriptif;Date;Local;IniLab;Mouvement" 'initialisation des titres des colonnes
 
Set db = CurrentDb()
 
SQL2 = "SELECT PAC.ID AS PAC_ID, PAC.NumPIMS, PAC.NumMIC, PAC.NumSousDossierMIC, PAC.NumGref, PAC.Descriptif, PAC.IDDate, Dates.ID AS Dates_ID, Dates.Date, Dates.[In], Dates.IDLocal, Dates.IDIniLab "     ', (PAC!NumMIC) & "-" & (PAC!NumSousDossierMIC) AS MIC
SQL2 = SQL2 & "FROM Dates INNER JOIN PAC ON Dates.ID = PAC.IDDate "
SQL2 = SQL2 & "ORDER BY Dates.Date;"
 
Set rs02 = db.OpenRecordset(SQL2, dbOpenDynaset) 'initialise le rs sur les 2 tables principales et trie sur la date
 
rs02.MoveFirst 'on se met au début du rs
rs02.FindFirst ("Dates.[In] = 2") 'on cherche le premier enregistrement qui est en prêt
 
 
While Not rs02.EOF 'tant qu'on n'est pas à la fin du rs on continue
 
    BytPosition = rs02.Bookmark 'on bookmark la position de cet enregistrement pour y revenir si besoin
'ici on stocke des valeurs qui vont servir pour filtrer le rs
    tnummic = rs02.Fields("PAC.NumMIC")
    tsubnummic = rs02.Fields("PAC.NumSousDossierMIC")
    tdate = rs02.Fields("Dates.Date")
 
    'on filtre le rs02 sur base des 3 champs, on recherche uniquement les Dates.[In] =1 pour une date ultérieure
    rs02.Filter = "((PAC.NumMIC) = " & tnummic & " And (PAC.NumSousDossierMIC) = " & tsubnummic & " And (Dates.Date) > " & tdate & " And (Dates.[In] = " & 1 & "))"
    Set rs02Filtre = rs02.OpenRecordset
 
        If rs02Filtre.RecordCount > 0 Then        'il y a des données dans le rs filtré alors c'est qu'on a un echantillon In de date supérieure pour la PAC
        'on laisse tomber le out courant et on recherche le sur out suivant
        Else 'on est à la fin du fichier
        'on revient alors à l'enregistrement
            rs02.Bookmark = BytPosition
        'et on récolte les données à afficher dans la liste
            For i = 1 To 12
                strList2 = strList2 & rs02.Fields(i)
            Next i
        End If
 
    rs02.Filter = ""
    rs02.FindNext ("Dates.[In] = 2")
 
Wend
 
 
 
 
SQL2 = ""
rs02.Close
rs02Filtre.Close
db.Close
Set rs02Filtre = Nothing
Set rs02 = Nothing
Set db = Nothing
 
End Sub