Les grands nombres dans excel
Excel travaille avec des nombres de type Double, sur une précision d'environ 15 chiffres. Il n'y a aucun moyen de le forcer à utiliser une précision supérieure.
Si tu en as vraiment besoin, tu peux te faire aider par le type "Decimal" de VBA, qui autorise une précision d'environ 28 chiffres. Il faudra saisir tous tes grands nombres dans des cellules formatées en texte et faire tous les calculs sur ces nombres par l'intermédiaire de fonctions macro.
1) Tout d'abord il faut saisir tes nombres avec une quote ( ' ) devant pour permettre leur visualisation et éviter la perte de la précision.
2) On utilise le type Decimal pour convertir la chaîne de caractères immanquablement obtenue par la quote. Le type Decimal permet d 'obtenir des nombres sur 12 octets soit environ des nombres au delà des 27 chiffres.
Comme figurant dans le code exemple, on ne peut déclarer immédiatement le type Decimal par Dim x As Decimal (pas bon). Il faut passer par un variant puis le convertir au moyen de CDec soit
Dim x As Variant x = CDec(x) 3)
Dans le code il y une sub (donc sans valeur de retour) qui affiche par MsgBox le résultat du triple et du quart du nombre sélectionné. Il y a aussi des fonctions permettant les opérations de base sur les nombres de plus de 15 chiffres.
A noter que la valeur de retour est une chaîne de caractères pour que le nombre puisse apparaître complet, au niveau de la précison, dans la cellule de réception. Les fonctions ont des arguments Range. Il faut par conséquent leur passer des paramètres Range.
Exemple pour utiliser la fonction DECMultiplier:
Entrez en A1 la valeur '12345678901234567890 (ne pas oublier la quote)
Entrez en B1 le multiplicateur soit la valeur 17 (par exemple)
Entrez en C1 la formule =DECMultiplier(A1;B1)
Le résultat '209876541320987654130 s'affichera en C1 Si #VALEUR! s'affiche il y a un dépassement de capacité.
Quelques exemples de fonctions utilisant le type Decimal
' Addition
Function ADD(Nombre1 As String, Nombre2 As String) As String ADD = CDec(Nombre1) + Nombre2 End Function
' Soustraction
Function subST(Nombre1 As String, Nombre2 As String) As String subST = CDec(Nombre1) - Nombre2 End Function
' Multiplication
Function MULT(Nombre1 As String, Nombre2 As String) As String MULT = CDec(Nombre1) * Nombre2 End Function
'Division
Function DIV(Nombre1 As String, Nombre2 As String) As String DIV = CDec(Nombre1) / Nombre2 End Function
' Modulo
Function MOD2(Nombre As String, Diviseur As String) As String Dim Tmp Tmp = CDec(Nombre) / Diviseur MOD2 = Nombre - CDec(Left(Tmp, InStr(1, Tmp, _ Application.International(xlDecimalSeparator)) - 1)) * Diviseur End Function
' Somme d'une plage
Function SOMME2(Plage As Range) Dim Arr Arr = (Plage) For Each Elt In Arr SOMME2 = CDec(SOMME2) + CDec(Elt) Next SOMME2 = CStr(SOMME2) End Function
Avec par exemple les nombres 123456789012345678901 et 98765432109876543210 saisis en A1 et A2 (formatées en texte), =MOD2(A1;A2) renverra le modulo sur 20 chiffres, 24691356902469135691 (également en format texte).
sub OperationsBigNumber() Dim x As Variant x = ActiveCell If IsEmpty(x) Or _ Not IsNumeric(x) Then exit sub x = CDec(x) MsgBox "le triple de " & x & " est: " & x * 3 MsgBox "le quart de " & x & " est: " & x / 4 end sub
Auteur : Laurent Longre
Mots clefs associés à cette page : nombre, modulo
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

Function MOD2
Bonjour,
Lorsque j'utilise votre fonction MOD2 comme vous le présentez, avec Excel 2010, il donne comme résultat #REF!,
J'ai remplacé le nom de MOD2 par le nom "result"... elle fonctionne.
Je pense que la fonction MOD2 est utilisée par Excel...