Bonjour à tous,
Je suis en train d'écrire une macro VBA qui exécute une requête SQL entre deux tables contenues dans deux feuilles Excel. Le résultat doit s'afficher dans une troisième feuille.
Avec certaines requêtes (type SELECT * FROM [Feuil1$] WHERE...) ça fonctionne sans problème très rapidement.
Mais avec une jointure, Excel rame et ne parvient à rien.
Si quelqu'un pouvait me dire d'où ça vient, cela me retirerait une épine du pied.
Je tiens à préciser que j'ai essayer ma requête avec ACCESS, et cela fonctionne très bien.
Merci d'avance de vos réponses,
Bonne soirée,
Benoî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
Sub Requête(ClasseurRequête As String, OngletRequête As String, CellulesDestination As String, SourceDonnées As String, OngletDonnéesEtafi As String, TexteRequête As String)
    Dim i As Integer
 
    'Efface les données
    Workbooks(ClasseurRequête).Sheets(OngletRequête).Range("A1:BZ50000").ClearContents
    'Efface les connexions préexistantes
    Workbooks(ClasseurRequête).Sheets(OngletRequête).Select
    For i = 1 To ActiveWorkbook.Connections.Count
        ActiveWorkbook.Connections.Item(1).Delete
    Next i
    'Importe les données
    With Workbooks(ClasseurRequête).Sheets(OngletRequête).ListObjects.Add(SourceType:=0, Source:=Array( _
        "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=" & SourceDonnées & "" _
        , _
        ";Mode=Share Deny Write;Extended Properties=""HDR=YES;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path=" _
        , _
        """"";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=37;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2" _
        , _
        ";Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encryp" _
        , _
        "t Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False" _
        , _
        ";Jet OLEDB:Support Complex Data=False;Jet OLEDB:Bypass UserInfo Validation=False" _
        ), Destination:=Range(CellulesDestination)).QueryTable
        .CommandType = xlCmdSql
        .CommandText = TexteRequête
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .SourceDataFile = SourceDonnées
        .ListObject.DisplayName = OngletRequête
        .Refresh BackgroundQuery:=False
    End With
 
    'Efface les connexions
    Workbooks(ClasseurRequête).Sheets(OngletRequête).Select
    For i = 1 To ActiveWorkbook.Connections.Count
        ActiveWorkbook.Connections.Item(1).Delete
    Next i
 
 
End Sub
 
 
 
Sub DemandeRésultatRequête()
    s = "SELECT [Temp_ReqPC2$].[Entité], [Temp_ReqPC2$].[Compte10], [Temp_ReqPC1$].[Libellé] FROM [Temp_ReqPC2$] LEFT JOIN [Temp_ReqPC1$] "
    s = s + "ON [Temp_ReqPC2$].[Entité] & '/' & [Temp_ReqPC2$].[MaxPériode] & '/' & [Temp_ReqPC2$].[Compte10]=[Temp_ReqPC1$].[Entité] & '/' & [Temp_ReqPC1$].[Période] &'/'& [Temp_ReqPC1$].[Compte10]"
    '---Exécution de la requête
    Requête NomClasseurTables, "Feuil2", "$A$1", CheminClasseurs & "\" & NomClasseurTables & ExtClasseurXL, NomOngletTables_BGCIN, s
 
End Sub