Son rôle
Récupérer le reste d'une division.
= MOD( Nombre ; Diviseur )
- Nombre : Le nombre à diviser pour obtenir le reste.
- Diviseur : Le valeur par lequel vous souhaitez diviser Nombre.
Elle fonctionne !
Quel est le reste de la division de 11 par 4 ?
= MOD( 11 ; 4 ) ' => 3
C'est le bon résultat :
Le résultat de la division est 2 avec un reste de 3 (4 x 2 + 3 = 11).
Passons du coté obscure !
= MOD( -11 ; 4 ) ' => 1 !
Ce n'est pas le résultat attendu !
Comment est calculé ce reste ?
= Nombre - Diviseur * ENT( Nombre / Diviseur )
Exemple avec une valeur positive
Le reste de la division de 11 par 4.
= 11 - 4 * ENT( 11 / 4 )
= 11 - 4 * ENT( 2,75 )
= 11 - 4 * 2
= 11 - 8
= 3
C'est le bon résultat.
Exemple avec une valeur négative
Le reste de la division de -11 par 4.
= -11 - 4 * ENT( -11 / 4 )
= -11 - 4 * ENT( -2,75 )
= -11 - 4 * -3
= -11 + 12
= 1
Le problème vient ici de la fonction ENT car ENT( -2,75 ) = -3 et non -2 ! (Voir Comment arrondir des nombres de mille et une façons dans Excel)
Mais en réalité ce n'est pas faux !
= -11 / 4
> est égale à -2 et un reste de -3 (-2 * 4 -3 = -11).
> est aussi égale à -3 et un reste de +1 (-3 * 4 + 1 = -11). !
Ce n'est simplement pas la forme "classique".
Voir la section Entiers relatifs de la page Reste — Wikipédia (wikipedia.org).
Une solution
Faire attention à la concordance des signes
Il faut que le Diviseur soit du même signe que le Nombre
Le reste de la division de -11 par -4.
= -11 - (-4) * ENT( -11 / -4 )
= -11 + 4 * ENT( 2,75 )
= -11 + 4 * 2
= -11 + 8
= -3
= MOD( -11 ; -4 ) ' => 3
Comment faire si je ne connais pas le signe de Nombre ?
=SI( Nombre ; MOD( Nombre ; Diviseur * SIGNE(Nombre)) ; 0 )
- * SIGNE(Nombre) permet d'adapter le signe ( SIGNE(-4) = -1 et SIGNE(4) = 1).
- Mais SIGNE(0)=0 ce qui est problématique d'où la fonction SI.
Autre solution, utiliser TRONQUE à la place de ENT
= Nombre - Diviseur * TRONQUE( Nombre / Diviseur)
= 11 - 4 * TRONQUE( 11 / 4 )
= 11 - 4 * TRONQUE( 2,75 )
= 11 - 4 * 2
= 11 - 8
= 3
= -11 - 4 * TRONQUE( -11 / 4 )
= -11 - 4 * TRONQUE( -2,75 )
= -11 - 4 * -2
= -11 + 8
= -3
Autre problématique avec MOD
Elle est impactée par le problème des calculs en virgule flottante.
=MOD(4,2 ; 0,6)=0 renvoie FAUX !!!
En revanche
=(4,2-0,6*TRONQUE(4,2/0,6))=0 renvoie VRAI
(Rappel : 0,6 * 7 = 4,2 =>Donc le reste est bien égale à 0 !)
Voir Scoop : Excel ne sait pas faire de simple soustraction !
Merci pour votre attention bienveillante.