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

Control d'un champ

9 réponses
Avatar
dyj Orange
Bonjour,
En VBA dans un Userform, j'ai 3 TextBox: nom, prénom, tel. Quel control ou
code dois je associer pour m'assurer que j'ai bien 2 champs alphabétiques
(éventuellement un tiret) et un champ numérique (Tel).
Merci.

9 réponses

Avatar
isabelle
bonjour dyj,

exemple pour controler le textbox telephone (format: 111-111-1111),
l'utilisateur n'a qu'à inscrire les chiffres, les tirets s'inscrive tout seul.

Private Sub TextBox1_Change()
Dim Valeur As Byte
TextBox1.MaxLength = 12 'nb caractères maxi autorisé dans le textbox
Valeur = Len(TextBox1)
If Valeur = 3 Or Valeur = 7 Then TextBox1 = TextBox1 & "-"
End Sub


'vérifier la saisie saisie
Private Sub CommandButton1_Click() 'bouton de validation
TextBox2 = ""
For i = 1 To 12
Select Case i
Case 4, 8:
If Not Mid(TextBox1, i, 1) = "-" Then
MsgBox "Format incorrect"
TextBox1 = ""
Exit Sub
End If
Case Else:
If Not IsNumeric(Mid(TextBox1, i, 1)) Then
MsgBox "Format incorrect"
TextBox1 = ""
Exit Sub
End If
End Select
Next
TextBox2 = TextBox1
End Sub

isabelle

Le 2010-08-12 08:09, dyj Orange a écrit :
Bonjour,
En VBA dans un Userform, j'ai 3 TextBox: nom, prénom, tel. Quel control
ou code dois je associer pour m'assurer que j'ai bien 2 champs
alphabétiques (éventuellement un tiret) et un champ numérique (Tel).
Merci.
Avatar
dyj Orange
Merci. Pour les chiffres Ok, mais pour les caractères alpha ou - je ne
comprends pas le Select et les Case. Peux tu me donner quelques
explications.
Merci pour ton aide

"isabelle" a écrit dans le message de groupe de discussion :
i4129l$vg1$
bonjour dyj,

exemple pour controler le textbox telephone (format: 111-111-1111),
l'utilisateur n'a qu'à inscrire les chiffres, les tirets s'inscrive tout
seul.

Private Sub TextBox1_Change()
Dim Valeur As Byte
TextBox1.MaxLength = 12 'nb caractères maxi autorisé dans le textbox
Valeur = Len(TextBox1)
If Valeur = 3 Or Valeur = 7 Then TextBox1 = TextBox1 & "-"
End Sub


'vérifier la saisie saisie
Private Sub CommandButton1_Click() 'bouton de validation
TextBox2 = ""
For i = 1 To 12
Select Case i
Case 4, 8:
If Not Mid(TextBox1, i, 1) = "-" Then
MsgBox "Format incorrect"
TextBox1 = ""
Exit Sub
End If
Case Else:
If Not IsNumeric(Mid(TextBox1, i, 1)) Then
MsgBox "Format incorrect"
TextBox1 = ""
Exit Sub
End If
End Select
Next
TextBox2 = TextBox1
End Sub

isabelle

Le 2010-08-12 08:09, dyj Orange a écrit :
Bonjour,
En VBA dans un Userform, j'ai 3 TextBox: nom, prénom, tel. Quel control
ou code dois je associer pour m'assurer que j'ai bien 2 champs
alphabétiques (éventuellement un tiret) et un champ numérique (Tel).
Merci.
Avatar
isabelle
bonjour dyj,

le principe est une boucle sur chaque caractère du contenu du textbox
dans cette exemple (111-111-1111) il y a 12 caractères
'
For i = 1 To 12 ' pour le caractère 1 à 12
Select Case i
Case 4, 8: ' si le numéro de caractère est 4ème ou le 8ème
If Not Mid(TextBox1, i, 1) = "-" Then 'si celui-ci est egal à "-" passe à l'autre caractères (End select, Next), sinon...

Case Else: pour tous les autres numéro de caractère,
If Not IsNumeric(Mid(TextBox1, i, 1)) Then 's'il est numérique passe au caractère suivant (End select, Next), sinon...

isabelle

Le 2010-08-12 12:18, dyj Orange a écrit :
Merci. Pour les chiffres Ok, mais pour les caractères alpha ou - je ne
comprends pas le Select et les Case. Peux tu me donner quelques
explications.
Merci pour ton aide

"isabelle" a écrit dans le message de groupe de discussion :
i4129l$vg1$
bonjour dyj,

exemple pour controler le textbox telephone (format: 111-111-1111),
l'utilisateur n'a qu'à inscrire les chiffres, les tirets s'inscrive
tout seul.

