XL 2013 Empêcher le saut de ligne dans un textbox

JLE

XLDnaute Junior
Bonjour,

J'espère que tout le monde se porte bien.

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.

Merci pour vos réponses.

JL
 

patricktoulon

XLDnaute Barbatruc
bonjour

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
;)
 

JLE

XLDnaute Junior
Bonjour,

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é.

Comment peut on le gérer dans ce cas ?

JL
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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.
 

Pièces jointes

  • ValidCtrl.xlsm
    13 KB · Affichages: 6

fanch55

XLDnaute Barbatruc
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
 

JLE

XLDnaute Junior
Bonjour,

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.
Voilà pourquoi.

Merci à vous tous dans tous les cas, au top.

JLE
 

Discussions similaires

Statistiques des forums

Discussions
311 711
Messages
2 081 782
Membres
101 817
dernier inscrit
carvajal