Bonjour à toutes et à tous,

Voilà, j'ai un souci auquel je suis confronté depuis plusieurs jours et je dois dire que je ne vois pas vraiment de solution.

J'ai un formulaire avec une recherche multi-critère qui liste les résultats dans une listbox (lstResults). En fait, j'aimerais donner la possibilité à l'utilisateur soit d'imprimer le résultat de sa recherche, soit de l'exporter au format .xls.

Je me doute que je vais devoir passer par un état (que je n'ai pas encore réalisé ) mais comment le construire tout en tenant compte des critères saisis par l'utilisateur.

Je m'en remet à vous car je ne vois pas du tout comment m'y prendre.

Merci d'avance.

Je vous transmets le code de mon formulaire pour info :

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
Option Compare Database
 
Private Sub chkannee_Click()
 
If Me.chkAnnee Then
    Me.txtannee.Visible = False
Else
    Me.txtannee.Visible = True
End If
 
RefreshQuery
 
End Sub
 
 
Private Sub chkdomaine_Click()
 
If Me.chkDomaine Then
    Me.cmddomaine.Visible = False
Else
    Me.cmddomaine.Visible = True
End If
 
RefreshQuery
 
End Sub
 
 
Private Sub chkagence_Click()
 
If Me.chkAgence Then
    Me.cmdagence.Visible = False
Else
    Me.cmdagence.Visible = True
End If
 
RefreshQuery
 
End Sub
 
 
Private Sub cmddomaine_BeforeUpdate(Cancel As Integer)
 
RefreshQuery
 
End Sub
 
Private Sub cmdagence_BeforeUpdate(Cancel As Integer)
 
RefreshQuery
 
End Sub
 
Private Sub Form_Load()
 
Dim ctl As Control
 
For Each ctl In Me.Controls
    Select Case Left(ctl.Name, 3)
        Case "chk"
            ctl.Value = -1
 
        Case "txt"
            ctl.Visible = False
            ctl.Value = ""
 
        Case "cmd"
            ctl.Visible = False
 
    End Select
Next ctl
 
Me.lstResults.RowSource = "SELECT num_auto, num_projet, NOM_com, num_com, EPCI, titre_action, année, Dateajout, DateModification FROM Tb_fiche_projet;"
Me.lstResults.Requery
 
End Sub
 
Private Sub RefreshQuery()
Dim SQL As String
Dim SQLWhere As String
 
SQL = "SELECT num_auto, num_projet, NOM_com, num_com, EPCI, titre_action, année, Dateajout, DateModification FROM Tb_fiche_projet Where Tb_fiche_projet!num_auto <> 0 "
 
If Not Me.chkAnnee Then
    SQL = SQL & "And Tb_fiche_projet!année like '*" & Me.txtannee & "*' "
End If
If Not Me.chkDomaine Then
    SQL = SQL & "And Tb_fiche_projet!id_domaine = '" & Me.cmddomaine & "' "
End If
If Not Me.chkAgence Then
    SQL = SQL & "And Tb_fiche_projet!id_agence = '" & Me.cmdagence & "' "
End If
 
SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
 
SQL = SQL & ";"
 
Me.lblStats.Caption = DCount("*", "Tb_fiche_projet", SQLWhere) & " / " & DCount("*", "Tb_fiche_projet")
Me.lstResults.RowSource = SQL
Me.lstResults.Requery
 
End Sub
 
 
Private Sub lstResults_DblClick(Cancel As Integer)
    DoCmd.OpenForm "fm_recherche", acNormal, , "[num_auto] = " & Me.lstResults
End Sub
 
Private Sub txtannee_BeforeUpdate(Cancel As Integer)
 
RefreshQuery
 
End Sub
 
 
Private Sub Commande27_Click()
On Error GoTo Err_Commande27_Click
 
 
    DoCmd.Close
 
Exit_Commande27_Click:
    Exit Sub
 
Err_Commande27_Click:
    MsgBox Err.Description
    Resume Exit_Commande27_Click
 
End Sub
Private Sub Commande39_Click()
On Error GoTo Err_Commande39_Click
 
    Dim stDocName As String
    Dim MyForm As Form
 
    stDocName = "Formulaire_test_multi_critere"
    Set MyForm = Screen.ActiveForm
    DoCmd.SelectObject acForm, stDocName, True
    DoCmd.PrintOut
    DoCmd.SelectObject acForm, MyForm.Name, False
 
Exit_Commande39_Click:
    Exit Sub
 
Err_Commande39_Click:
    MsgBox Err.Description
    Resume Exit_Commande39_Click
 
End Sub
Private Sub Commande40_Click()
On Error GoTo Err_Commande40_Click
 
    Dim stDocName As String
 
    stDocName = "M_imprim"
    DoCmd.RunMacro stDocName
 
Exit_Commande40_Click:
    Exit Sub
 
Err_Commande40_Click:
    MsgBox Err.Description
    Resume Exit_Commande40_Click
 
End Sub