Bonjour à tous,
Dans le cadre d'un de mes projets je dois réalisé une macro qui effectue une requête SQL sur un champs d'une table situé dans un autre classeur. J'arrive pour le moment a réaliser une requête qui me permet de récuperer l'entièreté de la table, mais impossible pour moi d'ajouter une clause where.
Voici ma source de donnée (Pour des raisons de sécurité seul le nom des champs sera visible.
Voici ensuite mon code
La syntaxe de la requête SQL me pose problème, je sais que ma requête devrai ressembler à " SELECT * FROM [" & Feuille & Cellule & "] Where entite LIKE" & Site & "
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 Sub extractionValeurCelluleClasseurFerme() Dim Source As ADODB.Connection Dim Rst As ADODB.Recordset Dim ADOCommand As ADODB.Command Dim Fichier As String, Cellule As String, Feuille As String Dim Site As String Site = Workbooks("Tab2Bord.xlsm").Sheets("MAIN").Range("B3") Site = Left(Site, Len(Site) - 2) 'Adresse de la cellule contenant la donnée à récupérer Cellule = "A1:M1839" 'Pour une plage de cellules, utilisez: 'Cellule = "A4:C10" Feuille = "table$" 'n'oubliez pas d'ajouter $ au nom de la feuille. 'Chemin complet du classeur fermé Fichier = "C:\Users\XX\Desktop\Travail\PARCVEHICULE2.xlsx" Set Source = New ADODB.Connection Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";" Set ADOCommand = New ADODB.Command With ADOCommand .ActiveConnection = Source .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]" End With Set Rst = New ADODB.Recordset Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic Set Rst = Source.Execute("[" & Feuille & Cellule & "]") Workbooks("Tab2Bord.xlsm").Sheets("MAIN").Range("A63").CopyFromRecordset Rst Range("C63:C64").Select ActiveCell.FormulaR1C1 = "entite" Range("C63:C64").Select ActiveSheet.Range("$A$1:$M$1840").AutoFilter Field:=3, Criteria1:="entite" ActiveSheet.Range("$A$1:$M$1840").AutoFilter Field:=3, Criteria1:=Workbooks("Tab2Bord").Sheets("MAIN").Range("Z1") Rst.Close Source.Close Set Source = Nothing Set Rst = Nothing Set ADOCommand = Nothing End Sub
Mais cela me génèrent une érreur.
J'aimerais donc trouver la bonne syntaxe pour réaliser ma reqûete.
Merci par avance.
Cordialement
Alexis
Partager