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

Microsoft 365 Convertir une chaîne de caractères en formule

manu_tella

XLDnaute Junior
Bonjour à tous,

J’aurais besoin de réaliser la conversion d'une chaîne de caractères de type string en un résultat de type booléen.
A la base la chaîne de caractères est du type

FRUITS = [(banane ET pomme) OU Kiwi]

je remplace les "fruits" par des 0 et des 1 puis les ET par des * et les OU par des +
ce qui me donne a la fin par exemple:
FRUITS = (0 * 1) + 1

le problème c'est que FRUIT est une variable type String et que je souhaiterais la convertir en booléen qui serait le résultats de l’opération faite de 0 et de 1...

j'avoue que je sèche un peu.
d'avance merci pour votre aide.

manu
 
Solution
Je ne vois pas vraiment l'intérêt de cette gymnastique mais bon, testez ces 2 macros :

VB:
Sub Test1()
Dim tablo(1 To 3, 1 To 2), col As Byte, FRUITS As String
'---tableau à renseigner---
tablo(1, 1) = "banane": tablo(1, 2) = 0
tablo(2, 1) = "pomme": tablo(2, 2) = 1
tablo(3, 1) = "Kiwi": tablo(3, 2) = 1
'---concaténations---
For col = 1 To 2
    FRUITS = "(" & tablo(1, col) & IIf(col = 1, " ET ", " * ") & tablo(2, col) & ")" & IIf(col = 1, " OU ", " + ") & tablo(3, col) 'adapter ET/OU
    MsgBox "FRUITS = " & FRUITS, , IIf(col = 1, "1ère", "2ème") & " concaténation"
Next
'---résultat---
MsgBox "FRUITS = " & Evaluate(FRUITS), , "Résultat"
End Sub

Sub Test2()
Dim tablo(1 To 3, 1 To 2), col As Byte, FRUITS As String
'---tableau à...

manu_tella

XLDnaute Junior
Hello,

merci pour la réponse mais en changeant la déclaration, ça ne fonctionne pas.
En fait à la base la variable FRUITS est bien de type string car c'est une chaîne de texte. c'est au fur et à mesure du code que je remplace les noms des fruits par des 1 et des 0 et les AND/OR par des + et des *...

une fois cette conversion réalisée la variable est toujours de type texte et je souhaiterai qu'elle devienne le résultat de l’opération

exemple 1:

FRUITS = [(banane ET pomme) OU Kiwi]
FRUITS = (0 * 1) + 1
FRUITS = 1

exemple 1:

FRUITS = [(raisin OU fraise ) ET Citron]
FRUITS = (1 + 1) * 1
FRUITS = 2

une solution serait de passer dans une feuille, concaténer avec un "=" devant la chaîne de texte mais dans la mesure du possible je préfère m'affranchir de cette étape et tout faire directement dans le code.

manu
 

job75

XLDnaute Barbatruc
Je ne vois pas vraiment l'intérêt de cette gymnastique mais bon, testez ces 2 macros :

VB:
Sub Test1()
Dim tablo(1 To 3, 1 To 2), col As Byte, FRUITS As String
'---tableau à renseigner---
tablo(1, 1) = "banane": tablo(1, 2) = 0
tablo(2, 1) = "pomme": tablo(2, 2) = 1
tablo(3, 1) = "Kiwi": tablo(3, 2) = 1
'---concaténations---
For col = 1 To 2
    FRUITS = "(" & tablo(1, col) & IIf(col = 1, " ET ", " * ") & tablo(2, col) & ")" & IIf(col = 1, " OU ", " + ") & tablo(3, col) 'adapter ET/OU
    MsgBox "FRUITS = " & FRUITS, , IIf(col = 1, "1ère", "2ème") & " concaténation"
Next
'---résultat---
MsgBox "FRUITS = " & Evaluate(FRUITS), , "Résultat"
End Sub

Sub Test2()
Dim tablo(1 To 3, 1 To 2), col As Byte, FRUITS As String
'---tableau à renseigner---
tablo(1, 1) = "raisin": tablo(1, 2) = 1
tablo(2, 1) = "fraise": tablo(2, 2) = 1
tablo(3, 1) = "Citron": tablo(3, 2) = 1
'---concaténations---
For col = 1 To 2
    FRUITS = "(" & tablo(1, col) & IIf(col = 1, " OU ", " + ") & tablo(2, col) & ")" & IIf(col = 1, " ET ", " * ") & tablo(3, col) 'adapter ET/OU
    MsgBox "FRUITS = " & FRUITS, , IIf(col = 1, "1ère", "2ème") & " concaténation"
Next
'---résultat---
MsgBox "FRUITS = " & Evaluate(FRUITS), , "Résultat"
End Sub
On peut bien sûr remplacer les 3 MsgBox par l'entrée des textes et nombre dans 3 cellules.
 

manu_tella

XLDnaute Junior
Re,

En effet vu comme je le présente l’intérêt saute pas aux yeux
@job75, merci infiniment du temps consacré à ma question. La réponse a ma question est dans ton code..... elle m'a sautée aux yeux quand je l'ai lu.

il me suffit de mettre Evaluate(FRUITS) en ayant pris soin de déclarer FRUITS comme variant et ca donne pile poil ce que je voulais...

merci beaucoup

manu
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…