88 votes

Comment transformer une formule de type chaîne de caractères en une formule "réelle" ?

J'ai 0,4*A1 dans une cellule (sous forme de chaîne). Comment convertir cette "formule de chaîne" en une formule réelle et calculer sa valeur, dans une autre cellule ?

0 votes

Pourriez-vous le faire dans l'autre sens ? Depuis Excel 2013, FORMULATEXT() vous montre la formule qui a créé le résultat. Du point de vue de l'utilisateur final, les valeurs des deux cellules auraient la même apparence que ce que vous semblez demander.

59voto

Fionnuala Points 67259

Evaluate pourrait convenir :

http://www.mrexcel.com/forum/showthread.php?t=62067

Function Eval(Ref As String)
    Application.Volatile
    Eval = Evaluate(Ref)
End Function

22 votes

Soyez prudent si vous utilisez cette approche : Evaluate() par défaut, fonctionnera dans le contexte de la feuille active donc la sortie de quelque chose comme Eval("0.4*A1") changera en fonction de la feuille de calcul active. Vous pouvez utiliser (par exemple) Application.ThisCell.Parent.Evaluate(Ref) pour contraindre le contexte à la feuille contenant l'appel à Eval

0 votes

@PrzemyslawRemin oui, cela fonctionne toujours, au moins jusqu'à Excel 2016.

0 votes

Cela fonctionne pour moi, mais lorsque la chaîne à évaluer était trop longue, cela a commencé à échouer avec le message suivant #VALUE! Je pense que la chaîne doit être strictement inférieure à 256 caractères (Excel 2010).

57voto

Robbie Points 487

J'ai concaténé ma formule comme d'habitude, mais au début j'avais '= au lieu de = .

Ensuite, je copie et colle le texte là où j'en ai besoin. Ensuite, je mets en surbrillance la section sauvegardée en tant que texte et j'appuie sur ctrl + H à trouver et à remplacer.
Je remplace '= con = et toutes mes fonctions sont actives.

Il y a quelques étapes, mais cela évite le VBA.

4 votes

C'est un gagnant ! J'ai utilisé @ parce que ' était un caractère dans mes formules.

14 votes

Vous n'avez pas besoin d'apostrophe : il suffit de remplacer = avec lui-même

1 votes

Brillamment simple ! J'ai trouvé que le fait de trouver et de remplacer le signe = fonctionnait pour moi, car je n'avais pas le caractère ' au début.

15voto

wardw123 Points 427

UPDATE Cela fonctionnait auparavant (en 2007, je crois), mais ne fonctionne plus dans Excel 2013.

EXCEL 2013 :

Ce n'est pas tout à fait la même chose, mais s'il est possible de mettre 0,4 dans une cellule (B1, par exemple), et la valeur du texte A1 dans une autre cellule (C1, par exemple), dans la cellule D1, vous pouvez utiliser =B1*INDIRECT(C1), ce qui entraîne le calcul de 0,4 * la valeur de A1.

Donc, si A1 = 10, vous obtiendrez 0.4*10 = 4 dans la cellule D1. Je mettrai à jour à nouveau si je trouve une meilleure solution pour 2013, et désolé que Microsoft ait détruit la fonctionnalité originale de INDIRECT !

EXCEL version 2007 :

Pour une solution non VBA, utilisez la fonction INDIRECT formule. Elle prend une chaîne de caractères comme argument et la convertit en une référence de cellule.

Par exemple, =0.4*INDIRECT("A1") retournera la valeur de 0,4 * la valeur qui se trouve dans la cellule A1 de cette feuille de calcul.

Si la cellule A1 était, disons, 10, alors =0.4*INDIRECT("A1") retournerait 4.

12voto

iDevlop Points 9770

Juste pour le plaisir, j'ai trouvé un article intéressant ici pour utiliser une fonction d'évaluation en quelque sorte cachée qui existe dans Excel. L'astuce consiste à lui attribuer un nom, et à utiliser ce nom dans vos cellules, car EVALUATE() vous donnerait un message d'erreur s'il était utilisé directement dans une cellule. J'ai essayé et ça marche ! Vous pouvez l'utiliser avec un nom relatif, si vous voulez copier entre les lignes d'une feuille.

0 votes

Intéressant mais ne semble pas s'appliquer aux nouvelles versions d'Excel. Si j'ai bien lu, il s'agissait d'une astuce permettant d'accéder à des comportements supprimés d'Excel des années 1990 dans Excel du début des années 2000, mais dépassés en 2010, 2013, Office 365, etc.

2 votes

Rien n'est "périmé" s'il fonctionne ! 4.0 Le langage macro offre quelques astuces intéressantes.

1 votes

Malheureusement, il n'existe pas de fonction =EVALUATE() dans Excel 2013.

5voto

DrMarbuse Points 712

Je préfère la solution VBA pour les solutions professionnelles.

Avec la partie de la procédure de remplacement dans la question rechercher et remplacer des MOTS ENTIERS UNIQUEMENT J'utilise la procédure VBA suivante :

''
' Evaluate Formula-Text in Excel
'
Function wm_Eval(myFormula As String, ParamArray variablesAndValues() As Variant) As Variant
    Dim i As Long

    '
    ' replace strings by values
    '
    For i = LBound(variablesAndValues) To UBound(variablesAndValues) Step 2
        myFormula = RegExpReplaceWord(myFormula, variablesAndValues(i), variablesAndValues(i + 1))
    Next

    '
    ' internationalisation
    '
    myFormula = Replace(myFormula, Application.ThousandsSeparator, "")
    myFormula = Replace(myFormula, Application.DecimalSeparator, ".")
    myFormula = Replace(myFormula, Application.International(xlListSeparator), ",")

    '
    ' return value
    '
    wm_Eval = Application.Evaluate(myFormula)
End Function

''
' Replace Whole Word
'
' Purpose   : replace [strFind] with [strReplace] in [strSource]
' Comment   : [strFind] can be plain text or a regexp pattern;
'             all occurences of [strFind] are replaced
Public Function RegExpReplaceWord(ByVal strSource As String, _
ByVal strFind As String, _
ByVal strReplace As String) As String

    ' early binding requires reference to Microsoft VBScript
    ' Regular Expressions:
    ' with late binding, no reference needed:
    Dim re As Object
    Set re = CreateObject("VBScript.RegExp")

    re.Global = True
    're.IgnoreCase = True ' <-- case insensitve
    re.Pattern = "\b" & strFind & "\b"
    RegExpReplaceWord = re.Replace(strSource, strReplace)
    Set re = Nothing
End Function

L'utilisation de la procédure dans une feuille Excel ressemble à ceci :

usage in excel-sheet

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X