XL 2010 nombre decimal non pris en compte par if <x< then

adnanoht

XLDnaute Nouveau
Bonjour tous le monde,
j'ai besoin de votre aide. en fait j'ai une code VBA qui permet de selon les valeur saisie sur un textbox d'un userform de remplir et changer la couleur d'une cellule.

If TextBox15.Value >= 6.5 And TextBox15.Value <= 9 Then
Range("n" & dernlign + 14).Value = "OK": Range("n" & dernlign + 14).Interior.Color = RGB(0, 255, 0)
Else: Range("n" & dernlign + 14).Value = "NOK": Range("n" & dernlign + 14).Interior.Color = RGB(255, 96, 0)
End If

par exemple si je tape 6.9 dans le textbox la cellule concerné devrai contenir OK et elle doit être en vert. alors que ce que j'ai c'est le contraire.
donc ce que je comprend c’est que les nombre décimaux ne sont pas pris en compte, c'est correct?
ma question est qu'est ce que je doit changer pour que cela marche?

Merci d'avance!
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

CDBL exige une virgule (pour les claviers francisés) ou Application.DecimalSeparator comme séparateur décimal dans les chaînes de caractères représentant des nombres décimaux.

Si vos textboxes contiennent des chose comme "12.36" => CDBL plante
S'ils contiennent "12,36" => CDBL ne plantera pas.

Contournements possibles:
1 - valeur = Cdbl(replace(TextBox15.Text,".",","))
2 - valeur = Cdbl(Replace(TextBox15.Text,".",application.DecimalSeparator))
3 - remplacer le point par la virgule à la saisie ou sur évènement Exit du textbox

Exemple de remplacement lors de la saisie:
VB:
Private Sub TextBox15_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = 46 Then KeyAscii = 44 'Remplace point par virgule
End Sub

Cordialement
,
 
Dernière édition:

danielco

XLDnaute Accro
@Roblochon :
Bonjour,
CDBL exige une virgule (pour les claviers francisés) ou application.International(xldecimalseparator) comme séparateur décimal dans les chaînes de caractères représentant des nombres décimaux.
A priori, non :
Annotation 2019-10-03 162212.png


Je pense que le problème existe avec Val (que je n'utilise jamais).

Cordialement.

Daniel
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

@danielco, apparemment votre textBox comporte une Virgule donc pas de problème CDBL .

Msgbox Cdbl("12.36") => problème
MsgBox Cdbl("12,36") => pas problème
MsgBox val("12.36") => pas problème
MsgBox val("12,36") => affiche 12 (s'arrête sur le premier caractère non numérique)

Bonne soirée
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Eh bien dans le cas ou la chaîne de caractère contient un séparateur décimal qui n'est pas celui du système(Application.DecimalSeparator) ou tout autre caractère ne pouvant être interprété comme numérique.

Souvent la saisie des nombres se fait avec le pavé numérique et le point du pavé numérique n'est pas toujours remplacé par la virgule (TextBox: non Cellule: oui).

Vous avez essayé les 4 msgBox ?

Cordialement
 

patricktoulon

XLDnaute Barbatruc
re
bonjour
VB:
Private Sub TextBox1_Change()
 TextBox1 = Replace(TextBox1, ".", ",")
End Sub

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 KeyCode = IIf(KeyCode = 110, 188, KeyCode)
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = IIf(KeyAscii = 44, 46, KeyAscii)
End Sub
 

adnanoht

XLDnaute Nouveau
Bonjour,

Merci tous pour votre aide, c'est vraiment magnifique ce forum. J'ai contourné le problème en faisant référence aux cellules où sont saisie ces textbox. c'est à dire en remplaçant dans le code : ça TextBox15.Value par Range("l" & dernlign + 14).Value
C'est un peu de la triche mais ca marche XD

Cordialement,
 

Discussions similaires

Réponses
8
Affichages
616

Statistiques des forums

Discussions
311 711
Messages
2 081 799
Membres
101 818
dernier inscrit
tiftouf5757