Union dans une sous-requete en excel vba

mady13camara Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
 mady13camara -
Bonjour,
Ca fait deux jours que je parviens pas a resoudre un probleme qui me fatigue vraiment malgré pas mal de recherches sur le net.Le voici:
Jai une base composée de 3 tables:
-Inscrits (MsisdnClient,Date)
-TransactionsClient(MsisdnBeneficiaire,Date,Statut,Type)
-PlageASuspendre(MsisdnASuspendre)
Je voudrais faire une requete qui puisse me sortir les MsisdnASuspendre qui n'ont pas été inscrits et n'ont pas fait de transactions sur une periode donnée.Mon code actuel se présente comme suit:

Sub MsisdnSuspense()
        
        Dim Cn As Object
        Dim strConnection As String
        Dim rs As Object
        Dim strSql As String
        
        'Je récupère la plage de jours à étudier, en les convertissants en date US (pour requête SQL°
        Dim DateDebut As String
        Dim DateFin As String
        
        'J'ajoute un jour à la date de fin pour éviter l'erreur de date longue
        DateFin = DateAdd("d", 1, ThisWorkbook.Worksheets("Plage Msisdn").Cells("4", "D"))
        
        ' Je mets en forme pour requête SQL
        DateDebut = VBA.Format(CDate(ThisWorkbook.Worksheets("Plage Msisdn").Cells("2", "D")), "mm/dd/yyyy")
        DateFin = VBA.Format(CDate(DateFin), "mm/dd/yyyy")
        
        Set Cn = CreateObject("ADODB.Connection")
        strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ThisWorkbook.Path & "\Bdd OM\BaseSuspension.accdb"
        Cn.Open strConnection
        
        'Je configure la requête SQL
       strSql = "SELECT MsisdnASuspendre"
       strSql = strSql & " FROM PlageASuspendre"
       strSql = strSql & " WHERE MsisdnASuspendre NOT IN"
       strSql = strSql & " (SELECT Inscrits.MsisdnClient FROM Inscrits WHERE Inscrits.[Date] >=#" & DateDebut & "# AND Inscrits.[Date] <#" & DateFin & "#"
       strSql = strSql & " UNION"
       strSql = strSql & " SELECT TransactionsClient.MsisdnBeneficiaire FROM TransactionsClient WHERE Statut LIKE '%Success' AND Type LIKE '%Cash in' AND TransactionsClient.[Date] >=#" & DateDebut & "# AND TransactionsClient.[Date] <#" & DateFin & "#);"
       
       MsgBox strSql
       
       Set rs = Cn.Execute(strSql)
        
      'J'affecte le résultat à la variable de retour
       ThisWorkbook.Worksheets("Plage Msisdn").Range("A7").CopyFromRecordset rs
        
        'je ferme les variables objets
        rs.Close
        Set rs = Nothing
        Cn.Close
        Set Cn = Nothing
        
        MsgBox "test"
        
    End Sub


Tout marche bien mais c'est au niveau de ma requete jai l'erreur Erreur Systeme &H80040E14 (-2147217900).

Merci d'avance pour l'aide

Cdt
A voir également:

1 réponse

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour

a 1° vue:
Tu combines 3 tables sans effectuer de jointure ; il semble que la syntaxe serait

Select.... FROM .... LEFT JOIN Table2 ON condition ...
sur 2 niveaux (table3)
et comme condition
champ IS NULL
0
mady13camara
 
Merci du retour michel mais vu que c'est une UNION est-ce vraiment de joindre les tables?
0