Bonjour à tous,

J'ai un classeur .xlsm qui contient une requête SQL sur les données internes de ce même classeur.
Lorsque je modifie les données des tables sur lesquelles je fait une requête de jointure, le résultat de la requête ne tient pas compte des données modifiées.
Je suis obligé de sauvegarder et de fermer le classeur et de le rouvrir à chaque mise à jour.
Si je sauvegarde simplement sans fermer, la mise à jour n'est pas prise en compte et la requête sql retourne les anciens résultats.
Une remarque: la première requête dure quelque secondes et les mises à jour (ratées) 2/10ème de secondes.

Auriez-vous une explication et une solution au mystère de la connexion rémanente?

Merci,

Francis


La procédure qui prend en paramètre la requête et la plage de destination:
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
Sub RunSQL_Range(ByVal rSQL As String, ByVal rDest As Range)
 
Dim Conn As ADODB.Connection
Dim Rst As ADODB.Recordset
Dim Fichier As String, Direction As String
 
    Set Conn = New ADODB.Connection
    With Conn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .ConnectionString = "Data Source=" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & _
    ";Extended Properties=""Excel 12.0;HDR=YES"";"
    .Open
    End With
 
 
    Set Rst = New ADODB.Recordset
    With Rst
    .ActiveConnection = Conn
    .Open rSQL, , adOpenKeyset, adLockOptimistic, adCmdTableDirect
    End With
 
    rDest.CopyFromRecordset Rst
 
    Rst.Close
    Conn.Close
 
    Set Conn = Nothing
    Set Rst = Nothing
 
End Sub
rSQL = SELECT `Raw material producer`, `Material type`, `Commercial name`, Region, `Quater` FROM [Project$A1:G37], [Quaters$A1:A7] WHERE `Commercial name` IS NOT NULL AND `Quater` IS NOT NULL GROUP BY Region, `Raw material producer`, `Material type`, `Commercial name`, Region, `Quater` ORDER BY `Quater`, `Raw material producer`, `Material type`, `Commercial name`, Region