Bonjour à tous,
Je suis en train d'essayer d'intégrer une requête SQL dans VBA Excel afin d'afficher ma table dans une feuille avant d'en extraire les données.
Mon problème est que depuis 1 mois que je me penche sur le sujet, je faisais des essais en consultant une base de données, ça fonctionnait et je me concentrais alors sur le reste du code VBA.
L'objectif final du fichier est de pouvoir faire la même chose pour 5 bases de données distinctes mais lorsque je transpose le code pour une autre BDD ça ne fonctionne pas, erreur 1001 sur ".Refresh BackgroundQuery:=False"
Afin de fabriquer mon code j'étais passé par l'enregistreur de macro comme me l'a suggéré mon frère avant de faire des retouches. (Je débute en VBA dsl)
Je pense que mon problème vient de ma requête sql mais je ne comprends pas que ça marche pour une base et pas pour les autres.
Ma requête pour la premiere base est la suivante :
Cette version fonctionne étrangement, si je change les infos de connexion sur une autre base (en remplaçant DSN= notamment) ça me met donc l'erreur sur la ligne .Refresh BackgroundQuery:=False avant d'importer les données.
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 Dim strSQLa1 As String strSQLa1 = "" strSQLa1 = strSQLa1 & ""... With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _ "OLEDB;Provider=MSDASQL.1;Persist Security Info=True;Extended Properties=""DSN=pr****es;Description=PR****ES;UID=Administrateur;APP=Micr" _ , "osoft Office 2003;WSID=;DATABASE=PR****ES"""), Destination:= _ Range("$C$1")).QueryTable .CommandType = xlCmdSql .CommandText = strSQLa1 .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .ListObject.DisplayName = _ "Tableau_SQL_Queries___PR****ES__192.168.*.*____9.16.2.x1" .Refresh BackgroundQuery:=False End With
J'ai voulu me documenter, fabriquer ma propre ligne de commande pour la rendre plus propre et fonctionnelle mais ça ne marche pas, je sais même pas si l'idée était bonne du coup :
Dans ce code j'ai une erreur sur Range("$C$1") : Erreur de compilation: Attendu : séparateur de liste ou ).
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 Dim strSQLc1 As String strSQLc1 = "" strSQLc1 = strSQLc1 & ""... With ActiveSheet.QueryTable.Add(Connection:=Array(Array( _ "ODBC;DSN=pro*******ne;UID=administrateur;PWD=), Destination:= _ Range("$C$1")) .CommandText = strSQLc1 .Name = "ESSAI" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .Refresh BackgroundQuery:=False End With
Si je décale un peu les lignes l'erreur passe sur les $ $ comme des caractères non compatibles.
J'espère que vous pourrez m'aider à résoudre ce problème de requête sql dans vba, après ça je commencerai à être un peu plus opérationnel et je pourrai de nouveau dormir la nuit sans m'arracher les cheveux^^
Par avance merci.
Partager