p'tit vieux
XLDnaute Occasionnel
Bonjour à tous
j'essaie de créer une requête SQL pour lire des Ranges (2 voire plus -Soyons fous ) pour avoir un résultat en colonneS correspondant.
Voici mon code avec plusieurs essais de requêtes. J'y ai mis des commentaires au dessus de chacune d'elle.
Bien sûr il y a toujours la solution de faire une requête sur chaque Range et de créer le tableau compilant les résultats mais pourquoi faire simple
Si quelqu'un a une ou des idées par avance merci à vous
j'essaie de créer une requête SQL pour lire des Ranges (2 voire plus -Soyons fous ) pour avoir un résultat en colonneS correspondant.
Voici mon code avec plusieurs essais de requêtes. J'y ai mis des commentaires au dessus de chacune d'elle.
Bien sûr il y a toujours la solution de faire une requête sur chaque Range et de créer le tableau compilant les résultats mais pourquoi faire simple
Si quelqu'un a une ou des idées par avance merci à vous
VB:
Sub Test1()
Dim Fichier, ConnectString
Dim Query_str
Dim arr, arr2
Dim RsTLigne, RsTCol
'===== Early Binding !! =========
Dim ADOConn As ADODB.Connection
Dim AdoComand As ADODB.Command
Dim RsT As ADODB.Recordset
Set ADOConn = New ADODB.Connection
Set RsT = New ADODB.Recordset
Set AdoComand = New ADODB.Command
Fichier = ActiveWorkbook.FullName
ConnectString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier & ";Extended Properties=""Excel 12.0;HDR=No;IMEX=1;"""
ADOConn.Open ConnectString
'' => OK MAIS:
'' Le 1er RANGE du SELECT DOIT INCLURE la zone du RANGE du 2éme SELECT (celui du IN): Ici [Feuil1$A2:B11] et [Feuil1$B2:B11]
'' Close WHERE ET IN à créer complexe si plus de 2 Ranges. Pas testé avec plus de 2 Ranges
Query_str = "Select * from [Feuil1$A2:B11] where [F2] in (select [F1] from [Feuil1$B2:B11])"
'' => Resultat exact MAIS:
'' PROBLEME j'ai un tableau 1D des 2 Ranges au lieu d'un tableau 2D
' Query_str = "Select * from [Feuil1$B2:B11] union all Select * from [Feuil1$A2:A11]"
'' => NON! Pas d'erreur mais résultat UNION
' Query_str = "Select * from [B2:B92],[A2:A92]"
'' => IDEM CI-DESSUS malgré le nom du classeur.
' Query_str = "Select * from [Feuil1$B2:B11],[Feuil1$A2:A11]"
'' => IDEM CI-DESSUS avec champs nommées F1 plus nom sur 2 classeurs
' Query_str = "Select [Feuil1$B2:B11.F1], [Feuil2$A2:A11.F1] from [Feuil1$B2:B11],[Feuil2$A2:A11]"
'' => NON! ERREUR!
' Query_str = "Select [F1],[F2] from [Feuil1$B2:B11],[Feuil1$A2:A11]"
RsT.Open Query_str, ADOConn, adOpenStatic
' Affichage
Range("Q2").CopyFromRecordset RsT
' Fermeture
If RsT.State = adStateOpen Then
RsT.Close
End If
Set RsT = Nothing
If ADOConn.State = adStateOpen Then
ADOConn.Close
End If
Set ADOConn = Nothing
End Sub
Dernière édition: