Module de classe avec évènement Exit
Bonsoir le Forum,
Je me lance dans les modules de classe.
Le but.
A la sortie du controle (parmi 30 numérique du même type), je souhaite un affichage sous format monétaire.
J'ai lu la contribution de Patrick Toulon. Mais je n'arrive pas cependant à l'appliquer dans ce cas précis.
Dans le code du formulaire
Code:
Dim texto() As New ClasseTextBox
Puis
Code:
1 2 3 4 5 6 7 8
| Dim ctrl As Control
For Each ctrl In Me.Controls
If TypeName(ctrl) = "TextBox" Then
T = T + 1
ReDim Preserve texto(1 To T)
Set texto(T).groupetexto = ctrl
End If
Next |
Bien ntendu, ce code de module de classe n'est pas effectif.
Code:
1 2 3 4 5
| Public WithEvents groupetexto As MSForms.TextBox
Private Sub groupetexto_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
groupetexto.Text = Format(groupetexto.Text, "# ### ### ")
End Sub |
car 11111 pour 11 111 € devient 1 € 1111, ce qui est logique.
Et je ne peux pas gérer la longueur car celle-ci est variable.
D'avance, merci pour vos lumières.
Simuler l'évènement Exit dans les TextBox d'un UserForm - module de classe
Bonjour,
Voici une démarche pour simuler l'évènement Exit dans les TextBoxes d'un UserForm.
L'exemple permet de formater le nombre inscrit dans une TextBox (1234.56 devient 1 234.56 €) mais on peut faire toute autre chose.
1) créer un UserForm1
2) y insérer quelques TextBoxes, quelques Labels , un CommandButton1
IMPORTANT : il est nécessaire qu'un contrôle TextBox soit le premier activé lors de l'ouverture du UserForm. Eventuellement, changer l'ordre de tabulation pour qu'un contrôle de ce type soit au premier rang.
3) copier le code suivant dans la fenêtre de code du UserForm
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| Private WithEvents USF As clsUSFTextBoxExit
Private Sub UserForm_Activate()
Set USF = New clsUSFTextBoxExit
USF.EventTextBoxExit Me
End Sub
Private Sub USF_ExitControl(ByVal ControlName As String)
Dim CTL As MSForms.Control
Set CTL = Me.Controls(ControlName)
'--- Force le format (pour illustrer l'usage de l'évènement Exit) ---
If TypeName(CTL) = "TextBox" Then CTL.Object.Text = Format(CTL.Object.Text, "# ### ##0.00 ")
'--------------------------------------------------------------------
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Set USF = Nothing
End Sub
Private Sub CommandButton1_Click()
Unload Me
End Sub |
4) créer un module de classe et le renommer clsUSFTextBoxExit
5) copier le code suivant dans le module de classe
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Public Event ExitControl(ByVal ControlName As String)
Public Sub EventTextBoxExit(USF As MSForms.UserForm)
Dim A$
With USF
If TypeName(.ActiveControl) = "TextBox" Then
A$ = .ActiveControl.Name
On Error GoTo Erreur
Do
DoEvents
If .ActiveControl.Name <> A$ Then
RaiseEvent ExitControl(A$)
A$ = .ActiveControl.Name
End If
Loop
End If
End With
Erreur:
End Sub |
Pour plus de facilité, je joins les classeurs exemples Excel 2003 et Excel 2007.