Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Contrôle de Saisie dans TextBox

4 réponses
Avatar
Pounet95
Bonjour à toutes et tous,
XL2000 XP Pro

Un peu pris par le temps, je serai ravi si quelqu'un avait sous le coude une
fonction en VBA
me permettant de vérifier que ce qui a été saisi dans un textbox :
- est bien un nombre
- que ce nombre est un nombre décimal positif
et dans ce cas que sa structure est conforme à 2 paramètres longueur
totale et nombre de décimale

exemple : function Vérif_Nb(nNbre as Single, nLong as integer, nDecimal as
integer) as boolean
if not isnumeric(nNbre) then Vérif_Nb=false
' et là je ne sais pas trop
'....... donc je vous remercie d'avance pour vos idées
'
end function

Merci encore de vos propositions
--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

4 réponses

Avatar
Pounet95
Re,
J'ai quand même pris le temps d'aller faire mon marché chez Fred*
En m'inspirant de la procédure ValidationSaisiesInputBox.bas, j'ai commis
ceci,
si ça peut servir à quelqu'un ?


Un petit changement par rapport au précédent message : le séparateur
( point ou virgule en fct config micro ) n'est pas inclus dans la longueur


Function Vérifier_Nombre(nNbre As String, nLg As Integer, nDec As Integer)
As Boolean
' contrôle que la saisie du textbox est un numérique dont
' la longueur de la partie entière ajoutée à celle de la partie
décimale <= nLg
' la longueur de la partie entière <= nLg-nDec
' la longueur de la partie décimale <=nDec

Dim i As Integer
Dim ndx As Integer
Dim nEntier As String
Dim nDécimale As String

'le nombre est bien un numérique ?
If Not IsNumeric(nNbre) Then
Vérifier_Nombre = False
Exit Function
End If

'marqué comme décimal ?
ndx = 0
For i = 1 To Len(nNbre)
If Mid(Saisie, i, 1) Like "#" _
Or Mid(nNbre, i, 1) = "." _
Or Mid(nNbre, i, 1) = "," Then
If ndx > 0 Then
'déjà un séparateur !!!
Vérifier_Nombre = False
Exit Function
Else
ndx = i
End If
End If
Next i

'partie entière
If ndx > 0 Then
nEntier = Mid(nNbre, 1, ndx - 1)
nDecimal = Mid(nNbre, ndx + 1, Len(nNbre) - ndx)
Else
nEntier = nNbre
End If
If Len(nEntier) > nLg - nDec Or Len(nDecimal) > nDec Then
Vérifier_Nombre = False
Exit Function
End If

'OK
Vérifier_Nombre = True
End Function

PS : Suis ouvert à toute optimisation ou amélioration de ce code

A vous lire

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"Pounet95" a écrit dans le message de news:

Bonjour à toutes et tous,
XL2000 XP Pro

Un peu pris par le temps, je serai ravi si quelqu'un avait sous le coude
une fonction en VBA
me permettant de vérifier que ce qui a été saisi dans un textbox :
- est bien un nombre
- que ce nombre est un nombre décimal positif
et dans ce cas que sa structure est conforme à 2 paramètres longueur
totale et nombre de décimale

exemple : function Vérif_Nb(nNbre as Single, nLong as integer, nDecimal
as integer) as boolean
if not isnumeric(nNbre) then Vérif_Nbúlse
' et là je ne sais pas trop
'....... donc je vous remercie d'avance pour vos idées
'
end function

Merci encore de vos propositions
--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)



Avatar
michdenis
Bonjour Pounet95,

Pour chacun de tes textbox dans ton formulaire, tu peux utiliser
une ligne de commande comme celle-ci :
A ) le premier caractère doit être le point
B ) un seul point peut être saisi dans le textbox
C ) Seul les chiffres peuvent être saisi après le point
D ) le textbox est limité à 3 digit incluant le point
(le 3 dans la ligne de commande)

'------------------------
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

KeyAscii = CheckTextbox(TextBox1, KeyAscii, 3)

End Sub
'------------------------

à copier dans un module standard ... ou dans ton formulaire !
'------------------------
Function CheckTextbox(ByVal Tbox As MSForms.TextBox, _
ByVal C As Integer, ByVal NbChar As Integer)

If C = 44 Or C = 46 Then C = 46
If InStr(TextBox1, Chr(C)) > 0 Then C = 0
If Len(TextBox1) = 0 And C <> 46 Then C = 0
If (C < 48 Or C > 57) And C <> 46 Then
C = 0
End If
If Len(TextBox1) > NbChar Then C = 0
CheckTextbox = C
End Function
'------------------------


Salutations!





"Pounet95" a écrit dans le message de news:
Bonjour à toutes et tous,
XL2000 XP Pro

Un peu pris par le temps, je serai ravi si quelqu'un avait sous le coude une
fonction en VBA
me permettant de vérifier que ce qui a été saisi dans un textbox :
- est bien un nombre
- que ce nombre est un nombre décimal positif
et dans ce cas que sa structure est conforme à 2 paramètres longueur
totale et nombre de décimale

exemple : function Vérif_Nb(nNbre as Single, nLong as integer, nDecimal as
integer) as boolean
if not isnumeric(nNbre) then Vérif_Nbúlse
' et là je ne sais pas trop
'....... donc je vous remercie d'avance pour vos idées
'
end function

