Definir une chaine de caractère spécifique dans une textbox

Signaler
Messages postés
2
Date d'inscription
mardi 12 novembre 2013
Statut
Membre
Dernière intervention
12 novembre 2013
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour, dans le cadre d'un travail pour mes études je dois faire une base de données, et une fenêtre permettant de rechercher des modèles de cette base de données par une immatriculation.
Dans ce cadre j'aimerais forcer l'utilisateur a rentrer dans la textbox de recherche le format X-XXXX , X représentant uniquement des lettres, le tiret étant obligatoire et la longueure ne peux pas varier (1 lettre / 1 tiret / 4 lettres).
Pourriez vous m'aider pour ce code? Je suis débutant en VBA et je ne trouve rien d'identique sur Internet...
Merci d'avance

6 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bonjour,
peux-tu nous montrer ce que tu as au moins tenté d'écrire ?
(c'est ici une règle à respecter... Merci de t'y conformer).
Ce n'est pas "sur internet", que l'on cherche d'abord, mais sur son aide VBA)
une suggestion, pour te permettre de retrousser tes manches en connaissance de cause :
L'opérateur Like permet de savoir si ce que l'on saisit dans la textbox correspond à un format
L'évènement Change d'uyne textbox intervient chaque fois qu'est modifié de texte d'une textbox
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Je voudrais également te rappeler l'existence d'un contrôle fait pour cela : Masked edit Control (MSMASK32.OCX) qui te permet d'atteindre ton résultat sans le moindre code. Il suffit de définir comme tu l'entends sa propriété Mask.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Et si tu tiens VRAIMENT à faire cela avec une TEXTBOX, tu as tout ce qu'il te faut dans ce code déposé par mon frère jumeau :
http://codes-sources.commentcamarche.net/source/53984-vba-uniquement-saisies-controlees-un-peu-comme-avec-maskededit
Messages postés
30361
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 novembre 2020
338
bonjour,

tu peux aussi utiliser une expression régulière
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 Dim regEx As New VBScript_RegExp_55.RegExp
 'pattern correspondant à x-xxxx x étant n'importe quelle lettre (non accentuée)
 regEx.Pattern = "^[a-zA-Z][ \-][a-zA-Z]{4}$"
    regEx.IgnoreCase = True 'True to ignore case
    regEx.Global = False 'True matches all occurances, False matches the first occurance
    If regEx.Test(TextBox1.Value) Then
        MsgBox "ok"
    Else
        MsgBox "La saisie est incorecte"
        TextBox1.Text = ""
    End If

End Sub


http://www.macrostash.com/2011/10/08/simple-regular-expression-tutorial-for-excel-vba/

http://cafeine.developpez.com/access/tutoriel/regexp/


Messages postés
2
Date d'inscription
mardi 12 novembre 2013
Statut
Membre
Dernière intervention
12 novembre 2013

Bonjour, merci beaucoup pour vos réponses très rapides. Ucfoutu les liens sont très complets mais malheureusement c'est beaucoup trop complexe pour moi. La solution de jordane a parfaitement fonctionné, merci encore !
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Oui, mais :
1) là, tu fais ton contrôle in fine et non en cours de frappe.
2) tu utilises vbs (inhibé sur certaines machines)

In fine pour in fine, autant alors faire ceci sans vbs :
Mettre à 6 la propriété MaxLength de la textbox et ce code :
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  t = TextBox1.Text
  If Not Format(Replace(t, "-", ""), "@-@@@@") = t Or t Like ("*#*") Then
   MsgBox "non" : cancel = true
  End If
End Sub

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend