problème de chiffres significatifs

problème de chiffres significatifs - VB/VBA/VBS - Programmation

Marsh Posté le 10-05-2006 à 08:30:07    

J'ai un problème dans plusieurs macro VBA dans Excel: les chiffres sont du style 3.04999995231628 ou lieu d'être 3.05. Quand je fais tourner la macro en débuggueur, j'ai bien la valeur 3.05 mais quand je fais ThisWorkbook.Sheets("feuille" ).Cells(i, 1) = z (avec z valant 3.05), il me rentre la valeur approchée. Le nombre est déclaré comme étant un single.
 
A la limite, si en partant d'une valeur approchée il m'arrondissait le tout, ça serait normal mais là par contre...
 
Merci d'avance,
 
 
Stef

Reply

Marsh Posté le 10-05-2006 à 08:30:07   

Reply

Marsh Posté le 10-05-2006 à 08:54:38    

Salut scoobidoob,
 
tu peux essayer d'utiliser la fonction rnd() pour arrondir en VBA avant d'affecter ta valeur sur la cellule. Sinon tu peux placer un format sur ta cellule de destination (l'arrondi ne sera que visuel).
@+

Reply

Marsh Posté le 10-05-2006 à 09:16:10    

La commande Rnd n'est pas très appropriée car je veux garder des chiffres significatifs. J'ai effectivement fait l'artifice de l'affichage mais ce qui me gêne ce sont les chiffres qui ne correspondent pas à ce que je veux. Comme on peut le voir, c'est à partir du 10^-8 que ça part en sucette, est-ce une différence de chiffres significatifs entre VBA et Excel?
 
Merci

Reply

Marsh Posté le 10-05-2006 à 09:49:30    

Petite update:
 
Je fais
ThisWorkbook.Sheets("feuille" ).Cells(i, 1) = Round(z, 5) et il me fait toujours la même chose (même en mettant 1 à la place de 5)

Reply

Marsh Posté le 10-05-2006 à 11:02:25    

Peux-tu donner la formule de calcul de z ?
J'aurais tendance à remettre en cause l'affichage du debogueur plutôt que Excel sur ce coup, mais il faudrait faire quelques tests.
Reste que je ne comprends pas pourquoi le Rnd() ne fonctionne pas.


Message édité par tegu le 10-05-2006 à 11:03:02
Reply

Marsh Posté le 10-05-2006 à 13:30:00    

z = zc + i * step
 
avec i variant de 0 à imax, step=0.05 et zc=-16.2

Reply

Marsh Posté le 10-05-2006 à 14:01:06    

Après quelques tests et sans entrer dans les détails, je te conseille d'utiliser un type Double plutôt que Single pour z.
Cela devrait te permettre d'utiliser la fonction Round() pour corriger ton problème.
 
Sinon la cause originelle dérive de l'implémentation même de la gestion des nombres décimaux en VBA (fonctions numériques et types de données)
Concernant les problèmes d'arrondi en VB/VBA, voir
http://ewbi.blogs.com/develops/200 [...] yet_a.html
http://support.microsoft.com/defau [...] -us;194983
http://www.vb-helper.com/howto_vba_round.html
http://www.vbaexpress.com/kb/getarticle.php?kb_id=513
 
Bon courage !

Reply

Marsh Posté le 10-05-2006 à 15:29:31    

J'ai mis des Double à la place des Single et ça marche nickel. C'est bien un problème de transfert entre VBA et Excel... Milles merci pour l'aide ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed