Bonjour à tous,

Dans le cadre d'une petite explication des tests logiques que l'on peut réaliser sur VBA, je me suis retrouvé à vouloir transformer une string (entrée par l'utilisateur) en formule, mais je n'y arrive pas.

J'ai essayé à l'aide de la fonction Evaluate, celle-ci fonctionne pour les tests de type "1>2" mais pas pour tout ce qui est plus sophistiqué, du type IsNumeric ou not 1>2.

Extrait me posant problème (Le blabla je l'ai écrit à la volée et rapidement, ne pas en tenir compte) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dim Réponse As Variant
Dim Résultat as string
 
Do
    Réponse = InputBox("Entrez votre test logique tel que vous l'écririez dans VBA : " & vbNewLine & vbNewLine _
                & "Exemples d'opérateurs : " & vbNewLine _
                & "<, <=, =, >=, > : Comparaisons numériques" & vbNewLine _
                & "IsNumeric(""Texte"") : Vérifie si le texte est une valeur numérique" & vbNewLine _
                & "IsDate(""Texte"") : idem pour une date " & vbNewLine _
                & "IsEmpty,IsMissing,IsNull,IsObject,IsError,IsArray, Is Nothing" & vbNewLine _
                & """Texte1"" Like ""*Texte2*"" : Vérifie si le texte1 ressemble au texte2" & vbNewLine _
                & "..." & vbNewLine & vbNewLine _
                & "Ces tests peuvent être multiples à l'aide de And / Or " & vbNewLine & vbNewLine _
                & "Pour tester l'inverse, commencer par Not   Exemple : ""Not 5>2""", "Tests logiques", Réponse)
 
    If Not IsError(Evaluate(Réponse)) Then Résultat = Réponse & " = " & Evaluate(Réponse) Else Résultat = "Le test logique """ & Réponse & """ ne fonctionne pas..."
    Debug.Print Evaluate(Réponse)
    If MsgBox(Résultat & vbNewLine & vbNewLine & "Recommencer ?", vbYesNo) = vbNo Then Exit Do
Loop
Avez-vous une idée de comment faire ?
Honnêtement, j'ai cherché mais les résultats sont super divers en cherchant par "turn string into formula" ou autre sur google par exemple.

Merci d'avance !

Quentin.