Excel vba
Résolu
Caféi
-
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Excel vba
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
10 réponses
bonjour
es tu sur que le nombre qui bugge n'est pas un arrondi a 2ch decimaux?
sinon peut être puisque tes nombres ont tous 2 ch decimaux
1. les x100
2. les tranformer en entier
3. faire la somme
4. la diviser par 100
bon courage
es tu sur que le nombre qui bugge n'est pas un arrondi a 2ch decimaux?
sinon peut être puisque tes nombres ont tous 2 ch decimaux
1. les x100
2. les tranformer en entier
3. faire la somme
4. la diviser par 100
bon courage
Bonjour Ccm,
Malheureusement, la solution que tu préconise ne donnerra pas de résultat, c'est un "défaut" d'excel et des MP, rien à faire si ce n'est Round().
Mais bon... je peu avoir manquer un escalier.
Il y a aussi la configuration des cellues avec 2 déc.
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Malheureusement, la solution que tu préconise ne donnerra pas de résultat, c'est un "défaut" d'excel et des MP, rien à faire si ce n'est Round().
Mais bon... je peu avoir manquer un escalier.
Il y a aussi la configuration des cellues avec 2 déc.
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
> re
j'ai essayé ça en travaillant avec le type double, ça marche mais peut etre jusqu'à un certain point ....
A1:A16 formatée a 2 ch decimaux
A16 est le total calculé par excel
A21 n'est pas formatée et ça donne le même resultat
bonne suite
j'ai essayé ça en travaillant avec le type double, ça marche mais peut etre jusqu'à un certain point ....
A1:A16 formatée a 2 ch decimaux
A16 est le total calculé par excel
A21 n'est pas formatée et ça donne le même resultat
Private Sub CommandButton1_Click() Dim cc s Long Dim cs As Double Dim tots As Double Dim tot As Long tot = 0 For li = 1 To 15 cs = Cells(li, 1) cc = Int(Round(100 * cs, 2)) tot = tot + cc Next li tots = Round(tot / 100, 2) Range("A21").Value = tots End Sub
bonne suite
Bonjour,
La solution de ccm81 me semble être la bonne : il suffit d'utiliser le type Double pour TableauCAPays :
Dim TableauCAPays(n) as double
Par exemple si on place tes valeurs de A1 à A15, le code suivant fonctionne parfaitement :
Patrice
La solution de ccm81 me semble être la bonne : il suffit d'utiliser le type Double pour TableauCAPays :
Dim TableauCAPays(n) as double
Par exemple si on place tes valeurs de A1 à A15, le code suivant fonctionne parfaitement :
Sub test() Dim TableauCAPays(1) As Double Dim ctr As Integer For ctr = 1 To 15 TableauCAPays(1) = TableauCAPays(1) + Cells(ctr, 1).Value Next ctr Cells(16, 2).Value = TableauCAPays(1) End Sub
Patrice
Re,
Ont est (je pense) à côté du sujet, les additions ne génére jamais plus de décimales que celles des nombres additionnés.
En faisant simplement ...
ont optient 1247,27
Non, le probléme est certainement dans ce que contient déjà TableauCAPays(i)
Ou notre ami Caféi nous cache des choses :-D
Ont est (je pense) à côté du sujet, les additions ne génére jamais plus de décimales que celles des nombres additionnés.
En faisant simplement ...
For li = 1 To 15 tots = tots + Cells(li, 1) Next li Range("A21").Value = tots
ont optient 1247,27
Non, le probléme est certainement dans ce que contient déjà TableauCAPays(i)
Ou notre ami Caféi nous cache des choses :-D
Ont diraient que ça avance, :-)
Patrice : Avec Single tu a bien en affichage 1247,2699 mais si tu sélectionne la cellule tu a dans la barre des formules.. 1247,26989746093 !!
Avec un variant et un DOUBLE, 1247,27
C'est encore une des bizarrerie d'excel, un double devrait donner au moins autant de décimales qu'un single or c'est pas le cas.
Caféi : Il te reste 2 solutions.
1°) Déclarer ton tableau en Double
2°) Employer Round(), et si tu veux une fonction Round() avec disposition européenne tu peu employer la fonction de Patrice
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Patrice : Avec Single tu a bien en affichage 1247,2699 mais si tu sélectionne la cellule tu a dans la barre des formules.. 1247,26989746093 !!
Avec un variant et un DOUBLE, 1247,27
C'est encore une des bizarrerie d'excel, un double devrait donner au moins autant de décimales qu'un single or c'est pas le cas.
Caféi : Il te reste 2 solutions.
1°) Déclarer ton tableau en Double
2°) Employer Round(), et si tu veux une fonction Round() avec disposition européenne tu peu employer la fonction de Patrice
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Re,
Ce n'est pas une bizarrerie mais un problème de précision mathématique.
Les variables représentées par des nombres à virgule flottante sont des
approximations plus ou moins précises.
Le type Single utilise 32 bits pour représenter le nombre :
- 1 bit de signe, 8 bits pour l'exposant et 23 bits pour la mantisse
- soit un nombre décimal avec 7 chiffres significatifs
Le type Double utilise 64 bits pour représenter le nombre :
- 1 bit de signe, 11 bits pour l'exposant et 52 bits pour la mantisse
- soit un nombre décimal avec 16 chiffres significatifs
Pour prendre l'exemple actuel 1247,27 s'écrit :
En Single :
01000100100110111110100010100011
soit :
0 10001001 00110111110100010100011
signe : 0
= +
exposant : 10001001
= 137 - 127
= 10
mantisse : [1,]00110111110100010100011
= 1 + 0/2 + 0/4 + 1/8 + 1/16 + 0/32 + 1/64 + ....
= 1,2180370
résultat : + 1,2180370 * 2 ^ 10
= 1247,269888
En Double :
0100000010010011011111010001010001111010111000010100011110101110
soit :
0 10000001001 0011011111010001010001111010111000010100011110101110
signe : 0
= +
exposant : 10000001001
= 1033 - 1023
= 10
mantisse : [1,]0011011111010001010001111010111000010100011110101110
= 1 + 0/2 + 0/4 + 1/8 + 1/16 + 0/32 + 1/64 + ....
= 1,2180371093750000
résultat : + 1,218037109375 * 2 ^ 10
= 1247,27
CQFD
Ce n'est pas une bizarrerie mais un problème de précision mathématique.
Les variables représentées par des nombres à virgule flottante sont des
approximations plus ou moins précises.
Le type Single utilise 32 bits pour représenter le nombre :
- 1 bit de signe, 8 bits pour l'exposant et 23 bits pour la mantisse
- soit un nombre décimal avec 7 chiffres significatifs
Le type Double utilise 64 bits pour représenter le nombre :
- 1 bit de signe, 11 bits pour l'exposant et 52 bits pour la mantisse
- soit un nombre décimal avec 16 chiffres significatifs
Pour prendre l'exemple actuel 1247,27 s'écrit :
En Single :
01000100100110111110100010100011
soit :
0 10001001 00110111110100010100011
signe : 0
= +
exposant : 10001001
= 137 - 127
= 10
mantisse : [1,]00110111110100010100011
= 1 + 0/2 + 0/4 + 1/8 + 1/16 + 0/32 + 1/64 + ....
= 1,2180370
résultat : + 1,2180370 * 2 ^ 10
= 1247,269888
En Double :
0100000010010011011111010001010001111010111000010100011110101110
soit :
0 10000001001 0011011111010001010001111010111000010100011110101110
signe : 0
= +
exposant : 10000001001
= 1033 - 1023
= 10
mantisse : [1,]0011011111010001010001111010111000010100011110101110
= 1 + 0/2 + 0/4 + 1/8 + 1/16 + 0/32 + 1/64 + ....
= 1,2180371093750000
résultat : + 1,218037109375 * 2 ^ 10
= 1247,27
CQFD