Union dans une sous-requete en excel vba

Fermé
mady13camara Messages postés 1 Date d'inscription lundi 26 janvier 2015 Statut Membre Dernière intervention 26 janvier 2015 - Modifié par pijaku le 26/01/2015 à 12:10
 mady13camara - 27 avril 2015 à 14:58
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 lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
26 janv. 2015 à 15:22
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
27 avril 2015 à 14:58
Merci du retour michel mais vu que c'est une UNION est-ce vraiment de joindre les tables?
0