Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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é !!
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

La fonction Toto est déclaré ainsi :
Code:
Public Function Toto(maVariable As Integer)
et la constante ainsi :
Code:
Public Const maConstante           As Integer = 100
 

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"
 

skoobi

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

Re bonjour madlolo,

je ne vois toujours pas ce que tu veux dire...
Je t'ai donné la solution non?
tu avais l'air de dire qu'elle marchait dans l'exemple.
 

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…