Calcul de pi en VBA


Avec Excel, rien de plus simple que d'obtenir la valeur de pi :
On peut écrire dans une cellule de feuille de calcul : =PI()
Ou bien en VBA, écrire dans une macro : MsgBox WorksheetFunction.Pi

Mais on peut aussi approcher la valeur de pi par la formule :
=4*(1-1/3+1/5-1/7+1/9-1/11+1/13-1/15+1/17-1/19+1/21-1/23+1/25-....)
La précision (dans les limites de ce que Excel sait faire bien sûr) sera d'autant plus grande que le nombres de termes de la série sera plus important.

Par exemple on peut calculer en quelques secondes la somme des 500 000 premiers termes par la fonction :
Function pi(nbmax)
pi = 0
For num = 0 To nbmax
pi = pi + (-1) ^ num * 4 / (2 * num + 1)
Next
End Function

La fonction peut être appelée depuis une feuille de calcul (=pi(500000)) ou bien depuis une macro (MsgBox pi(500000)).
Le calcul est précis jusqu'à la cinquième décimale (pour 500000 itérations).

Une autre solution consiste à utiliser une procédure récursive (qui fait appel à elle-même) :
Function pi(num)
If num = -1 Then
pi = 0
Else
pi = pi(num - 1) + (-1) ^ num * 4 / (2 * num + 1)
End If
End Function

La fonction est appelée depuis une feuille de calcul par =pi(2000) ou depuis une macro par Msgbox pi(2000) pour 2000 itérations.
Inconvénient de la méthode, le nombre d'itérations est limité à quelques milliers par la taille de la mémoire disponible dans Excel.

Au lieu de fixer le nombre de termes de la série, on peut faire le calcul avec un niveau de précision prédéterminé :
Function pi(précision)
pi = 0
num = 0
encore:
pi = pi + (-1) ^ num * 4 / (2 * num + 1)
If ((-1) ^ num * 4 / (2 * num + 1)) ^ 2 >= 0.25 * 10 ^ (-2 * précision) Then
num = num + 1
GoTo encore
End If
pi = WorksheetFunction.Round(pi, précision)
End Function

La fonction est appelé dans une page Excel par =pi(3) ou dans une macro par Msgbox pi(3) pour calculer pi avec 3 chiffres après la virgule.
La précision est estimée par l'écart entre deux valeurs successives.
Le test, à chaque itération, de comparaison de cet écart avec le niveau de précision souhaitée ralentit considérablement le calcul.

Ce genre de calcul itératif peut aussi être fait directement dans une page Excel en utilisant le mode de calcul par itération (Outils / Options / Calcul / Itération) :
cliquez ici pour télécharger un fichier Excel exemple