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.

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)

---