Passer au textbox suivant si nombre de caractères max atteint

chris6999

XLDnaute Impliqué
Bonjour


J'ai trouvé sur un FORUM un code très intéressant qui correspond à mes besoins.
A savoir quand le nombre de caractère max défini en tant que propriété est atteint passe au textbox2 etc.

J'ai juste un souci car chez moi
Textox2.Activate n'est pas reconnu
quand je tente avec textbox2.SetFocus il va bien sur textbox2 mais en l'incrémentant de la valeur précédente?

Du coup que dois-je utiliser pour changer de textbox?

Merci d'avance pour votre aide
Bonne journée

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'macro écrite par m@rina
If Len(TextBox1) = TextBox1.MaxLength - 1 Then
TextBox1 = TextBox1 + Chr(KeyAscii)
TextBox2.Activate
End If
End Sub
 

Pièces jointes

  • fichier test sélection textbox suivant .xlsm
    20.1 KB · Affichages: 30

Papou-net

XLDnaute Barbatruc
Bonjour à tou(te)s,
Bonjour Chris,

Au lieu de KeyPress, utilises l'événement KeyDown:

Private Sub SS1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If Len(SS1) = SS1.MaxLength Then
SS2 = keyccode
SS2.SetFocus
End If
End Sub

Private Sub SS2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If Len(SS2) = SS2.MaxLength Then
SS3 = keyccode
SS3.SetFocus
End If
End Sub


Cordialement.

PS: maintenant, si tu as un grand nombre de TextBox, la solution par modules de classe proposée par Nicole est de loin préférable mais elle demande une certaine maîtrise de VBA.
 

Pièces jointes

  • Copie de fichier test sélection textbox suivant .xlsm
    19.4 KB · Affichages: 28

Papou-net

XLDnaute Barbatruc
RECTIFICATIF

Oups, avec KeyDown il faut gérer les touches spéciales (Suppr, flèches, etc...). Voici donc une version modifiée de ton code initial:

Private Sub SS1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Len(SS1) = SS1.MaxLength Then SS2.SetFocus
End Sub

Private Sub SS2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Len(SS2) = SS2.MaxLength Then SS3.SetFocus
End Sub


Cordialement.
 

Si...

XLDnaute Barbatruc
Bon_jour

Un autre exemple avec un Module de Classe et des longueurs variables (que léti ;), spécialiste aussi de ce type de module, peut s'amuser à modifier bien que la programmation ici soit classique et assez simple).
 

Pièces jointes

  • Longueur Texte variable (usf).xlsm
    37.2 KB · Affichages: 32

chris6999

XLDnaute Impliqué
RECTIFICATIF

Oups, avec KeyDown il faut gérer les touches spéciales (Suppr, flèches, etc...). Voici donc une version modifiée de ton code initial:

Private Sub SS1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Len(SS1) = SS1.MaxLength Then SS2.SetFocus
End Sub

Private Sub SS2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Len(SS2) = SS2.MaxLength Then SS3.SetFocus
End Sub


Cordialement.
Merci Papou-net mais j'ai le même problème avec ta proposition.
Quand je saisie 1 caractère dans ma SS1 le système reporte ce caractère dans ma SS2...
Je ne comprends pas pourquoi.
Je vais essayer les autres codes
Bonne soirée
 

chris6999

XLDnaute Impliqué
Bon_jour

Un autre exemple avec un Module de Classe et des longueurs variables (que léti ;), spécialiste aussi de ce type de module, peut s'amuser à modifier bien que la programmation ici soit classique et assez simple).

Bonsoir

Je ne suis pas parvenu à adapter ce code à mon projet. Impossible d'afficher l'UF avec le click button.
Pourtant j'ai importé le module le classe et mis le code dans mon UF.
Dommage c'était vraiment intéressant et je pensais avoir compris le principe.
C'est là que je vois mes limites.
Merci encore et bonne soirée
 

chris6999

XLDnaute Impliqué
Bonjour à tou(te)s,
Bonjour Chris,

Au lieu de KeyPress, utilises l'événement KeyDown:

Private Sub SS1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If Len(SS1) = SS1.MaxLength Then
SS2 = keyccode
SS2.SetFocus
End If
End Sub

Private Sub SS2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If Len(SS2) = SS2.MaxLength Then
SS3 = keyccode
SS3.SetFocus
End If
End Sub


Cordialement.

PS: maintenant, si tu as un grand nombre de TextBox, la solution par modules de classe proposée par Nicole est de loin préférable mais elle demande une certaine maîtrise de VBA.

Bon finalement je crois que c'est cette solution qui fonctionne le mieux.
Je vais adapter tout ça.
Merci
 

Discussions similaires

Statistiques des forums

Discussions
315 104
Messages
2 116 253
Membres
112 702
dernier inscrit
JRCa91