Textbox : espace insécable pendant la saisie

Résolu
GrandJean -  
 GrandJean -
Bonjour à tous,

Je souhaite pouvoir insérer un espace insécable lors de la saisie dans une textbox.
J'ai bien trouvé le code chr(160) mais je n'arrive pas à l'intégrer lors de la saisie.
La méthode m'intéresse car j'aimerais aussi pouvoir intégrer une puce, par exemple chr(149), en cours de saisie.

Je n'ai pas trouvé de solutions sur les forums et mes différentes tentatives...

Bref, je sollicite votre aide et vous en remercie par avance

Jean

6 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    tout depend ou vous voulez mettre ces caracteres, si devant la sasie:
    ex:
    x = Chr(149) & Chr(160) & TextBox1
    0
  2. Zoul67 Messages postés 2001 Statut Membre 149
     
    Bonjour,

    En VB ou en VBA ?
    C'est surprenant d'avoir besoin spécifiquement d'une espace insécable...
    Si tu veux remplacer automatiquement un caractère par un autre lors de la saisie (ou empêcher la saisie de certains caractères), utilise les codes ASCII dans la procédure :

    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)


    A+
    0
  3. GrandJean
     
    Merci à tous les deux d'avoir répondu aussi rapidement.

    C'est bien en cours de frappe que je veux pouvoir utiliser ces caractères. Si ma phrase se termine par un ?, j'ai besoin d'un espace insécable pour éviter que, lors de l'utilisation du contenu dans un autre formulaire, le ? se retrouve tout seul sur une nouvelle ligne.

    J'ai bien essayé avec keypress, sans succès. Je ne trouve pas le rapprochement entre chr() et keyAscii. Pardon si je m'exprime mal.

    J'espère que vous aurez une piste.
    0
  4. GrandJean
     
    Pardon, j'ai oublié de préciser : en Excel VBA
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Zoul67 Messages postés 2001 Statut Membre 149
     
    Un exemple pour ajouter un espace insécable avant le ? :
    (adapter le code à ton besoin ; celui-ci permet d'empêcher la saisie de caractère non désirés)
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        Select Case KeyAscii
        Case 63
            TextBox1.Value = TextBox1.Value & Chr(160)
        Case 97 To 122
            ' Caracteres alpha min
    
        Case 65 To 90
            'Caracteres alpha Maj
    
        Case 8
            'Retour Chariot
    
        Case Else
    
            KeyAscii = 0
    
        End Select
    
    End Sub
    0
  7. GrandJean
     
    Super.

    J'ai essayé ta solution qui fonctionne très bien. Merci beaucoup.
    Par contre, si elle fonctionne bien en création d'un nouveau texte, en mode correction cela ne va plus : si je reviens sur le texte et que je veuille mettre un ?, avec le select case, mon ? se retrouve en dernier caractère.
    J'ai donc remplacé le select case par :
    TB_1 = Replace(TB_1, " ?", Chr(160) & "?") 'pour l'espace insécable
    TB_1 = Replace(TB_1, "*", Chr(149)) 'pour la puce

    Là, je peux mettre mon caractère où nécessaire. Le curseur se place, cependant, en fin de texte. Mais ce n'est pas très grave.
    J'aurais préféré un raccourci clavier (comme ctrl / Enter pour aller à la ligne). Je n'ai pas trouvé.

    Encore merci
    Jean
    0
    1. GrandJean
       
      Pour résoudre la position du curseur, j'ai utilisé SelStart, ce qui donne :
      PosCurseur = Me.TB_1.SelStart
      TB_1 = Replace(TB_1, " ?", Chr(160) & "?")
      TB_1 = Replace(TB_1, "*", Chr(149))
      Me.TB_1.SelStart = PosCurseur
      0