Excel 2007 VBA- Modules de classes et "Argument ByRef incompatible"

adiboubio

XLDnaute Nouveau
Bonjour,

Je vais essayer de structurer un peu mon pb:

Objectifs:
J'aimerai via excel pouvoir réaliser des opération sur des fourchettes de valeurs.
par exemple, si A1 a pour valeur "[1-2]"
et A2, "[10-20]"
je voudrai à termes qu'une fonction de type sommer(A1,A2), renvoie [11-22].

Moyen:
J'aimerai profiter de cet exercice pour me familiariser avec l'utilisation des modules de classe, et pensais donc créer une classe fourchette puis une fonction d'opération que j'appellerai dans les feuilles excel.


J'ai créé le module de classe "fourchette" comme suit:

Public gauche As Long
Public droite As Long

Function afficher() As String
afficher = ("[" & gauche & "-" & droite & "]")
End Function

Et dans un module la fonction sommer comme suit:

Public Function sommer(terme1 As fourchette, terme2 As fourchette) As fourchette
Set res = New fourchette
res.gauche = terme1.gauche + terme2.gauche
res.droite = terme1.droite + terme2.droite
sommer = res
End Function

Que je veux tester par la fonction test suivante:

Sub test()

Set a = New fourchette
a.gauche = 1
a.droite = 1

Set b = New fourchette
b.gauche = 1
b.droite = 2

Set c = New fourchette
c = sommer(a, b)
MsgBox (c.afficher)

End Sub

Hors celle-ci ne marche pas et me dit: Type d'argument ByRef incompatible. Je ne suis pas très familier avec ce type d'erreur. Quelqu'un pourrait m'aider?

Je suis par ailleurs preneur de tout conseil pour atteindre mon objectif

Merci d'avance
 

Sylvain

XLDnaute Occasionnel
Re : Excel 2007 VBA- Modules de classes et "Argument ByRef incompatible"

Bonsoir,

les problèmes viennent de la déclaration du passage des variables met :
"Option Explicit"
en haut de chaque module ça t'obligera à mieux programmer. Dans les options de vba, tu as un onglet éditeur et tu peux cocher déclaration des variables obligatoires comme ça ce sera mis par défaut.

quand tu passes des infos à une procédure, ça se fait soit Byref soit Byval la différence est que Byval crée une étanchéité entre la fonction appelée et celle qui appèle.

par exemple

function carré(byref x) as double
x=x*x
carré=x
end function

Si tu appèles cette fonction y est changé :
sub essai
dim y,z
y=2
z=carré(y)
msgbox y
end sub

maintenant tu fais :
function carré(byval x) as double
x=x*x
carré=x
end function
Ici il y aura une étanchéité ce que tu verras en lançant essai.
Quand on n'indique ni byval ni byref c'est le second qui est utilisé.

D'autre part on ne peut pas écrire ça
a=b
si a et b sont des variables objet.
dans ce cas on utilisera
set a=b

Fais des essais tu trouveras.
 

Discussions similaires

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa