OVH Cloud OVH Cloud

Format Nombre TextBox et Feuille

25 réponses
Avatar
Alex
Bonjour =E0 tous,

J'ai tent=E9 de me d=E9brouiller avec les sujets d=E9j=E0 en ligne, mais je=
ne
parviens pas au r=E9sultat souhait=E9. J'ai un textbox (pour une entr=E9e d=
e
montant avec s=E9parateur de milliers et deux chiffres apr=E8s la virgule
sans symbole monaitaire). Ce textbox sert =E0 la creation d'une nouvelle
entr=E9e ou en modificaion d'entr=E9e. J'avais comme parade la
multiplication par 1.00 de la valeur de la textbox, afin que le
montant soit bien reconnu en chiffre et non en texte sur ma feuille de
calcul. Cette solution fonctionne bien en mode cr=E9ation, mais en mode
modification, ce dernier ne fonctionne que si je modifie la textbox.
Par contre, si je ne modifie pas la valeur de la textbox, malgr=E9
l'utilisation de ma "parade", j'obtiens un chiffre reconnu en texte.

C'est pourquoi je d=E9sirerai savoir si quelqu'un pourrait me dire
comment bien parametrer le format nombre d'un TextBox, afin que celui-
ci soit reconnu comme nombre aussi bien dans le textbox que sur la
feuille de calcul ?

Merci par avance de vos r=E9ponse.
Alex

5 réponses

1 2 3
Avatar
michdenis
Bonjour,

Et vive le plaisir des textbox !

La difficulté selon moi, c'est tenté de conserver le même séparateur
décimale tel que présent dans le panneau de configuration de windows.

Si tu cliques sur un bouton pour alimenter ton textbox, tu peux utiliser ceci :
Évidemment, tu dois adapter le nom de la feuille et l'adresse de la cellule.
'-----------------------------------
Private Sub CommandButton1_Click()
SepDec = Format(0, ".")
With Worksheets("Feuil1")
Me.TextBox1 = Format(Application.Substitute _
(.Range("A1"), ".", SepDec), "# ##0.00")
End With
End Sub
'-----------------------------------

Pour retourner la valeur du textbox dans une cellule tout en
contrôlant le format de la cellule
'------------------------------------
Private Sub CommandButton2_Click()
With Me.TextBox1
If IsNumeric(.Text) Then
With Worksheets("Feuil1")
With .Range("A2")
.NumberFormat = "# ##0.00"
.Value = CDbl(Me.TextBox1.Text)
End With
End With
End If
End With
End Sub
'------------------------------------

Maintenant, il y a aussi la saisie fait manuellement par un usager
afin de s'assurer que le bon séparateur décimale est Ok, je te
suggère quelque chose comme :

Dans un module standard, tu copies la fonction suivante :
'---------------------------------------------
Function CheckLaSaisie(Textbox As MSForms.Textbox, ByVal Char As Integer)
SepDec = Format(0, ".")
If Char = 44 Or Char = 46 Then
If InStr(1, Textbox, SepDec, vbTextCompare) > 0 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Asc(SepDec)
End If
Else
If Char < 48 Or Char > 58 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Char
End If
End If
End Function
'---------------------------------------------

Et dans ton formulaire, pour chacun des textbox où tu
entres des données numérique, tu définis ce type d'événement :
'----------------------------------------------
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Pour chacun des textbox contenant des valeurs numériques
'La fonction CheckLaSaisie est dans le module standard
KeyAscii = CheckLaSaisie(TextBox1, KeyAscii)
End Sub
'----------------------------------------------



"Alex" a écrit dans le message de groupe de discussion :

Bonjour à tous,

J'ai tenté de me débrouiller avec les sujets déjà en ligne, mais je ne
parviens pas au résultat souhaité. J'ai un textbox (pour une entrée de
montant avec séparateur de milliers et deux chiffres après la virgule
sans symbole monaitaire). Ce textbox sert à la creation d'une nouvelle
entrée ou en modificaion d'entrée. J'avais comme parade la
multiplication par 1.00 de la valeur de la textbox, afin que le
montant soit bien reconnu en chiffre et non en texte sur ma feuille de
calcul. Cette solution fonctionne bien en mode création, mais en mode
modification, ce dernier ne fonctionne que si je modifie la textbox.
Par contre, si je ne modifie pas la valeur de la textbox, malgré
l'utilisation de ma "parade", j'obtiens un chiffre reconnu en texte.

C'est pourquoi je désirerai savoir si quelqu'un pourrait me dire
comment bien parametrer le format nombre d'un TextBox, afin que celui-
ci soit reconnu comme nombre aussi bien dans le textbox que sur la
feuille de calcul ?

Merci par avance de vos réponse.
Alex
Avatar
Alex
Merci à tous de vos réponses.
Je vais tester les dernières suggestions de Michel, j'espere que cela
va marcher.
En tout cas, c'est comme même un comble pour un tableur de ne pas
reconnaitre par lui meme une valeur numérique GGrrrrr lol
Avatar
Mgr T. Banni
"Alex" a écrit dans le message de news:

Merci à tous de vos réponses.
Je vais tester les dernières suggestions de Michel...alias Denis, pour les
intimes :-)

Mgr T.B.
Avatar
Alex
On 20 jan, 16:35, "michdenis" wrote:
Bonjour,

Et vive le plaisir des textbox !

