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:
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
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?
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.