Vérifier le format d'un textbox
Bonjour à tous !
Je me permets de poster ce message car je ne parviens pas à inventer un code pour vérifier le format d'une de mes textbox. En effet, j'ai créé un userform pour pouvoir ajouter un employé, l'utilisateur doit donc entrer plusieurs champs dont un textbox correspondant au Nom et Prénom du nouvel employé. Je voudrais une macro qui vérifie si le format de la textbox soit bien : Nom commençant par une Majuscule et le reste en minuscule suivi d'une virgule (sans espace entre le Nom et la virgule) puis un espace et de même que pour le Nom, le Prénom commençant par une majuscule et le reste en minuscule et ce prénom ne doit pas être suivi d'un espace. Par exemple si je mets "sebastien,martin" ou "sebastien martin" ou "SEBASTIEN, Martin"... il m'affiche un msgbox. Par contre si je mets bien "Sebastien, Martin", il ne m'affiche rien. Je souhaite ainsi que si ce format n'est pas respecté, soit un msgbox s'affiche ou alors qu'il me le corrige seul (chose infaisable je pense).
J'explique à présent pourquoi je veux faire cela. J'ai créé une interface de chatroom dans laquelle pour voir ses messages, ma macro récupère la valeur application.username (qui est sous le format "Nom, Prénom") applique un filtre dans une sheet sur une liste de Nom, Prénom pour récupérer les dicussions stockees dans des cellules sur la même ligne que la personne filtrée et justement quand j'ajoute un employé, ma macro vient insérer le Nom, Prénom dans cette liste et si le format n'est pas respecté, lors de l'application de ce filtre, il n'y a aucun nom trouvé par le filtre ce qui fausse ma macro....
J'espère avoir été clair.
Je vous remercie pour votre intérêt !
Bonjour,
à tester pour corriger le texte
Private Sub TextBox1_Change()
If Me.TextBox1 = "" Then Exit Sub
Application.EnableEvents = False
Me.TextBox1.Text = Application.Proper(Me.TextBox1.Text)
t = Split(Me.TextBox1.Text, ",")
For i = LBound(t) To UBound(t)
t(i) = Application.Trim(t(i))
txt = txt & t(i) & ", "
Next
txt = Left(txt, Len(txt) - 2)
Me.TextBox1.Text = txt
Application.EnableEvents = True
End Sub
End SubSalut ebbwood,
Sans connaitre ton userform ni le code qu il y a derrière et les pros en VBA te trouveront certainement une façon de le faire, masi n'est t'il pas envisageable de créer deux textbox ?
Une pour le prénom :
TextBox1
Une pour le Nom :
Textbox2
Et une troisième automatique qui te sert pour la suite de ton vba avec
textbox3= Application.Proper(Me.TextBox1.Text) & "," & Application.Proper(Me.TextBox2.Text)Sinon, tu peux aussi regarder vers le Lcase (ou Ucase) pour régler les problèmes de majuscules/minuscules quand tu compare des valeurs textes.
Bonjour,
à tester pour corriger le texte
Private Sub TextBox1_Change() If Me.TextBox1 = "" Then Exit Sub Application.EnableEvents = False Me.TextBox1.Text = Application.Proper(Me.TextBox1.Text) t = Split(Me.TextBox1.Text, ",") For i = LBound(t) To UBound(t) t(i) = Application.Trim(t(i)) txt = txt & t(i) & ", " Next txt = Left(txt, Len(txt) - 2) Me.TextBox1.Text = txt Application.EnableEvents = True End Sub End Sub
Bonjour,
Je te remercie, cela fonctionne sauf pour la virgule. Si l'on ne mets pas de virgule mais qu'un simple espace entre le Nom et le Prénom, la virgule ne s'y ajoute pas automatiquement (elle doit être collée au Nom puis suivi d'un espace et le Prénom). J'ai mis ton code dans textbox1.exit, je trouve ca mieux qu'il corrige une fois être sorti de la textbox.
Salut ebbwood,
Sans connaitre ton userform ni le code qu il y a derrière et les pros en VBA te trouveront certainement une façon de le faire, masi n'est t'il pas envisageable de créer deux textbox ?
Une pour le prénom :
TextBox1
Une pour le Nom :
Textbox2
Et une troisième automatique qui te sert pour la suite de ton vba avec
textbox3= Application.Proper(Me.TextBox1.Text) & "," & Application.Proper(Me.TextBox2.Text)Sinon, tu peux aussi regarder vers le Lcase (ou Ucase) pour régler les problèmes de majuscules/minuscules quand tu compare des valeurs textes.
Bonjour Boulii038,
Merci pour cette remarque mais l'idée est de remplir un minimum de champs et comme j'ai déjà créé le code, cela me fait tout modifié...
re,
à tester,
Private Sub TextBox1_Change()
If Me.TextBox1 = "" Then Exit Sub
Application.EnableEvents = False
Me.TextBox1.Text = Application.Proper(Me.TextBox1.Text)
Me.TextBox1.Text = Application.Trim(Me.TextBox1.Text)
If Not IsError(Application.Find(",", Me.TextBox1.Text)) Then
t = Split(Me.TextBox1.Text, ",")
Else
t = Split(Me.TextBox1.Text, " ")
End If
For i = LBound(t) To UBound(t)
If t(i) <> " " Then
t(i) = Application.Trim(t(i))
txt = txt & t(i) & ", "
End If
Next
txt = Left(txt, Len(txt) - 2)
Me.TextBox1.Text = txt
Application.EnableEvents = True
End Sub