Propriétés TextBox dans un UsF
bonjour,
Je voudrais que l'utilisateur saisisse un N° de téléphone dans une textBox.
avec un enregistrement automatique de macro j'ai obtenu dans Format de Cellule / Nombre / Spécial / N° de SS le code svt :
"##"" ""##"" ""##"" ""##"" ""##"Alors je me suis lancée avec (nom de ma texBox TxBCnavNir) :
Private Sub TxBCnavTel_Change()
On Error Resume Next
'Format téléphone
TxBCnavTel.Value = Format(TxBCnavTel.Value, "##"" ""##"" ""##"" ""##"" ""##")
' Si erreur de frappe
If IsNumeric(TxBCnavTel.Value) Then
Label_erreur.Visible = False 'label masqué
Else 'sinon
Label_erreur.Visible = True 'label visible
MsgBox "Saisir des chiffres"
End If
End SubQuand je vais pour saisir mon N°, en tapant sur le clavier numérique j'ai le MsgBox "Saisir des chiffres" qui s'affiche.
si je supprime la ligne de mon format, je peux saisir mes chiffres, et si je tape une lettre, à juste titre la MsgBox "Saisir des chiffres" s'affiche et je voudrais qu'il y ait en même temps effacement de la saisie incorect, surtout que le retour arrière provoque encore la MsgBox "Saisir des chiffres"
Merci d'une part de me corriger sur le format et sur la gestion d'erreur.
Bonjour,
Les textbox d'Excel ne supporte pas les masques tel que tu souhaite.
A+
Bonsoir Lermite,
Qu'est-ce que je dois supprimer les formats où la gestion de l'erreur isNumeric ?
Qu'est que tu appelles un masque ?
Le masque c'est le format que tu essaye d'appliqué et c'est le format que tu dois supprimer.
A+
Bonsoir
Pourtant j'ai la même texbox avec le N· de sécurité social qui fonctionne.
Mais je veux bien mettre le format dans la feuille.
Ce qui m'embête plus c'est la gestion d'erreurs si on tape des lettres Excel renvoie la MsgBox mais le retour arrière pour effacer la mauvaise frappe renvoie aussi la MsgBox.
Je voudrai qu'avec l'envoie de la MsgBox ça efface la saisie.
Merci
Bonjour mouftie,
Voilà la réponse à ton problème.
Ce code n'est pas de moi !
Bonjour Tip
Intéressante cette procédure, j'ai appris beaucoup de chose, même si j'ai pas tout compris :
1* Au niveau du retour arrière, ça ne fonctionne que très partiellement, le fait d'avoir inserrer des espaces revient à inserrer des texbox dans la texbox ; c'est à dire que si tu tapes 0 un retour arrière va effacer le 0, si tu tapes 06 ton curseur inserre l'espace et tu ne peux plus faire de retour arrière ; pour y parvenir, tu dois faire Ctrl + retour arrière.
2* Par défaut, j'ai l'option Explicit et j'ai du déclarer un
Dim KeyAscii as Variant, sinon j'avais l'erreur 'Variable non définie'
3* A quoi correspond chr(KeyAscii) ?
4* A quoi sert l'instruction
Private Sub tbTel_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Subapparement à rien car cela fonctionne sans.[/list]
Si tu peux répondre à toutes mes interrogations, ce serait sympar car je fais de l'autoformation et que je ne connais personne autour de moi qui soit programmeur...
Bonjour mouftie,
Pour info je ne suis pas programmeur, mais je me débrouille....
1* Tu rajoute un bouton "CmdDEL" à coté de ta textBox et tu mets:
Private Sub CmdDel_Click()
If Len(tbTEL) = 0 Then GoTo Saut
If InStr(" ", Right(tbTEL, 1)) > 0 Then tbTEL = Left(tbTEL, Len(tbTEL) - 2): GoTo Saut
If InStr("0123456789", Right(tbTEL, 1)) > 0 Then tbTEL = Left(tbTEL, Len(tbTEL) - 1)
Saut:
tbTEL.SetFocus
End Sub
2* Par défaut, j'ai l'option Explicit et j'ai du déclarer un "Dim KeyAscii as Variant" ?
- C'est normal, la réponse est dans ta question.
3* A quoi correspond chr(KeyAscii) ?
- KeyAscii, à chaque caractère que tu tape au format ASC().
- chr(KeyAscii) à ton caractère lui même.
- Tu tape 4 -> Asc(4) = 52 donc chr(52) = 4
4* A quoi sert l'instruction
Private Sub tbTel_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub
- A contrôler chaque caractère que tu tape.
Si le caractère que tu tape n'est pas un chiffre de 1 à 9, Il ne l'écrit pas (normal pour N° de TEL).
Il y a peu être plus simple, mais c'est déja pas mal.
Voili, voilou..
Un grand merci pour tes explications.
J'avais fini par trouver, pour les N° de téléphone, l'instruction
TextBox1.Value = Format(TextBox1.Value, "00"" ""00"" ""00"" ""00"" ""00")pourtant pour moi, cela ne fonctionnait pas dans la mesure où dès que je tapais le 1er chiffre (0), j'avais mon Label_erreur.visible (true/false) qui apparaissait puis 10 zéros, je tapais le chiffre suivant (6) qui s'inscrivait à la fin puis le suivant (1) qui avait pour conséquence d'effacer la texbox précédente sans moyen de taper mon tél.
J'ai fini par comprendre qu'il y avait un pb avec une autre instruction
Private Sub UserForm_Initialize()
TextBox1.MaxLength = 14 'saisie du Tel sur 14 caractères
TextBox1.AutoTab = True 'tabulation automatiqueil a fallu que je passe ma MaxLengt à 16 (pourquoi 16 ?) pour que chaque chiffre tapé efface les zéros.
Inconvénient il n'y a plus de tabulation après la fin de la saisie du N° de tel.
Encore un grand merci pour ta patience