Merci encore de vos propositions
--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)
Avatar
Pounet95
Bonsoir,
Je crois que nous nous sommes croisés car sinon je n'aurais pas mis
ma fonction erronée :o[
Pour le positionnement du séparateur, je me suis planté. Donc à mettre à la
benne.

Je vais profiter de ta procédure, des procédures, devrais-je dire, en
corrigeant car
je me suis mal exprimé dans l'énoncé du problème.
Les paramètres sont :
- nombre décimal ( ou non),
- longueur hors séparateur ,
- nbre de décimales ( >= 0 )

ainsi dans oküt("321,1",3,1)
ok = variable booléenne retournant faux dans cet exemple
fct = fonction appelée
"321,1" = valeur du textbox
3 = longueur partie entière + partie décimale
1 = longueur partie décimale

A suivre ( éventuellement )
--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"michdenis" a écrit dans le message de news:

Bonjour Pounet95,

Pour chacun de tes textbox dans ton formulaire, tu peux utiliser
une ligne de commande comme celle-ci :
A ) le premier caractère doit être le point
B ) un seul point peut être saisi dans le textbox
C ) Seul les chiffres peuvent être saisi après le point
D ) le textbox est limité à 3 digit incluant le point
(le 3 dans la ligne de commande)

'------------------------
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

KeyAscii = CheckTextbox(TextBox1, KeyAscii, 3)

End Sub
'------------------------

à copier dans un module standard ... ou dans ton formulaire !
'------------------------
Function CheckTextbox(ByVal Tbox As MSForms.TextBox, _
ByVal C As Integer, ByVal NbChar As Integer)

If C = 44 Or C = 46 Then C = 46
If InStr(TextBox1, Chr(C)) > 0 Then C = 0
If Len(TextBox1) = 0 And C <> 46 Then C = 0
If (C < 48 Or C > 57) And C <> 46 Then
C = 0
End If
If Len(TextBox1) > NbChar Then C = 0
CheckTextbox = C
End Function
'------------------------


Salutations!





"Pounet95" a écrit dans le message de news:

Bonjour à toutes et tous,
XL2000 XP Pro

Un peu pris par le temps, je serai ravi si quelqu'un avait sous le coude
une
fonction en VBA
me permettant de vérifier que ce qui a été saisi dans un textbox :
- est bien un nombre
- que ce nombre est un nombre décimal positif
et dans ce cas que sa structure est conforme à 2 paramètres longueur
totale et nombre de décimale

exemple : function Vérif_Nb(nNbre as Single, nLong as integer, nDecimal
as
integer) as boolean
if not isnumeric(nNbre) then Vérif_Nbúlse
' et là je ne sais pas trop
'....... donc je vous remercie d'avance pour vos idées
'
end function

Merci encore de vos propositions
--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)




Avatar
michdenis
Bonjour Pounet95,

La procédure suggérée et pro-active. Au fur et à mesure que
l'usager saisi une donnée dans le textbox, la fonction accepte
ou refuse le caractère typé selon les exigences de la fonction.

Je n'ai pas saisi ce que tu veux ?

Est-ce que tu permets des nombres entiers seulement ? des nombres entiers + décimales ?
seulement des nombres décimales ? Autre chose ?


Salutations!


"Pounet95" a écrit dans le message de news:
Bonsoir,
Je crois que nous nous sommes croisés car sinon je n'aurais pas mis
ma fonction erronée :o[
Pour le positionnement du séparateur, je me suis planté. Donc à mettre à la
benne.

Je vais profiter de ta procédure, des procédures, devrais-je dire, en
corrigeant car
je me suis mal exprimé dans l'énoncé du problème.
Les paramètres sont :
- nombre décimal ( ou non),
- longueur hors séparateur ,
- nbre de décimales ( >= 0 )

ainsi dans oküt("321,1",3,1)
ok = variable booléenne retournant faux dans cet exemple
fct = fonction appelée
"321,1" = valeur du textbox
3 = longueur partie entière + partie décimale
1 = longueur partie décimale

A suivre ( éventuellement )
--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"michdenis" a écrit dans le message de news:

Bonjour Pounet95,

Pour chacun de tes textbox dans ton formulaire, tu peux utiliser
une ligne de commande comme celle-ci :
A ) le premier caractère doit être le point
B ) un seul point peut être saisi dans le textbox
C ) Seul les chiffres peuvent être saisi après le point
D ) le textbox est limité à 3 digit incluant le point
(le 3 dans la ligne de commande)

'------------------------
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

KeyAscii = CheckTextbox(TextBox1, KeyAscii, 3)

End Sub
'------------------------

à copier dans un module standard ... ou dans ton formulaire !
'------------------------
Function CheckTextbox(ByVal Tbox As MSForms.TextBox, _
ByVal C As Integer, ByVal NbChar As Integer)

If C = 44 Or C = 46 Then C = 46
If InStr(TextBox1, Chr(C)) > 0 Then C = 0
If Len(TextBox1) = 0 And C <> 46 Then C = 0
If (C < 48 Or C > 57) And C <> 46 Then
C = 0
End If
If Len(TextBox1) > NbChar Then C = 0
CheckTextbox = C
End Function
'------------------------


Salutations!





"Pounet95" a écrit dans le message de news:

Bonjour à toutes et tous,
XL2000 XP Pro

Un peu pris par le temps, je serai ravi si quelqu'un avait sous le coude
une
fonction en VBA
me permettant de vérifier que ce qui a été saisi dans un textbox :
- est bien un nombre
- que ce nombre est un nombre décimal positif
et dans ce cas que sa structure est conforme à 2 paramètres longueur
totale et nombre de décimale

exemple : function Vérif_Nb(nNbre as Single, nLong as integer, nDecimal
as
integer) as boolean
if not isnumeric(nNbre) then Vérif_Nbúlse
' et là je ne sais pas trop
'....... donc je vous remercie d'avance pour vos idées
'
end function

Merci encore de vos propositions
--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)