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

  • Initiateur de la discussion Initiateur de la discussion madlolo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

M

madlolo

Guest
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,
 
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 modification par un modérateur:
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
 
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
 
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"
 
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:
Re : VBA - Appeler une méthode avec une constante

MERCI : Avec ByVal ça a l'air de marcher.
Renommer "ListIndex" en "myListIndex" ne semble pas avoir d'impact : même problème.
 
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"
 
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.
 
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 ...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
410
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…