Appliquer un format particulier à un TextBox

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Dans un USF j'ai un TextBox dans lequel on rentre des nombres.
Quand ces nombres sont grands, je voudrais que ceux-ci apparaissent avec un point séparateur des milliers.
Par exemple : 100000000 --> 100.000.000 ... c'est plus clair !
Pour une cellule de la feuille on écrirait dans une macro événementielle : cel.NumberFormat = "#,##0.00"
En revanche, comment s'y prendre pour un TextBox d'un USF, si tant est que ce soit possible ?

Merci pour toute réponse.
 

Magic_Doctor

XLDnaute Barbatruc
Re : Appliquer un format particulier à un TextBox

Bonsoir,

Je suis confronté à un nouveau problème. Le code de job marche très bien avec des nombres entiers, mais pas décimaux.
1000000 --> 1.000.000
1000000,63 --> 10.000.063 au lieu de 1.000.000,63

Comment corriger ce problème ?

Merci d'avance.
 

job75

XLDnaute Barbatruc
Re : Appliquer un format particulier à un TextBox

Bonjour Magic_Doctor,

Je ne sais pas ce que tu as fait car sur le fichier joint le code fonctionne très bien chez moi...

A+
 

Pièces jointes

  • Classeur(1).xlsm
    21.5 KB · Affichages: 39
  • Classeur(1).xlsm
    21.5 KB · Affichages: 53

Magic_Doctor

XLDnaute Barbatruc
Re : Appliquer un format particulier à un TextBox

Bonjour job, le forum,

Je reviens sur ce problème de détestable USF (pas pratiques ces machins !!!!).

Au départ, j'avais "bêtement écrit" :
VB:
Private Sub TextBox1_Change() 'où l'on rentre la limite inférieure
  Lim_Inf = TextBox1
End Sub
Si je rentrais, par exemple, 10,5 dans le TextBox, s'affichait : 10.5 en insupportable anglo-saxon
J'essaie de corriger ce problème par :
VB:
Private Sub TextBox1_Change() 'où l'on rentre la limite inférieure
  Lim_Inf = TextBox1
  TextBox1 = Replace(TextBox1, ".", ",")
End Sub
Ça va mieux. Quand je rentre 10,5 s'affiche bien 10,5.
Maintenant je veux rentrer, par exemple, 1000000,5 et faire en sorte que s'affiche 1.000.000,5.
Je rajoute la sentence de job pour voir... :
VB:
Private Sub TextBox1_Change() 'où l'on rentre la limite inférieure
  Lim_Inf = TextBox1
  TextBox1 = Replace(TextBox1, ".", ",")
  TextBox1 = Replace(Format(TextBox1, "#,##000"), Chr(160), ".")
End Sub
---> panique à bord.

Ce que je veux obtenir (simple après tout) est-il possible ?
 

sourcier08

XLDnaute Occasionnel
Re : Appliquer un format particulier à un TextBox

Bonjour job75, Magic_Doctor.

Magic_Doctor, le mieux serait peut-être sur la sortie du Textbox, je pense.
On rentre ses chiffres, on appuie sur "Tabulation", qui nous fait quitter la Textbox, et hop, la magie s'opère juste avant de valider par "enter".

Code:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Lim_Inf = TextBox1
  TextBox1 = Replace(TextBox1, ".", ",")
  TextBox1 = Replace(Format(TextBox1, "#,##0.00"), Chr(160), ".")
End Sub
 

job75

XLDnaute Barbatruc
Re : Appliquer un format particulier à un TextBox

Bonjour Magic_Doctor, sourcier08,

Code:
Private Sub CommandButton1_Click()
Lim_Inf = Val(Replace(TextBox1, ",", "."))
TextBox1 = Replace(Format(Lim_Inf, "#,##0.00"), Chr(160), ".")
End Sub
ou bien :

Code:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Lim_Inf = Val(Replace(TextBox1, ",", "."))
TextBox1 = Replace(Format(Lim_Inf, "#,##0.00"), Chr(160), ".")
End Sub
fonctionnent quel que soit le séparateur décimal utilisé dans TextBox1 ou sur l'ordi.

A+
 

Magic_Doctor

XLDnaute Barbatruc
Re : Appliquer un format particulier à un TextBox

Bonjour job, sourcier08,

Un peu déconcertant ce truc-là. Pourtant ce devrait être aussi simple que pour une cellule...

Si j'écris :
VB:
Private Sub TextBox1_Change()
  On Error Resume Next 'évite pb si on vide le TextBox
  Lim_Sup = TextBox1
  TextBox1 = Replace(Format(TextBox1, "#,##0"), Chr(160), ".")
