VBA- Fourchettes de valeur, 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
 

bqtr

XLDnaute Accro
Re : VBA- Fourchettes de valeur, Modules de classes et "Argument ByRef incompatible"

Bonsoir adiboubio,

Un essai sans module de classe avec cette fonction: Dans une cellule tape =TTotal(A1;A2)

Code:
Function TTotal(Terme1 As Range, Terme2 As Range)

Dim Tab1, Tab2
Tab1 = Split(Terme1)
Tab2 = Split(Terme2)
TTotal = "[" & Val(Right(Tab1(0), Len(Tab1(0)) - 1)) + Val(Right(Tab2(0), Len(Tab2(0)) - 1)) & " - " & _
          Val(Left(Tab1(2), Len(Tab1(2)) - 1)) + Val(Left(Tab2(2), Len(Tab2(2)) - 1)) & "]"

End Function
Cela suppose qu'il y a un espace avant et après le tiret dans les cellules et qu'il n'y a pas de chiffre avec une virgule.

Edit :

Si pas d'espace dans la cellule et pas de chiffre à virgule :
Code:
Function TTotal2(Terme1 As Range, Terme2 As Range)

Dim Tab1, Tab2
Tab1 = Split(Terme1, "-")
Tab2 = Split(Terme2, "-")
TTotal2 = "[" & Val(Right(Tab1(0), Len(Tab1(0)) - 1)) + Val(Right(Tab2(0), Len(Tab2(0)) - 1)) & "-" & _
          Val(Left(Tab1(1), Len(Tab1(1)) - 1)) + Val(Left(Tab2(1), Len(Tab2(1)) - 1)) & "]"

End Function
Si chiffre avec virgule et pas d'espace :
Code:
Function TTotal3(Terme1 As Range, Terme2 As Range)

Dim Tab1, Tab2
Tab1 = Split(Terme1, "-")
Tab2 = Split(Terme2, "-")
TTotal3 = "[" & CDbl(Right(Tab1(0), Len(Tab1(0)) - 1)) + CDbl(Right(Tab2(0), Len(Tab2(0)) - 1)) & "-" & _
          CDbl(Left(Tab1(1), Len(Tab1(1)) - 1)) + CDbl(Left(Tab2(1), Len(Tab2(1)) - 1)) & "]"

End Function
A+
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 811
dernier inscrit
caroline29260