Problème de saisie valeur numérique dans textbox

Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022 - 5 oct. 2015 à 14:47
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 6 oct. 2015 à 00:07
Bonjour à tous,

J'aimerais remplir une base de données depuis une Userform.
J'utilise des textbox pour récupérer les valeurs dont j'ai besoin.
Pour ma colonne montant, que j'ai pris soin de mettre au format monétaire avec symbole, j'aimerais récupérér la valeur de ma textbox n°5:
J'ai donc écrit ceci:

UserForm1.TextBox5.Value = Format(TextBox5.Value, "#.## €")

Range("G" & ligBD).Value = UserForm1.TextBox5


Problème, cela fonctionne si dans ma textbox j'utilise la virgule. Avec le point cela ne fonctionne pas.

Quelqu'un a t-il déjà rencontré le problème? Qqn peut-il m'aiguiller?

Merci d'avance
--

4 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
5 oct. 2015 à 15:40
Bonjour,

A la fin de la saisie tu remplaces le point par la virgule avec la fonction Replace
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 oct. 2015 à 19:04
Bonjour,
1) Si je comprends bien, tu te sers finalement de cette textbox pour renseigner une cellule.
Il n'est dans ce cas pas très adroit de formater la textbox. Préfère formater la cellule elle-même !
2) pourquoi ne pas utiliser tout simplement l'évènement keydown de la textbox concernée pour transformer en "," ton "." ? (ce serait alors vraiment simple).
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 5/10/2015 à 20:45
Regarde ce que fait ce petit exemple tout bête que je vien d'écrire :
Dans cet exemple : une textbox textbox 1 et un bouton de commande, sur une feuille de calcul
Private Sub CommandButton1_Click()
Range("A1").Value =TextBox1.Text
Range("A1").NumberFormat = "0.00 €"
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 44 Then KeyAscii = 46
End Sub

Dans la textbox : ne frappe que le chiffre, sans la monnaie (euro). Fais-le comme tu veux, avec virgule ou point comme décimale
Clique sur Commandbutton1 === >>> constate ...



________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 6/10/2015 à 07:50
et tu peux même perfectionner le contrôle de saisie dans la foulée.
Ainsi, par exemple
Private Sub CommandButton1_Click()
Range("A1").Value = TextBox1.Text
Range("A1").NumberFormat = "0.00 €"
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 44, 46 ' que l'on frappe une virgule ou un point
If InStr(TextBox1.Text, ".") Then 'si déjà un point présent
KeyAscii = 0 'on ne permet pas deux points
Else ' sinon
KeyAscii = 46 'on force le point
End If
Case 48 To 57
'on laisse passer
Case Else
KeyAscii = 0 'on ne laisse pas passer
End Select
End Sub


EDIT IMPORTANT : pourquoi est-il nécessaire d'agir de cette manière (formatage de la cellule et non de la textbox) ? Tout simplement parce que, de cette manière, le contenu de la cellule sera numérique et non une chaîne de caractères. Or, seul un contenu numérique se prêtera à des opérations du tableur ...

J'ajoute par ailleurs que cette solution est valable quelle que soit la machine utilisée (que son séparateur décimal soit le point ou la virgule), puisque la saisie est automatiquement faite avec le point (même si l'on frappe une virgule). Dans la cellule figurera ainsi toujours le séparateur valable sur la machine. L'avantage n'échappera pas ....
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Rejoignez-nous