Private Sub TextBox1_Change()
Dim Valeur As Byte
TextBox1.MaxLength = 12 'nb caractères maxi autorisé dans le textbox
Valeur = Len(TextBox1)
If Valeur = 3 Or Valeur = 7 Then TextBox1 = TextBox1 & "-"
End Sub


'vérifier la saisie saisie
Private Sub CommandButton1_Click() 'bouton de validation
TextBox2 = ""
For i = 1 To 12
Select Case i
Case 4, 8:
If Not Mid(TextBox1, i, 1) = "-" Then
MsgBox "Format incorrect"
TextBox1 = ""
Exit Sub
End If
Case Else:
If Not IsNumeric(Mid(TextBox1, i, 1)) Then
MsgBox "Format incorrect"
TextBox1 = ""
Exit Sub
End If
End Select
Next
TextBox2 = TextBox1
End Sub

isabelle

Le 2010-08-12 08:09, dyj Orange a écrit :
Bonjour,
En VBA dans un Userform, j'ai 3 TextBox: nom, prénom, tel. Quel control
ou code dois je associer pour m'assurer que j'ai bien 2 champs
alphabétiques (éventuellement un tiret) et un champ numérique (Tel).
Merci.





Avatar
dyj Orange
Merci. Alors quelle méthode pour s'assurer qu'un champ ne contient que des
caractères alphabétique, exemple pour vérifier le nom de famille.
Mes questions sont peut être naïves, mais j'apprends tous les jours à
travers vos réponses.

"isabelle" a écrit dans le message de groupe de discussion :
i427hj$12d$
bonjour dyj,

le principe est une boucle sur chaque caractère du contenu du textbox
dans cette exemple (111-111-1111) il y a 12 caractères
'
For i = 1 To 12 ' pour le caractère 1 à 12
Select Case i
Case 4, 8: ' si le numéro de caractère est 4ème ou le 8ème
If Not Mid(TextBox1, i, 1) = "-" Then 'si celui-ci est egal à "-"
passe à l'autre caractères (End select, Next), sinon...

Case Else: pour tous les autres numéro de caractère,
If Not IsNumeric(Mid(TextBox1, i, 1)) Then 's'il est numérique passe
au caractère suivant (End select, Next), sinon...

isabelle

Le 2010-08-12 12:18, dyj Orange a écrit :
Merci. Pour les chiffres Ok, mais pour les caractères alpha ou - je ne
comprends pas le Select et les Case. Peux tu me donner quelques
explications.
Merci pour ton aide

"isabelle" a écrit dans le message de groupe de discussion :
i4129l$vg1$
bonjour dyj,

exemple pour controler le textbox telephone (format: 111-111-1111),
l'utilisateur n'a qu'à inscrire les chiffres, les tirets s'inscrive
tout seul.

Private Sub TextBox1_Change()
Dim Valeur As Byte
TextBox1.MaxLength = 12 'nb caractères maxi autorisé dans le textbox
Valeur = Len(TextBox1)
If Valeur = 3 Or Valeur = 7 Then TextBox1 = TextBox1 & "-"
End Sub


'vérifier la saisie saisie
Private Sub CommandButton1_Click() 'bouton de validation
TextBox2 = ""
For i = 1 To 12
Select Case i
Case 4, 8:
If Not Mid(TextBox1, i, 1) = "-" Then
MsgBox "Format incorrect"
TextBox1 = ""
Exit Sub
End If
Case Else:
If Not IsNumeric(Mid(TextBox1, i, 1)) Then
MsgBox "Format incorrect"
TextBox1 = ""
Exit Sub
End If
End Select
Next
TextBox2 = TextBox1
End Sub

isabelle

Le 2010-08-12 08:09, dyj Orange a écrit :
Bonjour,
En VBA dans un Userform, j'ai 3 TextBox: nom, prénom, tel. Quel control
ou code dois je associer pour m'assurer que j'ai bien 2 champs
alphabétiques (éventuellement un tiret) et un champ numérique (Tel).
Merci.





Avatar
LSteph
Bonjour,

Private Sub TextBox1_Change()
For i = 1 To Len(TextBox1)
If (InStr(" -,abcdefgh'ijklmnopqrstuvwxyz", LCase(Mid(TextBox1, i,
1)))) = 0 Then
TextBox1 = ""
TextBox1.SetFocus: MsgBox "vous devez entrer des lettres pour un nom "
End If
Next
End Sub
Private Sub TextBox2_Change()
For i = 1 To Len(TextBox2)
If (InStr(" -,abcdefgh'ijklmnopqrstuvwxyz", LCase(Mid(TextBox2, i,
1)))) = 0 Then
TextBox2 = ""
MsgBox "vous devez entrer des lettres pour un prénom "
TextBox2.SetFocus
End If
Next
End Sub
Private Sub TextBox3_Change()
For i = 1 To Len(TextBox3)
If (InStr(" -0123456789", LCase(Mid(TextBox3, i, 1)))) = 0 Then
TextBox3 = ""
MsgBox "vous devez entrer un numéro pour un téléphone"
TextBox3.SetFocus
End If
Next
End Sub

