Il est de bon ton de se souhaiter la bonne année. Mais vous, et vous seul, pourrez faire en sorte que cette année soit bonne, meilleure que celle qui vient de s'écouler. Apprenez à ne compter que sur vous, car personne n'est plus qualifié que vous-même pour bâtir, réparer ou améliorer votre propre vie. Personne ne fera les choses à votre place. D'ailleurs, tout ce que les autres peuvent faire, c'est souhaiter que vous le fassiez. Et ne croyez pas que tout ceux qui vous entourent vous apporteront des solutions : certains font juste partie de vos problèmes. Transformez vos résolutions en actes, et dans douze mois, retournez-vous et souriez-vous fièrement : C'était long. C'était difficile. Mais ça y est : 2017 était une bonne année, merci Moi.

Gestion des fonctions intégrées d'Excel dans VBA

Il est très possible d'écrire des fonctions intégrées d'Excel dans des cellules depuis VBA, encore faut il avoir une syntaxe correcte. La voici !

Fonction toute simple, sans argument :
ActiveCell.Formula = "=pi()"

Un seul argument, chiffre constant :
ActiveCell.Formula = "=ROMAN(22)"

L'argument est une référence de cellule :
ActiveCell.Formula = "=ROMAN(B1)"

L'argument est une plage de cellules
ActiveCell.Formula = "=SUM(A1:A3)"

Deux arguments, utilisation de la virgule, référence de cellule
ActiveCell.Formula = "=LEFT(A10,2)"

Plus compliqué : utilisation de guillemets en cas de constante textuelle :
ActiveCell.Formula = "=LEFT(" & """" & "abricot" & """" & ")"

Pour utiliser les fonctions en français : FormulaLocal
ActiveCell.FormulaLocal = "=Somme(A1:A3)"

En cas de FormulaLocal et de plusieurs paramètres : Point virgule :
ActiveCell.FormulaLocal = "=gauche(A10;2)"

On peut utiliser cette technique pour obtenir en VBA le résultat d'une fonction intégrée d'Excel :

Range("IV65536").FormulaLocal = "=ROMAIN(22)"
MsgBox ActiveCell.Value
Range("IV65536").Clear

Une alternative a ce dernier exemple est WorksheetFunction :

MsgBox WorksheetFunction.Roman(22)

La liste des fonctions en anglais se trouve ici

On peut afficher la fonction :
En anglais ou ...
MsgBox ActiveCell.Formula
... en français :
MsgBox ActiveCell.FormulaLocal

Ou la valeur résultante :
MsgBox ActiveCell.Value
ou
MsgBox ActiveCell

Si la cellule contient une date, on peut obtenir le no de série avec
MsgBox ActiveCell.Value2

On peut utiliser la notation RowNoLigneColumnNoColonne :
Ici, A10 :
ActiveCell.FormulaR1C1 = "=LEFT(R10C1,2)"

Avec le pendant en français :
ActiveCell.FormulaR1C1Local = "=Gauche(R10C1;2)"

Cette nouvelle notation permet d'appliquer des références relatives :
Traduction en chiffres romains de la cellule :
- 3 cellules plus haut - 2 cellules plus à droite
ActiveCell.FormulaR1C1 = "=Roman(R[-3]C[2])"

3 cellules plus haut, même colonne :
ActiveCell.FormulaR1C1 = "=Roman(R[-3]C[0])"

Autre notation, plus condensée :
ActiveCell.FormulaR1C1 = "=Roman(R[-3]C)"