Bonjour,
Je viens vous demander de l'aide car je ne m'en sort vraiment pas.
Je reprends derrière un collègue (parti définitivement). Je ne peux pas tout réécrire, et suis donc obligé de repartir de l'existant.
J'ai un classeur excel, qui génère des stat à partir de requête sql (oracle). Son truc, était de passé par des appel sur deux autres classeurs pour les appels à la base.
En ce qui me concerne, je récupère son code, et modifie 'juste' une des requêtes. c'est la ou ça pèche. Je déclare celle ci dans un array() (SqlQuery=Array("...."), mais à chaque utilisation de .commandText = SqlQuery j'ai une erreur 13 incompatibilité de type. Je n'arrive pas à savoir si c'est un problème de formatage dans l'array, ou le code VBA qui n'est pas conforme. A savoir, ma requête fonctionne , cela va de soit.
Ci dessous une partie du module Excel:
J'ai mis la requête en une ligne, pensant que le formatage sur plusieurs lignes posait problème (j'ai du mal avec cette syntaxe). Mais je souhaite modifier les sysdate par des variable date_debut et date_fin. Est-ce que je peux couper sans problème le texte dans l'array pour inclure des variables?
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
45 Private Declare PtrSafe Function GetEnvironmentVariable Lib "kernel32" _ Alias "GetEnvironmentVariableA" _ (ByVal lpName As String, _ ByVal lpBuffer As String, _ ByVal nSize As Long) As Long Function GetEnvironmentVar(Name As String) As String GetEnvironmentVar = String(255, 0) GetEnvironmentVariable Name, GetEnvironmentVar, Len(GetEnvironmentVar) GetEnvironmentVar = TrimNull(GetEnvironmentVar) End Function Private Function TrimNull(item As String) Dim iPos As Long iPos = InStr(item, vbNullChar) TrimNull = IIf(iPos > 0, Left$(item, iPos - 1), item) End Function Sub majref() SqlQuery = Array("SELECT M.idate , M.nom, M.nomjf, M.prenom, M.sexe, M.datenaiss, M.age, M.datej , M.heure , U.ref , U.result from MULTICOL M, URGRES U where M.idate = U.ippdate and u.ref = 'INJPED' and m.datej >= to_date('04/10/2023 00:00:00', 'dd-mm-yyyy hh24:mi:ss') and m.datej <= trunc(SYSDATE) and trunc(MONTHS_BETWEEN(SYSDATE, TO_DATE(m.datenaiss, 'DD/MM/YYYY'))) <= 18") Sheets("Beyfortus").Select 'supprimer ancien contenu ['Beyfortus'!A1:z1000].ClearContents ' /* ************************************ */ ' ************* Driver ODBC ************* ' /* ************************************ */ Application.Workbooks.Open ("\\srv-apps\scripts\prod\prod_odbc.xls"), ReadOnly:=True Application.Run ("prod_odbc.xls!Module1.urqprododbc") Workbooks("prod_odbc.xls").Close conn = GetEnvironmentVar("URQUAL") Range("A1").Select With Selection.QueryTable .Connection = conn .CommandText = SqlQuery ' <---- l'erreur 13 est ici End With 'Mise à jour des valeurs Range("A1").Select Selection.QueryTable.Refresh BackgroundQuery:=False
Le mieux étant concaténer dans l'array() le contenu de cellules, type SqlQuery = ( Range(A1).value & Range(A2).value....), mais est-ce que c'est valide aussi dans un array ? ca permettrait de ne pas toucher le vba et modifier la requête sur une feuille à part.
Merci de votre aide.
Rémi.






Répondre avec citation








Partager