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

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.
 
G

Guest

Guest
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+
 

pierrejean

XLDnaute Barbatruc
Re : Condition et opérateurs logiques

Bonjour Magic_Doctor

Salut Hasco

Un essai un peu bourrin mais qui peut être adapté et utilisable en Vba comme en fonction personnalisée
 

Pièces jointes

  • conditions.xlsm
    14.3 KB · Affichages: 55

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 ... 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: 98
  • Capture.JPG
    46.8 KB · Affichages: 91
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
856
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…