IfNotNumeric dans Textbox - FJ ci-joint

alex53

XLDnaute Junior
Bonjour le forum,
Voila ce que je veux faire:
rentrer un nombre dans mon USF (avec un controle que la valeur est bien numerique et pas du texte), et que celui ci soit archive dans une feuille excel avec 5 chiffres apres la virgule.

Tout fonctionne bien (voir fichier tres simple ci-joint). Si je rentre simplement le chiffre 5 par exemple, alors j'obtiens 5,00000 dans la feuille excel.

MAIS, quand je veux mettre une virgule, ca ne marche plus!!
2 cas de figure:
-Si je tape un point "." , a cause du Ifnotnumeric je pense il me dit que ce n'est pas possible. Existe-il un moyen de filouter pour que VBA accepte le point ??
-Si je tape une virgule "," alors dans le USF ca marche, mais pas dans la feuille excel (par exemple si je tape 5,5 dans le textbox, je me retrouve avec 5.00000 dans la feuille excel) !!! VBA perd la tete!

Merci d'avance pour votre precieuse aide.

Alex53
 

Pièces jointes

  • aide IfnotNumeric.xlsm
    20.1 KB · Affichages: 72

tototiti2008

XLDnaute Barbatruc
Re : IfNotNumeric dans Textbox - FJ ci-joint

Bonjour alex,

Essaye de remplacer la fonction Val par la fonction CDbl pour le conversion en nombre
Val considère le point comme séparateur décimal, quels que soient les paramètres régionaux de l'ordinateur

dans Textbox1_change, remplace aussi TextBoxPack1 par Textbox1
 

alex53

XLDnaute Junior
Re : IfNotNumeric dans Textbox - FJ ci-joint

Salut tototiti
Merci pour ta reponse.

Effectivement CDbl marche si je tape une virgule. merci.
Cependant, ca ne marche pas avec le point.Il ne le reconnait pas et mon message d'erreur (MsgBox) comme quoi ce n'est pas numerique s'affiche. Sais-tu si il y a une combine pour y remedier?

Alex
 

alex53

XLDnaute Junior
Re : IfNotNumeric dans Textbox - FJ ci-joint

Re-
J'aimerais que le point qui est a cote du 0 sur le clavier numerique soit accepte.
Je ne sais pas si cela change quelque chose mais je travaille sur un clavier americain. Quand je suis sur une feuille excel et que j'appuye sur le point, j'obtiens une virgule. Donc j'imagine que mon separateur decimal est la virgule.

Merci
Alex
 

tototiti2008

XLDnaute Barbatruc
Re : IfNotNumeric dans Textbox - FJ ci-joint

Re,

Dans un soucis de clarté, ce serait bien de n'accepter qu'un séparateur décimal, mais ce n'est qu'un avis
Peut-être remplacer automatiquement les saisies de points par des virgules dans la textbox
Après tout dépend des utilisateurs de ta macro, savoir quel est leur séparateur décimal sur leur ordinateur

essaye avec Cdbl et en ajoutant le code suivant dans le Userform

Code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Remplace la saisie du point par une virgule
    If KeyAscii = 46 Then KeyAscii = 44
End Sub
 

alex53

XLDnaute Junior
Re : IfNotNumeric dans Textbox - FJ ci-joint

Merci tototiti, ca marche Impec !
Comment faites-vous pour avoir reponse a toutes les questions??


Un dernier point: Tu dis:
Dans un soucis de clarté, ce serait bien de n'accepter qu'un séparateur décimal, mais ce n'est qu'un avis

Si je souhaite faire comme cela, comment faire exactement? J'imagine qu'il a un moyen d'appliquer a tout les textbox desirees sans recopier toute la formule a chaque fois pour chaque textbox mais je ne sais pas comment faire :(
Certainement qqchose qui ressemble a

Private Sub TextBox1&TextBox4&TextBox7_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Remplace la saisie du point par une virgule
If KeyAscii = 46 Then KeyAscii = 44
End Sub.

merci pour ce dernier coup de main
Alex
 

Fo_rum

XLDnaute Accro
Re : IfNotNumeric dans Textbox - FJ ci-joint

Bonjour,

