Condition et opérateurs logiques

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

J'ai une cellule dont le texte change chaque fois que l'on clique dessus (via une macro événementielle dans le module de feuille).
Le texte qui apparaît est un opérateur logique. Ce peut être : ">", "<", ">=",...
De ce côté-là pas de problème, l'opérateur qui s'inscrit dans la cellule change bien chaque fois que l'on clique sur ladite cellule.
Forcément il y a un compteur ("compt1") qui est lié à chaque clic. Ce compteur bien est déclaré dans un module standard comme "Public".
Dans une macro (module standard) j'ai la sentence suivante :
VB:
If chiffre2 > seuil Then
        blablabla
End If
Ici, l'opérateur logique est ">", mais, suivant celui qui aura été choisi auparavant, je voudrais que cet opérateur prenne sa valeur.
J'ai fait, sans trop de conviction, l'essai suivant :
VB:
op = ">"
If chiffre2 op seuil Then
        blablabla
End If
Échec cuisant !
Par quel moyen peut-on résoudre ce problème ?

Merci d'avance pour tout conseil.
 

Magic_Doctor

XLDnaute Barbatruc
Re : Condition et opérateurs logiques

Bonjour Hasco,

À l'origine j'ai :
- seuil déclaré comme Double
- chiffre2 déclaré comme Variant
- op déclaré comme String

En suivant votre raisonnement, j'ai écrit :
VB:
If Evaluate(CStr(chiffre2) & op & CStr(seuil)) = True Then
     blablabla
End If
Ça ne marche pas.
 
G

Guest

Guest
Re : Condition et opérateurs logiques

Re,

As-tu vu la proposition de Pierre-Jean ?(que je salue grandement au passage?:):):))

Evaluate est une méthode, pas une fonction :

Code:
Evaluate("15>9") ' produira True 
Evaluate("9>15") ' produira false
Evaluate("coucou") ' lèvera une erreur (Type incompatible)  si le nom "coucou" n'existe pas dans le classeur
Voir l'aide excel sur Evaluate

A+
 
Dernière modification par un modérateur:
G

Guest

Guest
Re : Condition et opérateurs logiques

Re,

Il y a trop de formes possibles, pour que sans exemple plus concret je te réponde!

Si tu as des décimaux il faut remplacer les virgules pas des points, un exemple:

Code:
evaluate(replace(cstr(12.12),",",".")& "<15")
donnera vrai (true) donc tu pourras faire:

Code:
If  evaluate(replace(cstr(12.12),",",".")& "<15") Then
   '.....................
End if


A+
 

Magic_Doctor

XLDnaute Barbatruc
Re : Condition et opérateurs logiques

Effectivement, il faut convertir en notation anglo-saxonne. J'ai donc essayé ça :
VB:
If Evaluate(Replace(CStr(chiffre2), ",", ".") & op & Replace(CStr(seuil), ",", ".")) Then
    blablabla
End If
Dommage, ça ne marche toujours pas.
 

Si...

XLDnaute Barbatruc
Re : Condition et opérateurs logiques

salut

en adaptant le type de Nb et Seuil, peut-être ainSi... ?
Code:
Sub V_F()
  Dim Nb$, Seuil$, Condition$
  Nb = "10,5": Nb = Replace(Nb, ",", ".")
  Seuil = "5,2": Seuil = Replace(Seuil, ",", ".")
  Condition = "<"
  For n = 0 To 4
    If Condition = Array("<", ">", ">=", "<=", "<>")(n) Then _
       Resultat = Evaluate(Nb & Condition & Seuil)
  Next
  MsgBox Resultat
End Sub
 

Modeste geedee

XLDnaute Barbatruc
Re : Condition et opérateurs logiques

Bonsour®
Bonjour pierrejean,

Je viens d'essayer ta fonction (certes plus long que la proposition de Hasco) qui marche très bien.

une petite variante de la fonction de PierreJean (Coucou ...:D ce coup-ci c'est moi le coucou !!!)

VB:
Function F_PJ_LW(chiffre As Double, op As String, seuil As Double)
Select Case op
  Case ">"
   resultat = chiffre > seuil
  Case "="
   resultat = chiffre = seuil
  Case "<"
   resultat = chiffre < seuil
  Case "<>"
   resultat = chiffre <> seuil
  Case ">="
   resultat = chiffre >= seuil
  Case "<="
   resultat = chiffre <= seuil
   Case Else
   resultat = "#! opérateur incorrect !"
End Select
F_PJ_LW = resultat
End Function

:rolleyes: sinon pourquoi pas alors simplement :
VB:
Function F_GD_LW(chiffre As Double, op As String, seuil As Double)
' ------ accepte OP : >, <, >= ,<= ,=, <>, + , - , / , * ,  ^
' ------ si entiers accepte également , et E
F_GD_LW = Evaluate(Application.Substitute(chiffre & op & seuil, ",", "."))
End Function

:p Capture.JPG

pour la saisie de cerrtains opérateurs il peut etre nécessaire de saisir préalablement une apostrophe [ ' ]
 

Pièces jointes

  • Capture.JPG
    Capture.JPG
    46.8 KB · Affichages: 97
  • Capture.JPG
    Capture.JPG
    46.8 KB · Affichages: 90
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Re : Condition et opérateurs logiques

Bonjour Modeste geedee,

Pas pu répondre avant.
Et bien voilà, on pouvait y arriver sans réflexions inutiles.
La phrase "magique" est donc :
VB:
If Evaluate(Application.Substitute(chiffre2 & op & seuil, ",", ".")) = True Then
    blablabla
End If
Donc, pas besoin de fonction, on la place directement dans la macro.

¡Muchas gracias y hasta la vista!
 

Discussions similaires

Réponses
3
Affichages
834

Statistiques des forums

Discussions
312 429
Messages
2 088 351
Membres
103 824
dernier inscrit
frederic.marien@proximus.