End Sub
Ça marche très bien (le nombre dans le TextBox se formate au fur et à mesure de son introduction, ce qui est l'idéal), mais tant que l'on n'introduit pas de virgule. En somme, le nombre doit rester entier.
Si j'écris :
VB:
Private Sub TextBox1_Change()
  On Error Resume Next 'évite pb si on vide le TextBox
  Lim_Sup = TextBox1
  TextBox1 = Replace(TextBox1, ".", ",")
End Sub
Ça marche très bien pour les chiffres décimaux.
En revanche, impossible de satisfaire les 2 conditions (mise en forme avec pointeur des milliers + possibilité de chiffres décimaux avec une virgule et non pas un point comme chez ceux qui font toujours tout à l'envers...) en écrivant :
VB:
Private Sub TextBox1_Change()
  On Error Resume Next 'évite pb si on vide le TextBox
  Lim_Sup = TextBox1
  TextBox1 = Replace(TextBox1, ".", ",")
  TextBox1 = Replace(Format(TextBox1, "#,##0"), Chr(160), ".")
End Sub
Résultat bizarre...

Il est vrai que me suis laissé attraper par "TextBox1_Change" qui est l'option par défaut quand on attribue une macro à un TextBox. Je ne maîtrise pas toutes les subtilités entre "Change", "Exit", "Enter"...
Je rectifie en écrivant la proposition de sourcier08 :
VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'sourcier08
On Error Resume Next 'évite pb si on vide le TextBox
Lim_Inf = TextBox1
  TextBox1 = Replace(TextBox1, ".", ",")
  TextBox1 = Replace(Format(TextBox1, "#,##0.00"), Chr(160), ".")
End Sub
Ça marche, c'est, disons, moins instantané qu'avec "Change", mais les 2 conditions sont satisfaites seulement après avoir validé (ENTER) le TextBox.

J'essaie, enfin, la solution de job :
VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'job75
On Error Resume Next 'évite pb si on vide le TextBox
Lim_Inf = Val(Replace(TextBox1, ",", "."))
TextBox1 = Replace(Format(Lim_Inf, "#,##0.00"), Chr(160), ".")
End Sub
Ça marche avec le pointeur de milliers, mais pas avec les décimaux qui sont tronqués en entiers.

J'en déduis que les USF devraient être sérieusement améliorés par l'armada de programmeurs chez Microsoft...

Mais le mieux est un bon exemple, ci-joint le fameux USF.

En tout cas merci pour tous vos conseils.

PS : attention, pour que l'USF fonctionne correctement :
- sur Excel 2010 il faut avoir coché l'option*Accès approuvé au modèle d'objet du projet VBA*(onglet Fichier-Options-Centre de gestion de la confidentialité-Paramètres...-Paramètres des macros)
- sur Excel 2003 il faut avoir coché l'option*Faire confiance au projet Visual Basic*(menu Outils-Macro-Sécurité-Editeurs approuvés).

C'est tordu mais c'est comme ça.

Les valeurs entrées dans l'USF (TextBoxs & ComboBox) sont gardées en mémoire, de telle sorte qu'il n'y a pas à les réintroduire à chaque ouverture de l'USF (merci job !). Un impératif qui, curieusement, ne passionne pas grand monde...
 

Pièces jointes

  • TextBox Orchiclaste.xlsm
    80.8 KB · Affichages: 38
  • TextBox Orchiclaste.xlsm
    80.8 KB · Affichages: 30

job75

XLDnaute Barbatruc
Re : Appliquer un format particulier à un TextBox

Re,

J'essaie, enfin, la solution de job :

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'job75
On Error Resume Next 'évite pb si on vide le TextBox
Lim_Inf = Val(Replace(TextBox1, ",", "."))
TextBox1 = Replace(Format(Lim_Inf, "#,##0.00"), Chr(160), ".")
End Sub

Ça marche avec le pointeur de milliers, mais pas avec les décimaux qui sont tronqués en entiers.

Ne raconte pas n'importe quoi... Et ton On Error Resume Next ne sert strictement à rien.

Edit : si tu veux afficher toutes les décimales entrées :

Code:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim t$, dec%
t = Replace(TextBox1, ",", ".")
dec = Len(t) - InStr(t, ".")
Lim_Inf = Val(t)
TextBox1 = Replace(Format(Lim_Inf, "#,##0." & String(dec, "0")), Chr(160), ".")
End Sub
Il me semble qu'on a déjà vu un truc comme ça sur un autre fil.

A+
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Re : Appliquer un format particulier à un TextBox

¡Che, job no hay que enojarse!

Tu as raison pour l'inutilité de "On Error Resume Next" pour ta routine (je viens de vérifier). En revanche, pour celle de sourcier08, si on vide le TextBox --> Pb.
Maintenant je rentre dans le TextBox2 (celui de ta routine) 2833,63 --> 2834,00 | 2833,12 --> 2833,00
Les décimales ne s'affichent pas et le chiffre est arrondi.
Enfin, chez moi ça se passe comme ça.
Peut-être que le problème vient de ma version d'Excel.
 

Discussions similaires

Statistiques des forums

Discussions
312 310
Messages
2 087 113
Membres
103 476
dernier inscrit
achref att