à tester dans le module de l'Userform :
Code:
Private Sub CommandButton1_Click()
  Range("A1").Offset(Cells(Rows.Count, 1).End(xlUp).Row) = CDbl(TextBox1)
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If KeyAscii < 46 Or KeyAscii > 57 Or KeyAscii = 47 Then KeyAscii = 0
  If KeyAscii = 46 Or KeyAscii = 44 Then KeyAscii = Asc(Application.International(xlDecimalSeparator))
  'et pour éviter plusieurs , ou ,
  If (KeyAscii = 44 And TextBox1 Like ("*,*")) Or (KeyAscii = 46 And TextBox1 Like ("*.*")) Then KeyAscii = 0
End Sub
 

Gruick

XLDnaute Accro
Re : IfNotNumeric dans Textbox - FJ ci-joint

Bonjour,

J'ai eu ce problème.
Nous autres français séparons nos décimales grâce à la virgule.
Les ricains utilisent le point, et la virgule est considérée en VBA comme séparateur dans les instructions à variables. Elle remplace le point-virgule utilisée dans les formules du tableur.
Alors, VBA devient fou quand il rencontre une virgule hors de son contexte !!!

Mais il y a une solution

Tu tapes ton nombre dans ta TextBox, sans te soucier du point ou de la virgule. Ce sera une virgule si ton entrée est faite avec le pavé numérique.
Il faut rendre numérique la donnée entrée dans ta TextBox. Comment ?
Tout bêtement en lui donnant un format numérique du genre :

Me.TextBox1.Value = Format(Me.TextBox1, "0.00") <---Avec un point

Alors à l'affichage rien ne change, mais le contenu de ta TextBox sera numérique, et pourra servir pour des calculs ultérieurs.

J'espère que cela marchera avec ton fichier.

Gruick
 

laetitia90

XLDnaute Barbatruc
Re : IfNotNumeric dans Textbox - FJ ci-joint

bonjour tous :):):):):):):):)
perso.. je garderais le point avec excel
un exemple avec 5 textboxs
on peut taper que des chiffres point & virgule.. la virgule est transforme en point
voir aussi les options regionales dans windows
je mets pas cdbl mais .value vu qu'il y a pas de calcul
 

Pièces jointes

  • aide IfnotNumeric (1).xls
    62 KB · Affichages: 61

tototiti2008

XLDnaute Barbatruc
Re : IfNotNumeric dans Textbox - FJ ci-joint

Bonjour alex, Bonjour Fo_rum, Bonjour Gruick, Bonjour laetita, :)

@laetita : Dès qu'il y a un module de classe à créer à l'horizon, on voit notre amie laetita ;) :D
Comme je ne suis toujours pas à l'aise avec ça, chapeau bas :)
Un de ces jours, je me mettrais sérieusement aux classes et si j'y comprend quelque choses, j'essaierais de vous faire un topo, juste à trouver le courage.... ;)
 

alex53

XLDnaute Junior
Re : IfNotNumeric dans Textbox - FJ ci-joint

Merci a tous pour vos reponses

laetitia: chez moi ton exemple ne marche pas. Je suis oblife de mettre 5 zero apres la virgule. Je ne peux pas ecrire 5.12000 par exemple

Gruick: ne marche pas non plus car m oblige a prendre le format X,00000

Pour resumer, ce que tototiti m a dit fonctionne:
fonction CDbl + code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Remplace la saisie du point par une virgule
If KeyAscii = 46 Then KeyAscii = 44
End Sub

me derniere question est la suivante:
Le code avec KeyAscii, je suis oblige de le recopie pour chaque textbox ou je souhaite que le point soit remplace par une virgule, ou existe-il une combine pour n ecrire le code qu une seule fois?

Merci
Alex
 

Dranreb

XLDnaute Barbatruc
Re : IfNotNumeric dans Textbox - FJ ci-joint

Bonjour.
Perso j'écris une série de lignes complètement collées pour toute les TextBox:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger): CorrigerTouche(KeyAscii): End Sub
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger): CorrigerTouche(KeyAscii): End Sub
Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger): CorrigerTouche(KeyAscii): End Sub
Et j'écris le code une seule fois dans une Private Sub CorrigerTouche(Touche As MSForms.ReturnInteger)
Cordialement
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia