VBA : opérateur de comparaison variable

dionys0s

XLDnaute Impliqué
Bonjour le forum

j'aurais souhaité savoir s'il était possible de mettre en variable un opérateur de comparaison dans VBA.

Par exemple, j'ai une variable booléenne qui est fixée en fonction de la comparaison de 2 variables entre elle, et cet opérateur n'est pas forcément le signe "=". Il peut s'agir du "=", mais aussi des opérateurs "<>", "<=", ">" et ">=".
Pour le moment, j'ai mon opérateur dans une variable texte et j'utilise un Select Case pour comparer mes variables. Ça donne un truc dans ce genre :

VB:
Public Function Comparer2Var(byVal Var1 As Variant, byVal Var2 As Variant, byVal Operateur As String) As Boolean

  Select Case Operateur
    Case "<>": Comparer2Var = Var1 <> Var2
    Case "=": Comparer2Var = Var1 = Var2
    Case "<": Comparer2Var = Var1 < Var2
    Case "<=": Comparer2Var = Var1 <= Var2
    Case ">": Comparer2Var = Var1 > Var2
    Case ">=": Comparer2Var = Var1 >= Var2
  End Select

End Function

Je me demandais s'il existait une possibilité d'écriture du genre :
VB:
Public Function Comparer2Var(byVal Var1 As Variant, byVal Var2 As Variant, byVal Operateur As TypeQueJeConnaisPas) As Boolean

  Comparer2Var = Var1 Operator Var2

End Function
ou
VB:
Public Function Comparer2Var(byVal Var1 As Variant, byVal Var2 As Variant, byVal idOperateur As Integer) As Boolean

  Comparer2Var = Var1 FonctionIntegreeXL(idOperator) Var2

End Function

D'avance merci pour votre aide :)
 

dionys0s

XLDnaute Impliqué
Re : VBA : opérateur de comparaison variable

Bonjour vgendron

MERCI !!!!!!! C'est simplissime du coup !

VB:
Public Function ComparVar(ByVal Var1 As Variant, ByVal Var2 As Variant, ByVal Operateur As String) As Boolean

  ComparVar = Evaluate(Var1 & Operateur & Var2)

End Function
Seul bémol : ça ne fonctionne qu'avec des entiers.
Une idée pour que ça fonctionne avec des variables String, Single, Double etc. ?
 

pascal82

XLDnaute Occasionnel
Re : VBA : opérateur de comparaison variable

Bonjour,

Code a tester

Cordialement



VB:
Sub test()
VarO = Split("* - + /")
VarC = Split("< > =")
For kC = 0 To 2
For kO = 0 To 3
a = 5
b = 2
Expression = a & VarO(kO) & b
Comparaison = Expression & VarC(kC) & 10
result = Evaluate(Comparaison)
MsgBox Comparaison & VarC(2) & result
Next
Next
End Sub
 

job75

XLDnaute Barbatruc
Re : VBA : opérateur de comparaison variable

Bonjour dionysos, vgendron, pascal82,

Lancez la Sub :

Code:
Function ComparVar(ByVal Var1 As Variant, ByVal Var2 As Variant, ByVal Operateur As String) As Boolean

If IsNumeric(Var1) Then Var1 = Replace(Var1, ",", ".") Else Var1 = """" & Var1 & """"
If IsNumeric(Var2) Then Var2 = Replace(Var2, ",", ".") Else Var2 = """" & Var2 & """"

ComparVar = Evaluate(Var1 & Operateur & Var2)

End Function

Sub Compare()
MsgBox ComparVar("a", "b", "<=")
MsgBox ComparVar(1.1, 1, ">")
End Sub
 

dionys0s

XLDnaute Impliqué
Re : VBA : opérateur de comparaison variable

Re le forum,

Arf... bon et bien après tests, ça marche très bien, mais c'est environ 17 fois plus rapide d'utiliser le select case que d'utiliser la fonction Evaluate. Je voulais gagner du temps, mais c'est raté. Merci quand même, j'ai appris, et c'est le plus important :)
 

Discussions similaires

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote