Gestion du curseur dans un textbox

GeoTrouvePas

XLDnaute Impliqué
Bonjour tout le monde,

J'explique mon soucis. J'ai une application qui gère un grand nombre de textbox. Pour contrôler les saisies des utilisateurs et éviter les répétitions de code, je suis passé par des modules de classe. Par exemple, lorsqu'il faut saisir un nom de famille, le textbox n'accepte que des lettres, des espaces et converti automatiquement la saisie en majuscules (sans accent). Voici le code du module de classe :

Code:
Option Explicit
Public WithEvents MonTextbox As MSForms.TextBox

Private Sub MonTextbox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
        Case 32, 39, 45, 65 To 90, 97 To 122, 224, 226, 231 To 235, 238, 239, 244, 249, 251, 252
        Case Else
            KeyAscii = 0
    End Select
End Sub

Private Sub MonTextbox_Change()
    MonTextbox.BackColor = &H80000005
    MonTextbox.Text = SansAccent(StrConv(MonTextbox.Text, vbUpperCase))
End Sub

Mon soucis est que, lorsque l'utilisateur ramène le curseur en arrière pour saisir une lettre oubliée, une fois cette lettre saisie, le curseur se replace automatiquement à la fin de la saisie. Plutôt gênant si l'on a oublié deux lettres.

Existe - t - il un moyen pour corriger ce comportement pas très ergonomique ?

Je vous joins un exemple et je vous remercie d'avance de votre aide,

Bonne journée
 

Pièces jointes

  • Problème Curseur Maj.xls
    37 KB · Affichages: 35
G

Guest

Guest
Re : Gestion du curseur dans un textbox

bonjour,

C'est la fonction 'SansAccent' qui engendre le problème. Dans le module de classe enlève la méthode MontextBox_Change et remplace le KeyPress par celui-ci:

Code:
Private Sub MonTextbox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    
   Select Case KeyAscii
        Case 32, 39, 45, 65 To 90, 97 To 122, 224, 226, 231 To 235, 238, 239, 244, 249, 251, 252
            KeyAscii = Asc(SansAccent(UCase(Chr(KeyAscii))))
        Case Else
            KeyAscii = 0
    End Select
End Sub

A+
 

GeoTrouvePas

XLDnaute Impliqué
Re : Gestion du curseur dans un textbox

Ta solution marche impeccable ! Merci Hasco !

Par contre j'ai un peu de mal à comprendre pourquoi la fonction Sansaccent provoque ce comportement. Est ce que c'est parce qu'on remplace tout le contenu du Textbox ?
 
G

Guest

Guest
Re : Gestion du curseur dans un textbox

Re,

Oui.

Il faudrait conserver dans des variables la position du curseur de sélection, la longueur de sélection(TextBox.selStart et .selLLength) avant l'appel à la macro sansAccent et réatribuer après. Mais dans ton cas, ce n'est pas utile.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 092
Messages
2 085 227
Membres
102 826
dernier inscrit
ag amestan