Formules et valeurs

Il est possible avec VBA d'assigner des valeurs fixes dans les cellules, mais également des formules, avec des références relatives ou absolues. Cette page a été crée pour Excel 2003, version française.

Pour comprendre, admettons le tableau Excel suivant :

A
B
1
2
 
2
3
 
3
4
 
4
5
 
5    
6    
7    

Et admettons que nous sommes dans la cellule B7.

Si, directement, sans passer par VBA on écrit dans B7 :
=SOMME(A1:A4)
Nous obtenons le résultat : 14. OK...

Mais si nous l'écrivons en anglais
=SUM(A1:A4)

Une rreur survient. On pourrait trouver ça normal, mais vous allez voir qu'avec VBA, un certain jonglage linguistique est nécessaire !

Pour assigner une formule à une cellule, on peut l'écrire comme ceci :

Range("B7") = "=sum($A$1:$A$4)"
ou
Range("B7") = "=SuM(A1:A4)"
Mais pas
Range("B7") = "=SOMME(A1:A4)"

On peut également écrire sous la forme Ligne/Colonne :
Range("B7") = "=SUM(R1C1:R4C1)"
Notez que c'est bien Row1Column1:Row4Column4 et pas Ligne1Colonne1:Ligne4Colonne1

Si on voulait la valeur fixe et pas la formule dans B7, on aurait écrit :
Range("B7") = Application.WorksheetFunction.Sum(Range("A1:A4"))
Mais ce n'est pas le sujet de cette page. Cliquez ici pour plus d'infos sur WorkSheetFunction.

Il est même possible de définir des références relatives, de cette façon :
Range("B7") = "=SUM(R[-6]C[-1]:R[-3]C[-1])"
Ce qui signifie
Somme de (Row -6 Column -1 JUSQUA Row -3 Column -1)
Ce qui donnera depuis B7 donc :
=SOMME(R1C1:R4C1)
Et donc en notation Lettre/Chiffre :
=SOMME(1A:4A)
Inversons ligne et colonne pour retomber sur nos pattes (notation classique) :
=SOMME(A1:A4)

Si on désire absolument insérer une formule en langage d'installation d'Excel (Français donc dans notre cas), il est nécessaire d'utiliser la propriété FormulaLocal :

Range("B7").FormulaLocal = "=SOMME(A1:A4)"
L'instruction suivante génère une erreur #Nom? :
Range("B7") = "=SOMME(A1:A4)"

Lors de la lecture d'une cellule qui contient une fonction, selon la propriété utilisée, nous obtenons des notations différentes. Admettons notre tableau :

A
B
1
2
 
2
3
 
3
4
 
4
5
 
5    
6    
7   =SOMME(A1:A4)

Voici les résultats obtenus :

Msgbox Range("B7") 14
Msgbox Range("B7").Value 14
Msgbox Range("B7").FormulaR1C1 =SUM(R[-6]C[-1]:R[-3]C[-1])
Msgbox Range("B7").FormulaR1C1Local =SOMME(L(-6)C(-1):L(-3)C(-1))
Msgbox Range("B7").Formula =SUM(A1:A4)
Msgbox Range("B7").FormulaLocal =SOMME(A1:A4)

Et si maintenant dans B7 nous avons des valeurs absolues
=SOMME($A$1:$A$4)
Les résultats sont un peu différents :

Msgbox Range("B7") 14
Msgbox Range("B7").Value 14
Msgbox Range("B7").FormulaR1C1 =SUM(R1C1:R4C1)
Msgbox Range("B7").FormulaR1C1Local =SOMME(L1C1:L4C1)
Msgbox Range("B7").Formula =SUM($A$1:$A$4)
Msgbox Range("B7").FormulaLocal =SOMME($A$1:$A$4)

---