TL;DR —
Evaluate("SUM(A1:A10)")remet une formule sous forme de texte au moteur de calcul d'Excel et en renvoie le résultat. Le raccourci[ ]—[A1],[SUM(A1:A10)]— n'est littéralement qu'Evaluatedéguisé. La différence qui compte : les crochets sont du texte figé, vous ne pouvez donc pas y glisser de variable ;Evaluate(aString)accepte une chaîne que vous construisez à l'exécution. Une formule erronée revient sous forme de variant Error, pas de plantage : testez-la donc avecIsErroravant de vous en servir. Sortez-le du tiroir pour exécuter une formule assemblée dans le code — sinon, une simple formule de cellule ouWorksheetFunctionest plus clair.
Sub EvaluateAFormula()
Dim result As Variant
result = Evaluate("SUM(A1:A10)") ' Excel le calcule, comme le ferait une cellule
If IsError(result) Then
MsgBox "That formula did not compute"
Else
MsgBox "Total: " & result
End If
End Sub
Les deux autres outils de cette famille exécutent du code par son nom —
Application.Run exécute une macro,
CallByName exécute un membre. Evaluate complète le tableau en exécutant
une formule : vous remettez à Excel une expression de feuille sous forme de texte et il en calcule la
réponse avec le moteur même dont se servent vos cellules. C'est l'idée unique derrière les trois — une
chaîne devient une action exécutée à l'exécution — et Evaluate en est la version la plus typée Excel,
car la chaîne que vous passez n'est qu'une formule, le langage que vous connaissez déjà depuis la grille.
Le même avertissement se transpose : parce que la formule est du texte, rien ne la vérifie avant qu'elle
ne s'exécute ; ne passez donc à Evaluate qu'une expression que vous avez vous-même construite ou
validée.
Ce que vous allez apprendre
- La place d'
Evaluateaux côtés deApplication.RunetCallByName - Le raccourci entre crochets
[ ]et pourquoi c'est la même méthode - La différence cruciale : les crochets sont du texte figé,
Evaluateaccepte une chaîne construite à l'exécution - Lire le variant Error que renvoie une formule erronée, avec
IsError - Qualifier l'appel vers la bonne feuille pour que les références se résolvent là où vous l'entendez
- Quand utiliser
Evaluateplutôt queWorksheetFunctionou une formule de cellule
Le modèle mental : emprunter le moteur de calcul de la feuille
Tout ce qui, dans Excel, calcule une valeur — chaque =SUM(...), chaque =VLOOKUP(...) — passe par un
unique moteur de calcul. Evaluate est une porte d'entrée vers ce moteur depuis VBA. Vous passez une
formule telle que vous la taperiez dans une cellule (avec ou sans le = de tête), et Excel l'évalue et
vous en donne le résultat sous forme de Variant :
d = Evaluate("TODAY()") ' une date
n = Evaluate("2*PI()*10") ' un nombre
r = Evaluate("VLOOKUP(""Ada"", A:B, 2, 0)") ' une recherche, guillemets doubles pour la chaine
Le déclic mental, c'est que vous n'écrivez pas ici de la logique VBA — vous écrivez une formule Excel
et vous demandez à Excel de l'exécuter. Tout ce qui est valide dans une cellule l'est à l'intérieur
d'Evaluate, y compris des fonctions sans équivalent VBA.
Le raccourci entre crochets n'est qu'Evaluate déguisé
Cela surprend presque tout le monde : la notation [ ] que vous avez vue dans les macros des autres
n'est pas un opérateur spécial. C'est un raccourci pour Evaluate. Ces deux lignes sont identiques :
x = [SUM(A1:A10)] ' raccourci
x = Evaluate("SUM(A1:A10)") ' ce que cela fait reellement
[A1] vaut Evaluate("A1"), [Sales] (une plage nommée) vaut Evaluate("Sales"), et [1+2] vaut
Evaluate("1+2") qui renvoie 3. Voir les crochets comme Evaluate, c'est le déclic qui relie cette page
au reste de la famille : même le raccourci soigné n'est, sous la surface, qu'une indirection pilotée par
une chaîne.
La différence qui compte : les crochets sont figés, Evaluate accepte une variable
Voici la règle unique qui décide de la forme à employer, et le point de confusion le plus fréquent. Le
texte à l'intérieur de [ ] est littéral — vous ne pouvez pas y concaténer de variable, parce que
les crochets ne sont pas une chaîne :
Dim col As String: col = "B"
' FAUX - vous ne pouvez pas construire une expression entre crochets depuis une variable :
' total = [SUM(col & "1:" & col & "10")] ' ne fait pas ce que vous esperez
' CORRECT - construisez la chaine, puis Evaluate-la :
total = Evaluate("SUM(" & col & "1:" & col & "10)") ' SUM(B1:B10)
Le choix est donc mécanique : utilisez [ ] quand la formule entière est une constante que vous
tapez une fois — c'est plus court et cela se lit bien. Utilisez Evaluate(...) dès qu'une partie de la
formule est construite à l'exécution à partir de variables, de valeurs de cellules ou d'une saisie
utilisateur. Voilà toute la différence pratique entre les deux formes, et choisir la forme entre crochets
pour une formule dynamique, c'est la raison pour laquelle on conclut que « les crochets sont cassés »
alors qu'ils sont simplement le mauvais outil pour une variable.
Lire le résultat : une formule erronée renvoie un variant Error
Evaluate ne déclenche pas d'erreur d'exécution quand la formule est fausse — il renvoie un variant
Error, la forme VBA de #NAME?, #REF!, #DIV/0! et consorts. Si vous utilisez le résultat sans le
vérifier, l'erreur se propage en silence :
Dim result As Variant
result = Evaluate("SUM(Nonexistent)") ' renvoie un variant Error, ne plante pas
If IsError(result) Then
MsgBox "Formula error - check the expression"
Else
' utilisation de result sans risque
End If
Protégez toujours une expression construite à l'exécution avec IsError
avant de faire confiance à la valeur. C'est le comportement inverse de
WorksheetFunction, qui déclenche une erreur d'exécution
interceptable en cas d'échec — une différence bonne à connaître au moment de choisir entre les deux.
Qualifier l'appel pour que les références se résolvent là où vous l'entendez
Un Evaluate non qualifié (et tout raccourci [ ]) résout ses références par rapport à la feuille
active. Si la feuille active n'est pas celle que vous visiez, Evaluate("A1") lit la mauvaise cellule
— un bug subtil quand une macro s'exécute depuis une feuille différente de celle sur laquelle le
développeur a fait ses essais. Qualifiez l'appel pour le fixer :
' Resout A1:A10 sur Sheet1 quelle que soit la feuille active :
total = Worksheets("Sheet1").Evaluate("SUM(A1:A10)")
Worksheet.Evaluate et Workbook.Evaluate vous permettent de dire où la formule s'exécute. Se fier à
la feuille active convient pour un coup ponctuel ; pour tout ce qui part en production, qualifiez l'appel
afin qu'il ne dépende pas de ce que l'utilisateur a cliqué en dernier.
Evaluate, WorksheetFunction ou une formule de cellule
Trois façons d'obtenir une valeur calculée, trois métiers. Une formule de cellule convient quand le
résultat a sa place sur la feuille et doit se recalculer — mettez =SUM(A1:A10) dans une cellule.
WorksheetFunction convient quand vous voulez une fonction précise
depuis VBA, avec l'IntelliSense et une erreur propre que vous pouvez intercepter :
WorksheetFunction.Sum(Range("A1:A10")). Evaluate convient quand l'expression elle-même est
dynamique — vous avez construit la chaîne de la formule à l'exécution — ou quand vous avez besoin d'une
fonction de feuille que WorksheetFunction n'expose pas. Si la formule est une constante et que la
fonction existe sur WorksheetFunction, préférez WorksheetFunction ; c'est plus clair et ses erreurs
sont plus faciles à gérer.
Comment ExcelMaster vous aide
Les pièges, ici, sont silencieux : une forme entre crochets qui ignore sans bruit votre variable, un variant Error utilisé comme s'il était un nombre, une référence non qualifiée qui lit la mauvaise feuille. Aucun ne s'annonce.
ExcelMaster vous laisse décrire le
calcul en mots simples — « additionne cette colonne, quelle que soit celle que le rapport a retenue, et
signale-le si la formule échoue » — et il écrit le code Evaluate qui construit la chaîne sans risque,
la vérifie avec IsError et qualifie la feuille. Vous conservez le classeur et le code, et vous évitez
la mauvaise réponse silencieuse.
Questions fréquentes
Que fait Evaluate en VBA ?
Evaluate("expression") transmet une formule de feuille Excel, écrite sous forme de texte, au moteur de
calcul d'Excel et renvoie le résultat calculé sous forme de Variant. Tout ce qui est valide dans une
cellule fonctionne à l'intérieur. Utilisez-le pour exécuter une formule assemblée à l'exécution, ou pour
atteindre une fonction de feuille que WorksheetFunction n'expose pas.
Que signifient les crochets en VBA ?
La notation [ ] est un raccourci pour Evaluate : [A1] vaut Evaluate("A1") et [SUM(A1:A10)] vaut
Evaluate("SUM(A1:A10)"). Elle est plus courte pour les expressions constantes, mais le texte à
l'intérieur est littéral — vous ne pouvez pas concaténer de variable dans les crochets. Dès qu'une partie
de la formule est dynamique, utilisez plutôt la forme complète Evaluate(aString).
Pourquoi ne puis-je pas mettre de variable dans les crochets ?
Parce que [ ] n'est pas une chaîne — c'est du texte figé remis tel quel à Evaluate, si bien que
[col & "1"] ne construit pas de référence à partir de col. Construisez la formule sous forme de
chaîne et passez-la à Evaluate : Evaluate("SUM(" & col & "1:" & col & "10)"). C'est toute la raison
pour laquelle la forme complète existe à côté du raccourci.
Comment vérifier si Evaluate a renvoyé une erreur ?
Evaluate renvoie un variant Error pour une formule erronée plutôt que de déclencher une erreur
d'exécution : testez donc le résultat avec IsError(result) avant de l'utiliser. Cela diffère de
WorksheetFunction, qui déclenche à la place une erreur interceptable
— choisissez selon que vous préférez tester une valeur ou gérer une exception.
Faut-il utiliser Evaluate ou WorksheetFunction ?
Utilisez WorksheetFunction quand la fonction y existe et que la
formule est fixe — elle offre l'IntelliSense et une erreur interceptable. Utilisez Evaluate quand
l'expression est construite à l'exécution, ou quand vous avez besoin d'une fonction de feuille que
WorksheetFunction n'expose pas. Pour une valeur qui doit vivre et se recalculer sur la feuille,
utilisez plutôt une formule de cellule ordinaire que l'une ou l'autre.
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — dernière vérification le 27/09/2026.
Guides associés : VBA Application.Run · VBA CallByName · VBA WorksheetFunction · VBA Range · VBA On Error · VBA Function · VBA Dictionary
