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) |
---