Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Condition et opérateurs logiques

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 !

Magic_Doctor

XLDnaute Barbatruc
Supporter XLD
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.
 
Re : Condition et opérateurs logiques

Bonjour,

Code:
Dim op As String
Dim chiffre1 As String, Seuil As String
chiffre1 = "3"
Seuil = "2"
op = ">"
Debug.Print Evaluate(chiffre1 & op & Seuil)

A+
 
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.
 
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:
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+
 
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.
 
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
 
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 ...😀 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

🙄 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

😛

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

Pièces jointes

  • Capture.JPG
    46.8 KB · Affichages: 101
  • Capture.JPG
    46.8 KB · Affichages: 94
Dernière édition:
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!
 
- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…