'LSteph

On 12 août, 14:09, "dyj Orange" wrote:
Bonjour,
En VBA dans un Userform, j'ai 3 TextBox: nom, prénom, tel. Quel control ou
code dois je associer pour m'assurer que j'ai bien 2 champs alphabétiqu es
(éventuellement un tiret) et un champ numérique (Tel).
Merci.
Avatar
LSteph
Bonjour,

Private Sub TextBox1_Change()
For i = 1 To Len(TextBox1)
If (InStr(" -,abcdefgh'ijklmnopqrstuvwxyz", LCase(Mid(TextBox1, i,
1)))) = 0 Then
TextBox1 = ""
TextBox1.SetFocus: MsgBox "vous devez entrer des lettres pour un nom "
End If
Next
End Sub
Private Sub TextBox2_Change()
For i = 1 To Len(TextBox2)
If (InStr(" -,abcdefgh'ijklmnopqrstuvwxyz", LCase(Mid(TextBox2, i,
1)))) = 0 Then
TextBox2 = ""
MsgBox "vous devez entrer des lettres pour un prénom "
TextBox2.SetFocus
End If
Next
End Sub
Private Sub TextBox3_Change()
For i = 1 To Len(TextBox3)
If (InStr(" -0123456789", LCase(Mid(TextBox3, i, 1)))) = 0 Then
TextBox3 = ""
MsgBox "vous devez entrer un numéro pour un téléphone"
TextBox3.SetFocus
End If
Next
End Sub

'LSteph

On 12 août, 14:09, "dyj Orange" wrote:
Bonjour,
En VBA dans un Userform, j'ai 3 TextBox: nom, prénom, tel. Quel control ou
code dois je associer pour m'assurer que j'ai bien 2 champs alphabétiqu es
(éventuellement un tiret) et un champ numérique (Tel).
Merci.
Avatar
dyj Orange
Merci, c'est exactement adapté à mon besoin. Par contre en terme d'écriture
lorsqu'on a beaucoup de TextBox peut on les écrire avec indice que l'on
ferait varier dans une boucle: For i=1 to 25: TestBox(i)=.. : Next i
Avatar
michdenis
Bonjour,

Une façon simple de procéder :

Exemple pour ne permettre que les caractères que l'on désire dans un textbox.

Caractère 32 = Barre d'espacement
Caractère 39 = Apostrophe
Caractère 45 = Trait d'union
Caractères 65 à 90 = Lettre de l'alphabet de A à Z
Caractères 97 à 122 = Lettre de l'alphabet de a à z
Selon le clavier utilisé, il faudrait ajouter les caractères ASCII nécessaire
pour les ACCENTS possibles sur certaines lettres. En fait, tu ajoutes tous
les caractères (leur valeur Ascii) que tu désires.

'-----------------------------
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 32, 39, 45, 65 To 90, 97 To 122
Case Else
KeyAscii = 0
End Select
End Sub
'-----------------------------

Exemple pour ne permettre que les caractères numériques dans un textbox
'---------------------------------
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 48 To 57
Case Else
KeyAscii = 0
End Select
End Sub
'---------------------------------

--
MichD
--------------------------------------------


"dyj Orange" a écrit dans le message de groupe de discussion :
4c63e472$0$5395$
Bonjour,
En VBA dans un Userform, j'ai 3 TextBox: nom, prénom, tel. Quel control ou
code dois je associer pour m'assurer que j'ai bien 2 champs alphabétiques
(éventuellement un tiret) et un champ numérique (Tel).
Merci.
Avatar
LSteph
Bonjour,
Dans ce cas précis non puisque le traitement de chaque textbox peut-
être différent
Si tu as tantôt des noms des chiffres des codes...
Sinon tu pourrais créer un module de classe et généraliser
l'évennement pour l'ensemble des textbox reste q'un SelectCase devra
ensuite affiner le choix des chr pour chaque textbox.Donc c'est aussi
simple comme on a fait

En outre regarde aussi la proposition de MD,
Cela va plus vite d'écrire un caractère que son code mais sa
suggestion devient plus intéressante quand on peut traiter une série
consécutive de caractères car il suffit de s'en servir comme bornes.

Reste que l'evennement Keypress ne sera pas appliqué au texte collé,
dommage..

@+

--
LSteph

On 13 août, 11:54, "dyj Orange" wrote:
Merci, c'est exactement adapté à mon besoin. Par contre en terme d' écriture
lorsqu'on a beaucoup de TextBox peut on les écrire avec indice que l'on
ferait varier dans une boucle: For i=1 to 25: TestBox(i)=.. : Next i