Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 événement Keypress sur textBox userform

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

tontonexcel

XLDnaute Occasionnel
Bonjour à tous

Je développe un petit formulaire qui contient 6 textbox, je souhaite imposer la saisie alpha en majuscules (au fur et à mesure de la saisie) j'ai donc trouvé ceci qui fonctionne très bien
VB:
Private Sub tb_saisie_phrase_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

Dim val_caractere As String

' Convertir valeur caractère en caractère alpha
val_caractere = Chr(KeyAscii)

' Convertir valeur alpha en caractère ANSI (MAJ TextBox)
KeyAscii = Asc(UCase(val_caractere))

End Sub
Ma problématique est que je voulais optimiser mon code et créer une sous procédure pour éviter de copier coller le code x fois (j'aurais peut-être plus de textBox)
Voici le code qui ne fonctionne pas (les caractères restent en minuscules)
Code:
Private Sub tb_saisie_phrase_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

Call test

End Sub

' -------------------Sous proc
Sub test()

Dim val_caractere As String

' Convertir valeur caractère en caractère alpha
val_caractere = Chr(KeyAscii)

' Convertir valeur alpha en caractère ANSI (MAJ TextBox)
KeyAscii = Asc(UCase(val_caractere))

End Sub
J'ai essayé de bricoler en déclarant notamment la variable KeyAscii en tête de module (voire en public) mais cela ne fonctionne pas. Lorsque je bascule en pas à pas la variable KeyAscii n'est pas initialisée et je pense qu'étant événementielle elle ne peut pas être prise en charge dans une autre procédure

Y a t'il une solution ?
Merci d'avance pour vos réponses
 
Solution
Bonjour le fil et ses intervenants

Y a t'il une solution ?
Merci d'avance pour vos réponses
Oui avec un module de classe
Exemple ci-dessous
(emprunté à M. Gaboly))
1) Insertion d'un module de classe
(qui sera renommé: ClasseTextBoxes
VB:
Option Explicit
Public WithEvents TextBoxes As MSForms.TextBox
Private Sub TextBoxes_Change()
TextBoxes = UCase(TextBoxes)
End Sub
Et dans le code de l'userform
VB:
Option Explicit
Dim TB() As New ClasseTextBoxes

Private Sub UserForm_Initialize()
Dim TextBoxesCount As Integer, c As Control
' Création de la collection de TextBoxes, gérée par le module de classe
TextBoxesCount = 0
For Each c In Controls
If TypeName(c) = "TextBox" Then
TextBoxesCount = TextBoxesCount + 1
ReDim...
Bonjour,

Il faudrait écrire :
VB:
Private Sub tb_saisie_phrase_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  test KeyAscii
End Sub
Sub test(Key)
  Key = Asc(UCase(Chr(Key)))
End Sub
Mais je pense qu'il est aussi simple d'écrire directement :
VB:
Private Sub tb_saisie_phrase_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub
 
Dernière édition:
Bonjour le fil et ses intervenants

Y a t'il une solution ?
Merci d'avance pour vos réponses
Oui avec un module de classe
Exemple ci-dessous
(emprunté à M. Gaboly))
1) Insertion d'un module de classe
(qui sera renommé: ClasseTextBoxes
VB:
Option Explicit
Public WithEvents TextBoxes As MSForms.TextBox
Private Sub TextBoxes_Change()
TextBoxes = UCase(TextBoxes)
End Sub
Et dans le code de l'userform
VB:
Option Explicit
Dim TB() As New ClasseTextBoxes

Private Sub UserForm_Initialize()
Dim TextBoxesCount As Integer, c As Control
' Création de la collection de TextBoxes, gérée par le module de classe
TextBoxesCount = 0
For Each c In Controls
If TypeName(c) = "TextBox" Then
TextBoxesCount = TextBoxesCount + 1
ReDim Preserve TB(1 To TextBoxesCount)
Set TB(TextBoxesCount).TextBoxes = c
End If
Next c
End Sub
EDITION: Ah, je n'avais pas vu le message#2
Bonjour Patrice33740
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…