Userform Décimaux ne fonctionnent pas

Bonjour à tous,

J'ai un userform sur lequel je fais une division mais celle-ci ne fonctionne qu'à moitié.

J'ai un nombre qui s'affiche, mais les décimaux sont faux.

Par exemple, lorsque je remplis mon userform avec :

TextBox1 = 1200.5 et TextBox2 = 2 (je souhaite diviser TextBox1 par Textbox2)

J'obtiens dans les textboxs suivantes qui représentent les différents mois de l'année :

TextBoxJanvier = 600 / TextBoxFevrier = 600 / TextboxMars = 0 / etc.

Donc les décimaux ne s'affichent même pas.

Cependant lorsque je remplis TextBox2 = 7, donc que je divise par 7

J'obtiens :

TextBoxJanvier = 171.428571428571 / TextBoxFevrier = 171.428571428571 / TextboxMars = 171.428571428571 / etc.

Ici, des décimaux s'affichent mais ils sont faux. Je suis censé avoir 171.5 dans chacune des 7 textboxes.

J'ai essayé avec Cdec, CSng, et CCur et rien ne fonctionne.

Auriez vous une idée s'il vous plait ?

Merci

Bonjour,

quel code utilisez vous pour renseigner les textbox des mois ?

chez moi si je saisi 1200,5 en textbox1 et 7 en textbox2, l'instruction textbox3 = textbox1 / textbox2 me donne bien 171,5 en textbox3 . Sans utiliser de fonctions de conversion de types de données.

Bonsoir,

Dans les paramètres régionaux pour Excel en français, la ", "est le point décimal et le "." est le séparateur pour l'édition des nombres.

Au niveau VBA, il y a des disparités d'interprétation. Les fonctions VBA : IsNumeric, CDec, … reconnaissent bien la virgule comme point décimal mais il n'en est pas de même pour les constantes où l'on doit revenir au point décimal anglo-saxon = "."

Si on veut donner à une variable x, la valeur 1,53, il faut programmer x = 1.53

Donc utilisez la virgule et non le point comme séparateur décimal (sauf si vous devez affecter une constante à une variable VBA).

Dans votre UserForm, saisissez TextBox1 = 1200,5 et TextBox2 = 2 et au niveau du code cette instruction fonctionnera :

résultat = CDec(Textbox1)/CDec(TextBox2)

Merci pour vos réponses, mais cela ne fonctionne pas.

Car Excel est en anglais, et il me faut un séparateur de décimal en point. Pour des raisons de compatibilité entre ordinateurs, j'ai enlevé tout format nombre dans mon code. Lorsque j'écris un point cela fonctionne, mais cela ne fonctionne pas pour la division.

Je pense que ca doit jouer dans ma division mais y-a-t-il une façon que cela fonctionne ?

Merci pour vos retours,

Je vous mets une partie du code :

Private Sub TextBox17_AfterUpdate()

Dim i As Integer

Dim StartMonth As String, NextMonth As String

Dim Montant As Long

Dim Divide As Integer

Dim ctr As Object

StartMonth = ComboBox4.Value

Montant = Me.TextBox9.Value

Divide = TextBox17.Value

Select Case StartMonth

Case "January"

i = 24

Case "February"

i = 25

Case "March"

i = 26

Case "April"

i = 27

Case "May"

i = 28

Case "June"

i = 29

Case "July"

i = 30

Case "August"

i = 31

Case "September"

i = 32

Case "October"

i = 33

Case "November"

i = 34

Case "December"

i = 35

End Select

NextMonth = i + Divide - 1

If NextMonth >= 36 Then

MsgBox ("This value is not allowed.")

ElseIf Divide > 12 Then

MsgBox ("This value is not allowed.")

Else

For Each ctr In Me.Controls

If ctr.Name Like "TxtBox*" Then

ctr.Value = "0"

End If

Next

For i = i To NextMonth

Controls("TxtBox" & i).Value = Val(Montant / Divide)

Next

End If

TextBox23.Value = TextBox9.Value

End Sub

Bonjour blackbeard75 , Thev & AlgoPlus

Merci pour vos réponses, mais cela ne fonctionne pas.

Car Excel est en anglais, et il me faut un séparateur de décimal en point. Pour des raisons de compatibilité entre ordinateurs, j'ai enlevé tout format nombre dans mon code. Lorsque j'écris un point cela fonctionne, mais cela ne fonctionne pas pour la division.

Je pense que ca doit jouer dans ma division mais y-a-t-il une façon que cela fonctionne ?

Je hais les userform, et voilà encore une raison de les limiter au strict nécessaire, c'est-à-dire pas grand chose pour moi.

Auriez vous une idée s'il vous plait ?

Chaque fois que c'est possible, je dédie une feuille du classeur pour entrer les données, ensuite avec une macro la plus simple possible, je mets à jour la base de données.

Et du coup, tous les formats, toutes les valeurs, toutes les dates sont bien prises en compte, tous les calculs sont faite naturellement sans avoir à les coder en VBA (dans un userform tout est en texte, pfttt).

erreur de manip, désolé

Bonjour Steelson,

Merci pour ce retour, mais tout mon fichier est basé sur des userforms !

Est-ce que quelqu'un d'autre a une idée ?

Merci !

Par exemple, lorsque je remplis mon userform avec :

TextBox1 = 1200.5 et TextBox2 = 2 (je souhaite diviser TextBox1 par Textbox2)

J'obtiens dans les textboxs suivantes qui représentent les différents mois de l'année :

TextBoxJanvier = 600 / TextBoxFevrier = 600 / TextboxMars = 0 / etc.

Dans votre code vous déclarez

Dim Montant As Long  'entier long
Dim Divide As Integer   'entier "court"

lorsque vous initialisez ces variables

Montant = Me.TextBox9.Value
Divide = TextBox17.Value

les valeurs sont tronquées à l'entier . en entrant 1200,5 dans textbox9, vous obtenez 1200 dans Montant

et de plus pour l'affichage du résultat de la division vous utilisez l'instruction:

Controls("TxtBox" & i).Value = Val(Montant / Divide)

dans laquelle Val() arrondit à l'entier

Cependant lorsque je remplis TextBox2 = 7, donc que je divise par 7

J'obtiens :

TextBoxJanvier = 171.428571428571 / TextBoxFevrier = 171.428571428571 / .../...

Pour obtenir ce résultat vous avez dû supprimer la fonction val pour obtenir un résultat décimal.

Et le résultat est faux pour les mêmes raisons que ci dessus

Essayez de déclarer différemment la variable Montant et ça fonctionnera

Dim Montant As Single

A+

Eh bien c'était tout bête ! Cela fonctionne très bien !

Un grand merci à tous et spécialement à toi Algoplus !

Rechercher des sujets similaires à "userform decimaux fonctionnent pas"