VBA - Appeler une méthode avec une constante

madlolo

XLDnaute Junior
Bonjour à tous,

j'aimerais appeler une méthode avec une constante :
Code:
Public Const maConstante As Integer = 50
'...
Toto(maConstante)

Mais j'ai l'erreur suivante : "Type d'argument ByRef incompatible"

Je me dis qu'il y a peut être la possibilité de modifier la déclaration de la méthode :
Code:
Public Function(ByVal maValeur As Integer)
au lieu de :
Code:
Public Function(maValeur As Integer) 'Passage par référence par défaut
Y a t'il une autre façon de procéder ? Est il posible de modifier le paramètre que l'on envoie à la méthode ? par exemple de créer une copie de la valeur de la constante, copie qui sera elle envoyée en paramètre ?

Merci d'avance,
 

madlolo

XLDnaute Junior
Re : VBA - Appeler une méthode avec une constante

En fait, c'est encore plus compliqué !! :mad:
Code:
List(1,1) = maConstante 'OK
monResultat = ToTo(maConstante) 'Ok ça passe
'mais 
monResultat = ToTo(List(1,1) 'KO, génère le message d'erreur

Gloups ...
 
Dernière édition:

skoobi

XLDnaute Barbatruc
Re : VBA - Appeler une méthode avec une constante

Bonjour madlolo,

comment as-tu déclaré List et l'argument de ToTo. Sont-ils du même type?
Par exemple:
Code:
Dim List() As String

Sub ToTo (constante As String)
....
....
End Sub
 

madlolo

XLDnaute Junior
Re : VBA - Appeler une méthode avec une constante

re-bonjour à tous,

voilà le code complet qui pose "problème" :( :
Code:
Option Base 1

Public Const id_focus_rien      As Integer = 1


Public Function MaFonctionQuiPete()
Dim ListIndex(1, 3) As Variant, myString As String

ListIndex(1, 1) = 100
ListIndex(1, 2) = id_focus_rien

myString = GetFocusName(1)                    'OK
myString = GetFocusName(id_focus_rien)    'OK
myString = GetFocusName(ListIndex(1, 2))  '(1) KO

ListIndex(1, 3) = myString

MaFonctionQuiPete = ListIndex
End Function


Private Function GetFocusName(myId As Integer)
    If myId = 1 Then
        GetFocusName = "rien"
    ElseIf myId = 2 Then
        GetFocusName = "quelque chose"
    End If
End Function
Et à l'exécution de la fonction "MaFonctionQuiPete()", j'ai le compilateur qui bloque sur (1), avec le message d'erreur suivant :
"Erreur de compilation
Type d'argument ByRef incompatible"
 

skoobi

XLDnaute Barbatruc
Re : VBA - Appeler une méthode avec une constante

Bonjour madlolo,

ajoute ceci à la définition de l'argument:
Code:
Private Function GetFocusName([COLOR=red][B]ByVal [/B][/COLOR]myId As Integer)

Edit:
Par contre, que doit faire MaFonctionQuiPete?
Car
Code:
MaFonctionQuiPete = ListIndex
ne te renverra que le premier élément du tableau: 100.

Dernière chose. ListIndex est utilisé dans le language VBA donc évite de créer des variables de ce genre, c'est source de problèmes, confusions.
 
Dernière édition:

madlolo

XLDnaute Junior
Re : VBA - Appeler une méthode avec une constante

"MaFonctionQuiPete" est un exemple de fonction, rien de plus.

Quand au même problème je veux dire par là qu'avec :
Code:
myString = GetFocusName(myListIndex(1, 2))

'...

Private Function GetFocusName(myId As Integer)
J'ai la même erreur : "Erreur de compilation
Type d'argument ByRef incompatible"
 

madlolo

XLDnaute Junior
Re : VBA - Appeler une méthode avec une constante

avec bcp de retard, je réponds.
Je pense avoir trouvé la solution.
Il faut faire quelque chose comme ça :
Code:
getFocusName(CInt( ...) )
quand on appelle la fonction.
En gros donc, forcer à re-caster en entier. C'est bizarre mais ça marche ...
 

Discussions similaires

Statistiques des forums

Discussions
312 488
Messages
2 088 859
Membres
103 978
dernier inscrit
bderradji