Problème d'arrondi en vba

J

JCA06

Guest
Bonsoir le Forum et bonsoir @+Thierry que j'ai vu dans les parages !

Cela fait un bon moment que je viens moins régulièrement sur le forum, par manque de temps souvent, ou parce que les questions sont trop difficiles pour que j'y réponde, mais comme je me remets dans du vba, forcément...

Mon soucis est que j'ai besoin d'une valeur arrondie que je n'arrive pas à obtenir.

Le principe est d'appliquer un taux d'augmentation à un barème existant :
- dans un USF je récupère les valeurs de l'Ancien barème (Axxx)
- je demande les Variations en pourcentages (Vxxx)
- je calcule les Nouvelles valeurs avec la formule suivante :
Nxx = Round(Axx * (1 + Vxx / 100), 2)
- je présente cette valeur calculée dans une autre txtbox :
TextBox9.Value = Format(Nxx, "# ##0.00")
- puis en cliquant sur un Commandbutton je valide et j'envoie la valeur dans ma feuille :
.Range("C" & L).Value = CSng(TextBox9)
ou même de cette façon :
.Range("C" & L).Value = Round(CSng(TextBox9), 2)

Et pourtant, la valeur que je récupère dans ma cellule n'est pas arrondie !

Merci pour votre aide !
 
@

@+Thierry

Guest
onsoir Jean Charles, le Forum

L'ambiance café fait d'Excellentes Andouillettes "5 A" (pour les connaisseurs) !!!

Tu vas bien j'espère ?

Bon pour ton problème, je pense que tu dois conserver ta valeur dans la variable "Nxx" et ne plus essayer ensuite de récupérer le résultat qui a été expédié dans la TextBox9... En effet la mise en format risque de te faire faire perdre la valeur réélle numérique...

Donc si Nxx est intialisée dans une autre procédure que celle qui va lancer l'écriture en Range("C" & L) il te faudra la déclarer Public soit au niveau Private Module de ton UserForm (Private Nxx As Double en Top du Private Module).... Soit en Plublic réélle pour toput le projet (Public Nxx As Double en Top d'un Module Standard eg: "Module1")

Il est à noter que la portée et la durée de vie de cette variable sera étendue, et par conséquent il se peut que tu aies aussi le besoin de la ré-initiliser à zéro à un moment ou un autre (Nxx = 0)

D'autre part, je n'utilise jamais des Varibles numériques de type Single comme tu as pu voir je passe tout en Double, j'ai déjà eu des erreurs de calculs sur décimale avec les Singles, donc je te conseille de faire de même et tampi pour les 64 Bits au lieu des 32...

Voilà, je pense qu'avec ces deux méthodes, tu devrais avoir un résultat plus cohérent... N'oublies pas, aussi que si besoin tu as RoundUp, ou RoundDown, mais non-applicable directement, il faut passer par "WorkSheetFunction" :

.Range("C" & L).Value = Application.WorksheetFunction.RoundUp(nxx, 2)

Ah oui un autre astuce si tu veux aussi c'est d'utiliser la Fonction Val si vraiment tu veux récupérer la valeur d'une TextBox formattée en text :

.Range("C" & L).Value = Val(TextBox9)

Mais l'aide dit pour Val :
:La fonction Val ne reconnaît que le point comme séparateur décimal (.). Lors de l'utilisation d'autres séparateurs décimaux (applications internationales, par exemple), convertissez la chaîne en nombre à l'aide de la fonction CDbl....

En partant de ce principe tu peux te tenter d'essayer aussi :

.Range("C" & L).Value = CDbl(TextBox9)

Et donc on en revient à une varaible de type Double...

Voilà, encore un post interminable !!!

Je profite de l'occasion pour te/vous souhaiter à tous et toutes un bon Noël ...



(uniquement à Monte Carlo !!!!)​

@+Thierry
 
J

JCA06

Guest
Bonjour Thierry, le Forum,

Je me doutais bien de ton intervention sur ce post !

Merci beaucoup pour ton aide qui montre que je ne suis qu'un amateur. Cela me paraît maintenant évident qu'il fallait récupérer la valeur de la variable. Encore une fois, tu me permets de progresser.

Tu as ce don rare et précieux d'être quelqu'un qui améliore les autres !

Pas étonnant que tu sois dans les bras d'une déesse !

Il faudrat que je patiente jusqu'à l'année prochaine pour avoir le plaisir de voir ton sourire : l'ambiance est fermé cette semaine et moi je suis fermé la semaine prochaine (lol). A moins que tu ais l'occasion de passer au S'N'B aujourd'hui vers 13 h, j'y serai avec ma petite famille.

A bientôt en tout cas, et joyeux noël à tous.

JCA
 

Discussions similaires

Statistiques des forums

Discussions
312 498
Messages
2 088 996
Membres
104 001
dernier inscrit
dessinbecm