Bonjour à tous,

Je pose ici ma première question, j'espère être au bon endroit.

Voici ma problématique:
Sous Excel 2010, que j'utilise comme GUI pour accéder à une base MS Access sur un réseau, j'ai écrit le code ci-dessous qui fonctionne très bien:

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
Function DernierNumeroAuto() As Long
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim temp As String
Set db = DBEngine.OpenDatabase(Workbooks("SAVPRO.xlsm").Sheets("Paramètres").Range("C4").Value & "SAVPRO.accdb") 'Etablissement de la connection avec la base access SAVPRO
temp = UCase(Environ("username"))
db.Execute ("INSERT INTO [SAVP_Data] (RSV_BDD, USER) VALUES ('RESERVE', """ & temp & """)") ' Ecriture et réservation de la fiche suivante avec N° de fiche
Set rs = db.OpenRecordset("SELECT @@identity AS NewID FROM SAVP_Data")
Numfiche = CLng(rs.Fields("NewID"))     ' ATTENTION LES DEUX NUMEROS SERONT A CONCORDER DANS LA NOVUELLE BASE
FicheID = Numfiche
Workbooks("SAVPRO.xlsm").Sheets("Fiche").Range("ID").Value = Numfiche
'rs.Close        ' On ferme !
db.Close        ' On ferme !
Set rs = Nothing
Set db = Nothing
End Function
En mode pas à pas, dans le gestionnaire des tâches, on voit bien MS ACCESS s'ouvrir puis se fermer avec l'exécution de db.close

Mais pour des raisons que je ne comprends pas, le code ci-dessous, que j'ai aussi écrit, ne ferme pas l’application MS ACCESS lors de l'exécution de db.close.
Ce qui rends mon application instable par la suite lors d'un prochain accès à la bdd notament.

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
Public Sub RechercherDsBase(ByVal Selection As String, ByVal Champs As String, Optional ByVal MaDate As String)
Dim db As DAO.Database ' ou déclarer Dim db AsDatabase ne change rien
Dim rs As DAO.Recordset
Dim strSQL As String
Dim iCols As Integer
 
strSQL = "SELECT SAVP_Data.[N° FICHE], SAVP_Data.[DATE D'ENTREE], SAVP_Data.[Soldé], SAVP_Data.[REF PRODUIT], SAVP_Data.[N° SERIE MP], SAVP_Data.[N° LOT], " & _
         "SAVP_Data.[CODE CLIENT], SAVP_Data.[Nom du CLIENT], SAVP_Data.[Ref_Pdt_Client], SAVP_Data.[N° SERIE CLIENT], " & _
         "SAVP_Data.[DOC CLIENT], SAVP_Data.[RAPPORT QUALITE CLIENT], SAVP_Data.[D_Pdt_Rep], SAVP_Data.[Date Transmis Expedition] " & _
         "FROM SAVP_Data "
Select Case Selection   ' Complétion de la commande SQL
    Case "Référence Eaton"  ' OptionButton01
        strSQL = strSQL & "WHERE (SAVP_Data.[REF PRODUIT] = """ & Champs & """);"
    Case "N° Série Eaton"   ' OptionButton02
        strSQL = strSQL & "WHERE (SAVP_Data.[N° SERIE MP] = """ & Champs & """);"
    Case "N° BL Eaton"      ' OptionButton03
        strSQL = strSQL & "WHERE (SAVP_Data.[Extraction BL de SAP] = """ & Champs & """);"
    Case "Référence Client" ' OptionButton04
        strSQL = strSQL & "WHERE (SAVP_Data.[Ref_Pdt_Client] = """ & Champs & """);"
    Case "Code Client"      ' OptionButton05
        strSQL = strSQL & "WHERE (SAVP_Data.[CODE CLIENT] = """ & Champs & """);"
    Case "N° Série Client"  ' OptionButton06
        strSQL = strSQL & "WHERE (SAVP_Data.[N° SERIE CLIENT] = """ & Champs & """);"
    Case "N° Doc/Cmd Client" ' OptionButton07
        strSQL = strSQL & "WHERE (SAVP_Data.[DOC CLIENT] = """ & Champs & """);"
    Case "N° Rapport NC Clt" ' OptionButton08
        strSQL = strSQL & "WHERE (SAVP_Data.[RAPPORT QUALITE CLIENT] = """ & Champs & """);"
    Case Else
        Call Messagerie("")
End Select
Set db = DBEngine.OpenDatabase(Workbooks("SAVPRO.xlsm").Sheets("Paramètres").Range("C4").Value & "SAVPRO.accdb") 'Etablissement de la connection avec la base access SAVPRO
Set rs = db.OpenRecordset(strSQL)
For iCols = 0 To rs.Fields.count - 1 ' Copie de l'entête du recordset dans l'onglet
    Workbooks("SAVPRO.xlsm").Sheets("ResultRech").Cells(1, iCols + 1).Value = rs.Fields(iCols).Name
Next
Workbooks("SAVPRO.xlsm").Sheets("ResultRech").Range("A2").CopyFromRecordset rs   ' Copie du contenu du recordset dans l'onglet
'rs.Close
db.Close        ' On ferme !
Set rs = Nothing
Set db = Nothing
End Sub
J'ai commenté out les lignes a partir de: set rs... jusqu'à rs.close mais rien y fait.
J'en déduit donc que l'ouverture de la base est ce qui pose problème. Mais mes compétences s'arrêtes la...

Pouvez vous m'aider à comprendre ce qu'il se passe?

Merci pour votre aide

MAJ_1: Je viens de m'apercevoir que lorsque je ferme mon GUI rien ne change mais si je stop le débugger ensuite (alors qu'il est arrêté d’apparence) alors MS Access se ferme.