XL 2016 calcul dans une textbox

moulou

XLDnaute Nouveau
Bonjour tout le monde.
Je viens de mettre au point un UF avec des textbox pour des opérations de calcul . Le problème c'est que à chaque fois de vider une textbox un message d'erreur
"incompatibilité de type" , je cherche une solution .Merci d'avance.
 

Eric C

XLDnaute Barbatruc
Bonsoir le forum
Bonsoir moulou

Alors là... je n'ai jamais utilisé et ne connais pas la fonction que tu utilises. Après recherches, il semblerait que cette fonction arrondisse à l'entier le plus proche !! ... Je serais tenté de te dire de tenter avec la propriété "Round" mais sans conviction car j'ignore ce que tu désires faire. Désolé


Code:
TextBox16 = Round(TextBox11.Value) / 5000 * 12 + 18
Bonne continuation
@+ Eric c
 

moulou

XLDnaute Nouveau
Bonsoir le forum
Bonsoir Eric
Croyez moi je suis nul en vba malgré plusieurs heures passées à chiffrer et déchiffrer.
la fonction trouver sur internet ,s'assortit bien à mon exemple ;

Pour virer une somme de 10000 da par la poste
la poste prélève ou taxe la somme de 12 da pour chaque somme plafonné à 5000 da + 18 da donc ;
10000/5000=(2 fois 5000)
2*12 =24 da
24 da+18 da=(42 da frais de poste)

la fonction plafonne à 5000
équivalent excel est ; =plafond( 10000,5000)
 

Dudu2

XLDnaute Barbatruc
Bonjour,
Un exemple relevé dans ton code:
VB:
TextBox16 = Application.WorksheetFunction.Ceiling_Math(TextBox11.Value, 5000) / 5000 * 12 + 18
Cette fonction attend un Double en Arg1.
Tu lui passes un String.
Il faut lui passer CDbl(TextBox11.Value) en Arg1 à supposer que TextBox11.Value soit numérique.

D'autre part es-tu sûr de tes regroupements de chiffres dans / 5000 * 12 + 18 ?
La division sera faite par 5000 * 12 (60000) et 18 sera ajouté au résultat final.
Même si les priorités implicites s'appliquent il vaut toujours mieux parenthéser les calculs pour une bonne visibilité.
 

Eric C

XLDnaute Barbatruc
Bonjour le forum
Bonjour moulou
Bonjour Dudu2....;) Oupsssss.... pas rafraîchi en temps utile (Je vois que l'on est Ok sur l'argument n°1).

N'étant pas un expert en Vba, j'ai regardé ta fonction sur le net et il explique l'argument n°1 doit être une variable Double (donc décimale). Pour ta part, tu veux entrer un entier ?
Je continue à regarder dans la journée (beaucoup d'occupations ce w.end).
Bonne journée à toutes & à tous
@+ Eric c
 

moulou

XLDnaute Nouveau
Eric;
Bonjour,
Un exemple relevé dans ton code:
VB:
TextBox16 = Application.WorksheetFunction.Ceiling_Math(TextBox11.Value, 5000) / 5000 * 12 + 18
Cette fonction attend un Double en Arg1.
Tu lui passes un String.
Il faut lui passer CDbl(TextBox11.Value) en Arg1 à supposer que TextBox11.Value soit numérique.

D'autre part es-tu sûr de tes regroupements de chiffres dans / 5000 * 12 + 18 ?
La division sera faite par 5000 * 12 (60000) et 18 sera ajouté au résultat final.
Même si les priorités implicites s'appliquent il vaut toujours mieux parenthéser les calculs pour une bonne visibilité.
Bonjour dudu2,
Au final, q'est ce qu'il faut écrire comme code et formule ?
A bientot.
 

Eric C

XLDnaute Barbatruc
Bonsoir le forum
Bonjour moulou, Dudu2

Je ne sais pas si cela répondra à ta demande mais je mets ce fichier (à améliorer) concocté durant les infos. Il faudra si cela correspond à tes besoins , rendre invisibles les TextBoxs 2 & 3.
VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox2.Value = Round(TextBox1.Value) / 5000
TextBox3.Value = Round(Val(TextBox2.Value))
TextBox4.Value = TextBox3.Value * 12
TextBox5.Value = Val(TextBox1 - TextBox4) - 18
End Sub

Cela fait toujours plaisir de savoir que la contribution a aidé (ou pas).

N'hésitez pas à marquer le sujet comme résolu le cas échéant ou à liker.

Bonne soirée à toutes & àtous
@+ Eric c
 

Pièces jointes

  • Moulou.xlsm
    21.1 KB · Affichages: 4

moulou

XLDnaute Nouveau
Bonjour tout le monde .
Je viens de mettre au point une solution pas très esthétique en ajoutant une condition.
VB:
If TextBox2 = "" Then TextBox2.Value = 0
TextBox16 = Application.WorksheetFunction.Ceiling_Math(TextBox11.Value, 5000) / 5000 * 12 + 18
If TextBox11 = 0 Then TextBox16 = 0

Cela au moins m'evitera le message d'erreur quand la textebox est vidée.
Merci.
 

Pièces jointes

  • F.V CCP - TEST.zip
    16.5 KB · Affichages: 4

Discussions similaires