Je voudrais connaitre le moyen d'empêcher l'utilisateur de faire un saut de ligne (ctrl + entrée de son clavier) dans un textbox sans mettre la propriété multiligne à false.
Je précise que j'ai déjà testé plusieurs procédures sans succès.
je ne comprends pas tres bien le pourquoi du comment
et surtout pourquoi mettre le textbox multiline si tu veux bloquer cette possibilité
mais passons
alors bloque le au keydown
VB:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
With TextBox1
If KeyCode = 17 Then .Tag = x
If KeyCode = 13 And .Tag = x Then KeyCode = 0: .Tag = ""
End With
End Sub
En fait, le multiligne à true permet de passer à la ligne l'affichage du texte quand on écrit un texte plus long que les bords de la textbox et si on la met à false, une partie du texte est masqué, ce qui ne convient pas non plus.
Merci pour votre code qui fonctionne bien pour empêcher le saut de ligne mais il m'empêche également de valider par entrée au clavier la textbox... J'ai omis de le dire dans mon premier post, désolé.
Bonjour JLE,
Ne sachant pas ce que vous avez essayé et qui ne marche pas, en PJ un essai avec dans ThisWorkbook :
VB:
Sub Workbook_open()
Application.OnKey "^~", "MsgCtrl"
Application.OnKey "%~", "MsgAlt"
End Sub
Les combinaisons de touches ALT Enter et CTRL Enter sont invalidées.
Le retour à la normale se fait en lançant :
Code:
Sub TouchesOK()
Application.OnKey "^~"
Application.OnKey "%~"
End Sub
Donc si dans votre userform vous mettez la première macro avant le userform.show et la seconde en sortant, vous devriez interdire ces combinaisons de touches.
bonjour @sylvanu je n'ai pas voulue justement condamner les touches
il peut en avoir besoins ailleurs dans l'userform
mais finalement ton idée est bonne mais le blocage /déblocage doit se faire dans l'enter et exit du textbox
Donc si dans votre userform vous mettez la première macro avant le userform.show et la seconde en sortant, vous devriez interdire ces combinaisons de touches.
Bonjour à tous,
moi non plus je ne vois pas l'utilité du multiline = true et l'interdiction d'un retour à la ligne,
à moins de ne l'interdire que pour l'utilisateur et pas par code ( en ce cas le keydown est efficace)
Sinon pourquoi ne pas simplement "supprimer" le vbcrlf ?
VB:
Private Sub TextBox1_Change()
If InStr(TextBox1, vbCrLf) Then
Application.EnableEvents = False
TextBox1 = Replace(TextBox1, vbCrLf, vbNullString)
Application.EnableEvents = True
End If
End Sub
Merci à vous tous, je n'ai pas tout testé car grâce à Fanch55, j'ai trouvé une solution à laquelle je n'avais pas pensé, donc merci à lui.
La solution est d'enlever le dernier caractère de la chaine s'il détecte un saut de ligne dans TextBox1_Change() :
VB:
If InStr(TextBox1, vbCrLf) Then
Application.EnableEvents = False
TextBox1.Value = Left(TextBox1Value, Len(TextBox1.Value) - 2)
Application.EnableEvents = True
End If
Et pour répondre à sa remarque concernant l'utilité du multiligne, j'en ai donné la raison dans mon deuxième post ce jour :
En fait, le multiligne à true permet de passer à la ligne l'affichage du texte quand on écrit un texte plus long que les bords de la textbox et si on la met à false, une partie du texte est masqué, ce qui ne convient pas non plus.
Peut être que je n'ai pas été assez clair : quand l'utilisateur écrit SANS faire de saut de ligne avec le clavier (ctrl + entrée), et que la multiligne est à :
TRUE alors l'utilisateur écrit et quant il arrive à la fin de sa ligne la phrase continue en dessous automatiquement
FALSE alors l'utilisateur écrit et quant il arrive à la fin de sa ligne, le début de sa phrase est masqué et sa phrase ne passe pas en dessous.