Grands nombres dans la fonction MOD (Microsoft Excel)
Cesarettin a noté que la fonction de feuille de calcul MOD ne peut pas produire un résultat lorsque le nombre est évalué est 268 435 456 ou plus grand et le diviseur est 2. Si le nombre est inférieur à cela, il n’y a aucun problème. Par exemple, si la fonction est MOD (268435455, 2), il n’y a pas de problème. Il se demande s’il existe un moyen d’utiliser la fonction MOD avec des nombres plus grands et un diviseur de 2?
Le problème est en fait plus important que ce que propose Cesarettin. Microsoft connaît ce problème; il semble provenir de problèmes avec les formules internes utilisées par MOD. Vous pouvez trouver plus d’informations sur l’erreur ici:
http://support.microsoft.com/kb/119083
Fondamentalement, la fonction MOD renvoie une erreur si le diviseur (le deuxième argument de la fonction MOD), multiplié par 134 217 728, est inférieur ou égal au nombre évalué (le premier argument de la fonction MOD).
Ainsi, le problème se produit lorsque le nombre évalué est 268,435,456 et le diviseur est 2, le nombre évalué est 402,653,184 et le diviseur est 3, le nombre évalué est 536,870,912 et le diviseur est 4, etc.
La solution suggérée par Microsoft est simplement de ne pas utiliser la fonction MOD et de s’appuyer sur la formule suivante:
=number-(INT(number/divisor)*divisor)
Ce n’est cependant pas la seule solution. Vous pouvez également utiliser d’autres approches basées sur des formules. Par exemple:
=MOD(MOD(number,134217728*divisor),divisor)
Cela résoudra pour des nombres plus grands beaucoup plus grands que la limite pour MOD, mais rencontrera théoriquement le même problème lorsque le nombre évalué atteint 134.217.728134.217.728 diviseur. Pour la plupart des utilisations, cette limite est suffisamment grande pour ne jamais être atteinte.
Si vous avez seulement besoin de trouver le module d’un nombre divisé par 2, vous pouvez insérer un chèque dans votre formule de la manière suivante:
=MOD(IF(A1>=268435456,A1-268435456,A1),2)
Cela vérifie si le nombre évalué (dans ce cas, dans la cellule A1) est supérieur à la limite, et si c’est le cas, il soustrait la limite du nombre avant de calculer le module. Vous pouvez également supprimer efficacement la limite MOD en utilisant cette formule:
=MOD(MOD(number,2^16),2))
Cela prend le grand nombre modulo 2 à la puissance 16, puis prend la valeur résultante modulo 2. Si les nombres sont considérés comme binaires, il est facile de voir ce qui se passe. MOD (largenum, 2 ^ 16) supprime simplement tous les bits à gauche du 16e chiffre binaire. Pour modulo 2, seul le chiffre le plus à droite est nécessaire pour déterminer le résultat de toute façon, de sorte que les bits supprimés n’affectent jamais le résultat, quelle que soit la valeur.
Bien sûr, vous pouvez simplement créer votre propre fonction MOD dans VBA et l’utiliser dans vos formules au lieu de la fonction MOD intégrée.
Function DblMod(Dividend, Divisor) ' Declare two double precision variables Dim D1 As Double Dim D2 As Double ' Copy function arguments to local variables D1 = Dividend D2 = Divisor DblMod = D1 Mod D2 End Function
La fonction vous permet simplement de passer deux arguments à la fonction VBA. Il s’appuie ensuite sur la fonction VBA Mod, qui n’a pas la même limitation que la fonction de feuille de calcul MOD.
_Note: _
Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.
lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur]
.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (3302) s’applique à Microsoft Excel 97, 2000, 2002 et 2003.