Bonjour,

Je souhaiterai créer un formulaire dynamique de recherche, c'est à dire, un formulaire composé de Textbox et d'une Datagrid se mettant à jour à chaque changement d'une Textbox.

Voici mon code :

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
69
70
71
72
73
74
75
76
 
Private Sub txtNomEE_Change()
    Rafraichir_Grille
End Sub
 
Private Sub txtNomEU_Change()
    Rafraichir_Grille
End Sub
 
Private Sub txtNPdP_Change()
    Rafraichir_Grille
End Sub
 
Private Sub Rafraichir_Grille()
    Dim cn As ADODB.Connection
    Dim cmd As ADODB.Command
    Dim req As String
 
    'Initialisation de la connection
    Set cn = New Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & SRC & ";" & _
            "User Id=Admin; Password="
 
    'Création de la requète
    req = "SELECT [Plan de Prévention].[Numéro de PDP], " & _
                      "[Plan de Prévention].[Nom de l'entreprise extérieur], " & _
                      "[Plan de Prévention].[Nature des travaux], " & _
                      "[Plan de Prévention].[Date d'émission], " & _
                      "[Plan de Prévention].[Date de validité], " & _
                      "[Plan de Prévention].[Nom de l'entreprise utilisatrice], " & _
                      "[Autorisation de travail].[Numéro d'autorisation de travail], " & _
                      "Responsable.[Nom du Responsable], " & _
                      "Responsable.[Prenom du Responsable] " & _
                      "FROM Responsable INNER JOIN ([Plan de Prévention] " & _
                      "INNER JOIN [Autorisation de travail] ON " & _
                      "[Plan de Prévention].[Numéro de PDP] = [Autorisation de travail].[Numéro de PDP]) ON " & _
                      "Responsable.[ID du Responsable] = [Plan de Prévention].[ID du Responsable] " & _
                      "WHERE [Plan de Prévention].[Numéro de PDP] <> '0' "
 
    'Si Numéro de PDP n'est pas vide, on ajoute la contraite à la recherche
    If (txtNPdP <> "") Then
        req = req & "AND [Plan de Prévention].[Numéro de PDP] LIKE '" & txtNPdP & "%' "
    End If
 
    'Si le nom de l'EE n'est pas vide,      "       "
    If (txtNomEE <> "") Then
        req = req & "AND [Plan de Prévention].[Nom de l'entreprise extérieur] LIKE '%" & txtNomEE & "%' "
    End If
 
    'Si le nom de l'EU n'est pas vide,     "       "
    If (txtNomEU <> "") Then
        req = req & "AND [Plan de Prévention].[Nom de l'entreprise utilisatrice] LIKE '%" & txtNomEU & "%' "
    End If
 
    'Ajout du point virgule à la reqète finale
    req = req & ";"
 
    'Création de la Command
    Set cmd = New Command
    Set cmd.ActiveConnection = cn
    cmd.CommandText = req
 
    'Exécution de la requète
    Dim rs As Recordset
    Set rs = cmd.Execute
 
    'Do While Not rs.EOF
    '    MsgBox rs![Numéro de PDP]
    '    rs.MoveNext
    'Loop
 
    Set grdPdP.DataSource = rs
    grdPdP.Refresh
 
End Sub
Malheureusement, cela ne fonctionne pas.

En effet, bien que la requète retourne le bon résultat (tester grâce à la boucle While en commentaire), il ne s'affiche pas dans le DataGrid qui se vide entièrement.

J'ai consulter de nombreux tutoriaux sur le sujet, sans jamais réussir à voir ce qui clocher.

Merci d'avance.