Format d'une TextBox dans une UserForm

Bonjour,

J'ai un petit problème, j'ai réussis à crée un code pour que sa modifie le format en "euro" d'une TextBox.

Quand je clic sur la TextBox, je rentre un chiffre je fait "Enter" et ok le code fonctionne il change le format...

Mais le problème que j'ai c'est que j'ai aussi un second userform qui s'ouvre via un bouton sur le 1er userform.

Dans le second, j'ai une listbox avec donc la liste de mes produit. Une fois que je clic sur un d'entre eux il me le copie dans la textbox de l'userform1.

Et c'est ici que le format ne change pas ... le textbox reste en format classique...

Le code est placé dans l'userfom principal.

Private Sub TextBox19_AfterUpdate()

With TextBox19

If IsNumeric(TextBox19.Value) Then

.Value = format(.Value, "# ##0.00 EURO")

.ForeColor = IIf(.Value < 0, vbRed, vbRed)

Else

MsgBox "Erreur de saisie", 64, "Saisie incorrecte"

End If

End With

End Sub

Avez vous une idée ? merci

Bonjour,

Tu dois prendre conscience que le type de données des valeurs affectées à une TextBox, de même pour les ComboBox et ListBox, sont par définition de type String, quel que soit le type antérieur à l'affectation dans le contrôle. En outre la fonction Format te permettant de présenter un nombre sous un format particulier, produit du texte.

Quand on extrait les données de ces contrôles, pour les utiliser, les redoter éventuellement d'un format, ou les affecter à Excel, il faut souvent les reconvertir...

Cordialement.

Et oui ok, mais que puis je faire ?

Je suis pas du tout "pro" en vba donc du coup franchement je saurais pas trouver la réponse tout seul :/

Tu testes si le contenu d'une TextBox est numérique. Puis tu veux formater cette valeur en utilisant .Value : c'est CCur(.Value) qu'il te faut formater, soit convertir la valeur de la TextBox en valeur numérique, qui elle pourra être formatée (alors qu'une valeur texte restera inchangée, sauf pour les textes ayant un format de date qui font l'objet de conversion sauvage et posent un autre problème....).

Cordialement.

Merci beaucoup, j'ai essayer mais apparemment je ne trouve pas le bon emplacement pour mettre le CCur(.Value) !?

Je suis "Novice" et la en effet je comprend rien

Reprends ton code :

.Value = format(CCur(.Value), "# ##0.00 EURO")

Là où il te faut un nombre...

Cordialement.

Ok ok parfait, mais sans vous décevoir sa ne fonctionne pas non plus.

Private Sub TextBox19_AfterUpdate()

With TextBox19

If IsNumeric(TextBox19.Value) Then

.Value = format(CCur(.Value), "# ##0.00 EURO")

.ForeColor = IIf(.Value < 0, vbRed, vbRed)

Else

MsgBox "Erreur de saisie", 64, "Saisie incorrecte"

End If

End With

End Sub

53test.xlsm (442.03 Ko)

Désolé, vérification faite, ça fonctionne pour la TextBox. Ton erreur vient d'ailleurs !

Une façon un peu meilleure d'écrire ta procédure :

Private Sub TextBox19_AfterUpdate()
    Dim v@
    With TextBox19
        If IsNumeric(.Value) Then
            v = CCur(.Value)
            .Value = Format(v, "# ##0.00 EURO")
            .ForeColor = IIf(v < 0, vbRed, vbGreen)
        Else
            MsgBox "Erreur de saisie", vbInformation, "Saisie incorrecte"
        End If
    End With
End Sub

NB- Indente ton code si tu veux pouvoir le lire sans effort !

Cordialement.

NB2- Je ne te dirai pas ce que je pense des Userform plus grands que le quart de mon écran...

Le tien dépasse la taille de mon écran !

Mdr j'en doute pas, je suis certains qu'un expert modifierais tout cela en 10x plus petit mais ... bon ...

