OVH Cloud OVH Cloud

calcul tronqué

33 réponses
Avatar
jobill
Bonjour,
Avec excel 2010 j'obtiens, pour le calcul de
=(99*98*97*96*95*94*93*92*91*90*89*88*87)/(13*12*11*10*9*8*7*6*5*4*3*2*1)
le résultat faux suivant : 6186171974825300
au lieu du résultat juste 6186171974825304. La différence est de 4.
Le format de la cellule est nombre avec 0 décimale, le calcul est identique avec 1 ou plusieurs décimales.
Comment faire pour obtenir un calcul juste?
Cordialement.

3 réponses

1 2 3 4
Avatar
jobill
Le jeudi 09 Avril 2015 à 09:52 par jobill :
Bonjour,
Avec excel 2010 j'obtiens, pour le calcul de
=(99*98*97*96*95*94*93*92*91*90*89*88*87)/(13*12*11*10*9*8*7*6*5*4*3*2*1)
le résultat faux suivant : 6186171974825300
au lieu du résultat juste 6186171974825304. La différence est
de 4.
Le format de la cellule est nombre avec 0 décimale, le calcul est
identique avec 1 ou plusieurs décimales.
Comment faire pour obtenir un calcul juste?
Cordialement.


Merci Isabelle et Jacquouille,

Je viens de seulement lire vos messages car j'étais absent semaine 18. Je suis maintenant capable d'écrire ces macros efficaces et je conserve la dernière.

********************
Voici ce que j'ai écrit pour cette première macro.
J'obtiens le bon résultat dans box puis, en cliquant ok sur la box, le bon résultat s'affiche ensuite en A1


Sub testDIV()
Dim Nombre As String, Diviseur As String, resultat As String
Nombre = "e;385214215596142443743232"e;
Diviseur = "e;62270208"e;
resultat = CDec(Nombre) / Diviseur
Debug.Print resultat
MsgBox resultat
[a1] = resultat
Range("e;A1"e;) = "e;'"e; & resultat
End Sub
**********************************
mais si je supprime la ligne MsgBox resultat
la deuxième macro devient:

Sub testDIV()
Dim Nombre As String, Diviseur As String, resultat As String
Nombre = "e;385214215596142443743232"e;
Diviseur = "e;62270208"e;
resultat = CDec(Nombre) / Diviseur
Debug.Print resultat

[a1] = resultat
Range("e;A1"e;) = "e;'"e; & resultat
End Sub

et le bon résultat s'affiche en A1
**********************************************
en final cette troisième et dernière macro marche aussi très bien (je l'enregistre) et affiche le bon résultat en A1:

Sub testDIV()
Dim Nombre As String, Diviseur As String, resultat As String
Nombre = "e;385214215596142443743232"e;
Diviseur = "e;62270208"e;
resultat = CDec(Nombre) / Diviseur
Debug.Print resultat
Range("e;A1"e;) = "e;'"e; & resultat
End Sub
*******************
Ces tois dernières lignes sont un peu du chinois pour moi
resultat = CDec(Nombre) / Diviseur
Debug.Print resultat
Range("e;A1"e;) = "e;'"e; & resultat
Est il possible de trouver une explication de ces écritures ?

Je suis heureux de pouvoir faire des calculs exacts sur des nombres au delà de 15 chiffres, avec excel 2010, avec cette macro efficace. Grand merci.
Avatar
jobill
Le jeudi 09 Avril 2015 à 09:52 par jobill :
Bonjour,
Avec excel 2010 j'obtiens, pour le calcul de
=(99*98*97*96*95*94*93*92*91*90*89*88*87)/(13*12*11*10*9*8*7*6*5*4*3*2*1)
le résultat faux suivant : 6186171974825300
au lieu du résultat juste 6186171974825304. La différence est
de 4.
Le format de la cellule est nombre avec 0 décimale, le calcul est
identique avec 1 ou plusieurs décimales.
Comment faire pour obtenir un calcul juste?
Cordialement.


il faut lire
Sub testDIV()
Dim Nombre As String, Diviseur As String, resultat As String
Nombre = "385214215596142443743232"
Diviseur = "62270208"
resultat = CDec(Nombre) / Diviseur
Debug.Print resultat
Range("A1") = "'" & resultat
End Sub
Avatar
jobill
Le jeudi 09 Avril 2015 à 09:52 par jobill :
Bonjour,
Avec excel 2010 j'obtiens, pour le calcul de
=(99*98*97*96*95*94*93*92*91*90*89*88*87)/(13*12*11*10*9*8*7*6*5*4*3*2*1)
le résultat faux suivant : 6186171974825300
au lieu du résultat juste 6186171974825304. La différence est
de 4.
Le format de la cellule est nombre avec 0 décimale, le calcul est
identique avec 1 ou plusieurs décimales.
Comment faire pour obtenir un calcul juste?
Cordialement.


Bizarre après le signe " un signe parasite s'ajoute e,


bref je crée une nouvelle macro :

Sub test2DIV()
Dim Nombre As String, Diviseur As String, resultat As String
Nombre = "2293215102242267478449061888000"
Diviseur = "121645100408832000 "
resultat = CDec(Nombre) / Diviseur
Debug.Print resultat
Range("A1") = "'" & resultat
End Sub

mais le résultat qui devrait être 18851684897584 n'est pas atteint...

Erreur d'exécution '6':
Dépassement de capacité

Y a t-il une solution pour surmonter ce blocage ?
1 2 3 4