La difficulté selon moi, c'est tenté de conserver le même séparat eur
décimale tel que présent dans le panneau de configuration de windows.

Si tu cliques sur un bouton pour alimenter ton textbox, tu peux utiliser ceci :
Évidemment, tu dois adapter le nom de la feuille et l'adresse de la cel lule.
'-----------------------------------
Private Sub CommandButton1_Click()
SepDec = Format(0, ".")
With Worksheets("Feuil1")
    Me.TextBox1 = Format(Application.Substitute _
        (.Range("A1"), ".", SepDec), "# ##0.00")
End With
End Sub
'-----------------------------------

Pour retourner la valeur du textbox dans une cellule tout en
contrôlant le format de la cellule
'------------------------------------
Private Sub CommandButton2_Click()
With Me.TextBox1
    If IsNumeric(.Text) Then
        With Worksheets("Feuil1")
            With .Range("A2")
                .NumberFormat = "# ##0.00"
                .Value = CDbl(Me.TextBox1.Text)
            End With
        End With
    End If
End With
End Sub
'------------------------------------

Maintenant, il y a aussi la saisie fait manuellement par un usager
afin de s'assurer que le bon séparateur décimale est Ok, je te
suggère quelque chose comme :

Dans un module standard, tu copies la fonction suivante :
'---------------------------------------------
Function CheckLaSaisie(Textbox As MSForms.Textbox, ByVal Char As Integer)
SepDec = Format(0, ".")
If Char = 44 Or Char = 46 Then
    If InStr(1, Textbox, SepDec, vbTextCompare) > 0 Then
        CheckLaSaisie = 0
    Else
        CheckLaSaisie = Asc(SepDec)
    End If
Else
    If Char < 48 Or Char > 58 Then
        CheckLaSaisie = 0
    Else
        CheckLaSaisie = Char
    End If
End If
End Function
'---------------------------------------------

Et dans ton formulaire, pour chacun des textbox où tu
entres des données numérique, tu définis ce type d'événement :
'----------------------------------------------
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Pour chacun des textbox contenant des valeurs numériques
'La fonction CheckLaSaisie est dans le module standard
KeyAscii = CheckLaSaisie(TextBox1, KeyAscii)
End Sub
'----------------------------------------------

"Alex" a écrit dans le message de groupe de discussi on :

Bonjour à tous,

J'ai tenté de me débrouiller avec les sujets déjà en ligne, mais je ne
parviens pas au résultat souhaité. J'ai un textbox (pour une entrée de
montant avec séparateur de milliers et deux chiffres après la virgule
sans symbole monaitaire). Ce textbox sert à la creation d'une nouvelle
entrée ou en modificaion d'entrée. J'avais comme parade la
multiplication par 1.00 de la valeur de la textbox, afin que le
montant soit bien reconnu en chiffre et non en texte sur ma feuille de
calcul. Cette solution fonctionne bien en mode création, mais en mode
modification, ce dernier ne fonctionne que si je modifie la textbox.
Par contre, si je ne modifie pas la valeur de la textbox, malgré
l'utilisation de ma "parade", j'obtiens un chiffre reconnu en texte.

C'est pourquoi je désirerai savoir si quelqu'un pourrait me dire
comment bien parametrer le format nombre d'un TextBox, afin que celui-
ci soit reconnu comme nombre aussi bien dans le textbox que sur la
feuille de calcul ?

Merci par avance de vos réponse.
Alex



Denis,

Des petites questions par rapport à ton message, afin de pouvoir me
lancer dans les tests :

Si dans Windows, la configuration du clavier est un point, je mets
dans outils/options/International un point aussi ?

Si oui, cela change t'il quelque chose dans ta ligne de commande
SepDec = format(0,".") Dois je remplacer le "." par "," ?

Concernant ton paragraphe :

Maintenant, il y a aussi la saisie fait manuellement par un usager
afin de s'assurer que le bon séparateur décimale est Ok, je te
suggère quelque chose comme :



S'agit il d'une saisie sur la feuille de calcul par elle meme plutot
qu'une saisie par le formulaire ?
Si oui, ayant protégé ma feuille de calcul pour éviter la saisie sans
passer par le Userform, suis je malgré tout dans l'obligation de
saisir cette commande, sachant que dans ta definition de chaque
textbox "numérique" tu renvoie sur le Checklasaisie ?

Merci par avace de ta réponse.

Et encore un grand merci à tous
Avatar
michdenis
Si dans Windows, la configuration du clavier est un point, je mets
dans outils/options/International un point aussi ?
**** Cela n'affecte que l'interface de la feuille de calcul.
Excel va s'organiser avec ça. Ça il s'est faire

Si oui, cela change t'il quelque chose dans ta ligne de commande
SepDec = format(0,".") Dois je remplacer le "." par "," *
****Pourquoi ne pas essayer tel que prescrit...attend d'avoir un
problème et on en reparlera !

Concernant ton paragraphe :

Maintenant, il y a aussi la saisie fait manuellement par un usager
afin de s'assurer que le bon séparateur décimale est Ok, je te
suggère quelque chose comme :



S'agit il d'une saisie sur la feuille de calcul par elle meme plutot
qu'une saisie par le formulaire ?
***** Je ne parle pas de la feuille de calcul. Seulement des textbox
contenus dans un formulaire.
1 2 3