et puis tout n'est pas encore fini :'( j'essaie de coder et de régler problème par problème mais mon programme prend forme

Bon je vais essayer le code que tu ma donner mnt et voir

C'est toujours pareil ...

Le code OUI fonctionne lorsqu'on entre un chiffre dans la Textbox19 il change le format ok

mais quand je passe de l'userform2 (menu) à l'userform1 (liste produit) et que je clic sur une ligne de ma listbox et qu'il me le copie dans l'userforme2 en textbox19 la il me le copie normalement sans mettre le format...

Voici le code de mon userform

Pour comprendre : Userform1 = la page avec la listbox pour le choix de mes produits

et Userform2 = la 1er page (donc numéroté inverse)

Private Sub ListBox1_Click()

If UserForm2.TextBox17.Value = "" Then

UserForm2.TextBox17.Value = UserForm1.ListBox1.List(ListBox1.ListIndex, 1)

UserForm2.TextBox19.Value = UserForm1.ListBox1.List(ListBox1.ListIndex, 2)

Ah ! Mais là c'est normal ! L'évènement AfterUpdate ne s'est pas produit !

Ce que tu peux essayer, c'est à la suite de l'affectation de la valeur à TextBox19, placer la commande :

UserForm2.TextBox19_AfterUpdate

soit le nom de la procédure pour l'appeler, sans oublier de faire précéder du nom du userform, car tu la lances à partir d'un autre.

Cordialement.

Mdr ... non ...

J'en ai marre je crois que je vais laisser tomber le format car sa me saoule ...

J'ai pas mal de codage à apprendre et à terminer pour que le programme fonctionne

sans pour autant m'attarder sur un code pour le "format" :/

Au temps pour moi ! La procédure est privée, et d'évènement. Il faut la lancer à partir du même module, donc :

Sub MajFormat()
    TextBox19_AfterUpdate
End Sub

Ceci dans userform2 (dans la zone (General) en tête du Module).

Et dans la proc. de Userform1:

    [...]
    UserForm2.MajFormat
    [...]

Cordialement.

Alléluiaaaaa

Je doit juste rajouter "calcule" dans le code pour que mes textboxs calcul et actualise le calcul mais sa fonctionne

Magnifique

Bon maintenant me reste à faire pareil pour 10 lignes

TextBox19, 26, 32, 38, 44, 50, 56, 62, 68, 74

Je fait copier / coller 10x le même code ?

Private Sub TextBox19_AfterUpdate()

Calcule

Dim v@

With TextBox19

If IsNumeric(.Value) Then

v = CCur(.Value)

.Value = format(v, "# ##0.00 EURO")

.ForeColor = IIf(v < 0, vbRed, vbGreen)

Else

MsgBox "Erreur de saisie", vbInformation, "Saisie incorrecte"

End If

End With

End Sub

Private Sub TextBox26_AfterUpdate()

Calcule

Dim v@

With TextBox26

If IsNumeric(.Value) Then

v = CCur(.Value)

.Value = format(v, "# ##0.00 EURO")

.ForeColor = IIf(v < 0, vbRed, vbGreen)

Else

MsgBox "Erreur de saisie", vbInformation, "Saisie incorrecte"

End If

End With

End Sub

ou il y à plus simple ?

Oui ! Procédure commune appelée en lui passant numéro de TextBox.

Dans la proc. commune : Controls("TextBox" & num)

Ou mieux un module de classe, regroupant les TextBox concernés...

Mais je n'interviens pas sur tes Userforms, comme je l'ai dit, je ne peux les afficher en entier, je ne vois pas les boutons, et c'est impraticable de travailler dans ces conditions.

Cordialement.

bonjour

déjà pour les chiffres dans les textbox il faut mettre un keyPress

A voir

Private Sub TextBox18_keyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0: Beep
End Sub

Private Sub TextBox19_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'TRANSFORMER LE POINT PAR UNE VIRGULE
 If KeyAscii = 46 Then KeyAscii = 44
'ACCEPTER UNIQUEMENT UNE SEULE VIRGULE ET LES CHIFFRES ENTRE 0 ET 9
 If InStr("1234567890,", Chr(KeyAscii)) = 0 Or (InStr(TextBox19.Value, ",") <> 0 And Chr(KeyAscii) = ",") _
    Or (TextBox19.SelStart = 0 And Chr(KeyAscii) = ",") Then KeyAscii = 0: Beep
End Sub

A+

Maurice

Ok ok, j'ai fait au plus simple et sa fonctionne

Maintenant je me disais pour que les textbox ce ressemble, de mettre le même format au autres textbox :

Donc pas à celles qui ce copie grâce à l'autre userform, non juste des textbox qui calcul sur l'userform principal)

Private Sub Calcule() 'Calcul des 10 lignes

If ComboBox1.Value <> "" And TextBox18.Value <> "" And TextBox19.Value <> "" Then

TextBox20.Value = Val(TextBox18.Value) * Val(TextBox19.Value) 'Total HTVA

TextBox21.Value = (Val(TextBox20.Value) / 100 * (Val(ComboBox1.Value))) 'Montant de la TVA

TextBox22.Value = CDbl(TextBox20.Value) + CDbl(TextBox21.Value) 'Total TVAC

TextBox20.Value = format(CCur(TextBox20.Value), "# ##0.00 €")

Ici sa fonctionne aussi (comparativement à l'autre code, ici il calcul dans la même userform)

Par contre que faut il rajouter comme code pour changer la couleur également ?

ce que tu ma donner au départ que j'ai essayer de plusieurs façons mais je n'y arrive pas

.ForeColor = IIf(v < 0, vbRed, vbGreen)

Rechercher des sujets similaires à "format textbox userform"