Bonjour,

Tout d'abord, je ne connais que très succinctement le VB.
Je suis en excel 2010, et j'ai créé une fonction vba qui se connecte sur une base oracle 11g, et exécute une procédure stockée.

J'ai deux types de paramètres :
- des paramètres input
- un paramètres output

Quand j’exécute ma fonction :
- je n'ai pas de message d'erreur
- la procédure oracle s'exécute bien comme je le souhaite, et donne les résultats attendues
- MAIS : le paramètre output me revient a "null"

Or, lorsque j'exécute cette procédure oracle directement sur sql developper, j'ai un résultat.

Pour valider que ce n'était pas mon code qui était mauvais, j'ai retrouvé exactement le même exemple dans un tutoriel de ce site, que j'ai déployé en exemple sur mon serveur, et j'obtiens exactement le même résultat que sur ma procédure, à savoir :
- je n'ai pas de message d'erreur
- la procédure oracle s'exécute bien comme je le souhaite, et donne les résultats attendues
- MAIS : le paramètre output me revient a "null"

Ci dessous, la procédure "exemple" déployée exprès.

Si qqun a une idée, merci.

-- procédure oracle

Code oracle : 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
create or replace package odbpack as
Procedure Proc(param1 in number,param2 in out number,
param3 out number);
Function Func(param1 in varchar2, param2 in out varchar2,
param3 out varchar2) return number;
end odbpack;
/
 
create or replace package body odbpack as
Procedure Proc(param1 in number,param2 in out number,
param3 out number) is
begin
param2 := param1+param2;
param3 := param1;
end;
 
Function func(param1 in varchar2, param2 in out varchar2,
param3 out varchar2) return number is
begin
param2 := param1||param2;
param3 := param1;
return length(param2);
end;
end odbpack;
/

' fonction vba
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
46
47
48
49
50
51
52
53
54
55
Private Sub Callproc_Click()
    'Dim er As adoError
    'On Error GoTo CnEh
    Dim cnn1 As ADODB.Connection
    Dim cmdExeproc As ADODB.Command
 
    ' Open connection.
    Set cnn1 = New ADODB.Connection
 
    ' Modify the following line to reflect a DSN within your environment
    strCnn = "DSN=mondsn; UID=monlogin; PWD=monpswd;"
    cnn1.Open strCnn
    Set cmdExeproc = New ADODB.Command
    cmdExeproc.ActiveConnection = cnn1
    cmdExeproc.CommandText = "{call odbpack.proc(?,?,?)}"
 
    ' In the next set of code, we have to manually set
    ' the parameter types since ADO and ODBC cannot derive this
    ' information when calling packaged procedures.
    cmdExeproc.Parameters(0).Value = 1
    cmdExeproc.Parameters(1).Direction = adParamInputOutput
    cmdExeproc.Parameters(1).Value = 2
    cmdExeproc.Parameters(2).Direction = adParamOutput
 
    cmdExeproc.Execute
    MsgBox ("Return Values from Proc are : " & _
            cmdExeproc.Parameters(1).Value & _
            " and " & _
            cmdExeproc.Parameters(2).Value)
 
    Set cmdExeproc = New ADODB.Command
 
    cmdExeproc.ActiveConnection = cnn1
 
    cmdExeproc.CommandText = "{? = call odbpack.func(?,?,?)}"
 
    ' In the next set of code, we have to manually set
    ' the parameter types since ADO and ODBC cannot derive this
    ' information when calling packaged procedures.
    cmdExeproc.Parameters(0).Direction = adParamReturnValue
    cmdExeproc.Parameters(1).Value = "Odd"
    cmdExeproc.Parameters(2).Direction = adParamInputOutput
    cmdExeproc.Parameters(2).Value = "Fred"
    cmdExeproc.Parameters(3).Direction = adParamOutput
    cmdExeproc.Execute
    MsgBox ("Return Values from Func are : " & _
            cmdExeproc.Parameters(0).Value & _
            " and " & _
            cmdExeproc.Parameters(2).Value & _
            " and " & _
            cmdExeproc.Parameters(3).Value)
 
    ' Close Connection
    cnn1.Close
End Sub