Module de Classe

Banzai64

XLDnaute Accro
Bonjour

Un petit (grand) problème

Voilà, ayant à gérer un Usf avec environ 300 contrôles (qui ne sont pas tous affichés en même temps).
Pour gérer les TextBox (environ 120) je suis passé par un module de classe

Code:
Public WithEvents TxTBox As MSForms.textbox
(question subsidiaire: Pourquoi textbox reste en minuscule)

Donc j'aimerai intercepter l'évènement Exit afin de formater le TextBox avec Format(TxtBox.Value,"0.00")

Mais cet évènement n'existe pas dans le module de classe quand on choisit TxtBox dans la liste déroulante en haut gauche et la liste des évènements dans la liste déroulante en haut droite

Voir image jointe

Module de Classe.jpg

Est-ce qu'il y a un moyen de résoudre ce problème ?

Si besoin est je pourrais (enfin je crois) fournir un fichier

Merci de votre temps passé à lire ce post et de toute aide apportée
 

Banzai64

XLDnaute Accro
Re : Module de Classe

Bonjour le fil

Merci de ton aide Robert

Malheureusement le programme de Bqtr passe par l'évènement Keypress qui lui est bien répertorié dans la liste (Voir image (pas facile)) du Post 1

Moi j'aurais besoin de passer par l'évènement Exit (qui existe pour un TextBox "Normal")
Car je veux formater la valeur une fois que l'on sort du TextBox

Merci en tout cas de t'intéresser à mon problème

A défaut
Peut-être dans l'événement Click faire une boucle pour formater tous les TextBox (121)

Pfff je viens de voir il n'existe pas le Click

Bonne journée
 
Dernière édition:

Banzai64

XLDnaute Accro
Re : Module de Classe

Re forum

Bonjour Paritec

J'avoue je n'avais pas essayé

Mais cela ne fonctionne pas comme il faut
Dès que je tape le 1er chiffre celui-ci est bien formaté, mais le curseur passe à fin du nombre formaté.
Donc pour inscrire la bonne valeur cela passe par des déplacements du curseur (pas évident du tout)
Même l'effacement est surprenant

Préfère de ne pas avoir de format que de passer par cet événement (trop compliqué à gérer)

Merci pour l'aide en tout cas
 

Banzai64

XLDnaute Accro
Re : Module de Classe

Re Forum

Bonjour kiki29

Merci mais pas encore ça (Suis difficile hein)
J'ai regardé les fichiers mais ce n'est pas ce que je recherche

Pour résumer je cherche à créer un événement dans un module de classe pour un type de contrôle

Peut-être que cela n'est pas possible

Merci de tous vos efforts

Je cherche de mon côté aussi bien sur
 

laetitia90

XLDnaute Barbatruc
Re : Module de Classe

bonjour tous tu peus peut être utiliser MouseMove??
exemple code user

Code:
Option Explicit
Dim txt(1 To 10) As New classe1, i As Byte
Private Sub UserForm_Initialize()
For i = 1 To 10: Set txt(i).txt = Controls("textbox" & i): Next i
End Sub

code classe

Code:
Option Explicit
Public WithEvents txt As MSForms.TextBox, i As Byte
Private Sub txt_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("0123456789.", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub
Private Sub txt_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
For i = 1 To 10
If UserForm1.Controls("Textbox" & (i)).Value <> "" Then txt = Format(txt, "0.00")
next
End Sub

oups j'avais oublie next
autrement MouseMove dans l'user
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Module de Classe

Bonjour à tous,

je dois avouer que je ne maîtrise pas les modules de classes, mais en effet il ne semble pas y avoir tous les évènements, et surtout pas Exit... Et comme il ne semble pas y avoir quelque chose d'approchant, ça risque d'être compliqué
 

MJ13

XLDnaute Barbatruc
Re : Module de Classe

Bonjour à tous

Pas sur que cela aide, mais, j'avais fait il y a peu un fichier avec module de classe sur des textboxs sur le keyup.

Voir ici

https://www.excel-downloads.com/threads/aide-pour-finaliser-et-modifier-ma-petite-macro.150591/

et la

https://www.excel-downloads.com/threads/aide-pour-finaliser-et-modifier-ma-petite-macro.150591/


Si besoin est je pourrais (enfin je crois) fournir un fichier

Banzai: C'est vrai qu'avec un fichier ce serait plus simple pour t'aider.

Après test, cela ne conviendra pas, mieux vaut prendre une autre solution :).
 
Dernière édition:

Banzai64

XLDnaute Accro
Re : Module de Classe

Re

Bonjour laetitia90, tototiti2008, Fo_rum

La solution ingénieuse de laetitia90 est très bien pour le moment

C'est sa solution (qui risque d'être définitive) que j'intègre dans mon fichier

Merci à tous de leur aide

Mais le sujet n'est pas clos et si d'autres solutions apparaissent je les regarderais avec intérêt

Pour Fo_rum : Que des TextBox avec des nombres

Pour info voici le code que je vais utiliser

VB:
 Option Explicit

Public WithEvents TxTBox As MSForms.textbox

Private Sub TxTBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If InStr("0123456789,", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

Private Sub TxTBox_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim I As Integer
  For I = 1 To UBound(MesBox) - 1
    If MesBox(I).TxTBox.Value <> "" Then MesBox(I).TxTBox.Value = Format(CDbl(MesBox(I).TxTBox), "0.00")
  Next
End Sub

PS: Pendant l'édition de ce message beaucoup de réponses, que je vais regarder
 
Dernière édition:

Fo_rum

XLDnaute Accro
Re : Module de Classe

Re

pour parfaire la chose (si besoin en est), l'ajout d'une ligne
Code:
Private Sub TxTBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If InStr("0123456789,", Chr(KeyAscii)) = 0 Then KeyAscii = 0
  [B]If KeyAscii = 44 And TxTBox Like "*,*" Then KeyAscii = 0[/B]
End Sub

évite d'avoir plusieurs virgules à cause de doigts gourds (surtout avec le froid qui arrive).
 

laetitia90

XLDnaute Barbatruc
Re : Module de Classe

rebonjour tous je viens de regarder les exemples donner
celui qui me semble tres interessant c'est celui de MichelXLD
utilisation de
&
je pensais pas qu'on puissent l'utiliser en vba en vb ok a méditer

autrement je pense que MouseMove apporte plus de "souplesse" sur l'user
eventuellement on peut se passer de boucle
CDbl pas forcemement utile a ce stade il faut l'utiliser au dernier moment addition dans textboxs envoi donnees dans feuille & encore .value peut être suffisant dans beaucoup de cas... a moins qu'on manipule des dates par exemple
un autre exemple avec mousse sur user
Code:
Option Explicit
Dim txt(1 To 10) As New Classe1, i As Byte
Private Sub UserForm_Initialize()
For i = 1 To 10: Set txt(i).txt = Controls("textbox" & i): txt(i).Init Me: Next i
End Sub

Code:
Option Explicit
Public WithEvents txt As MSForms.textbox, WithEvents user As MSForms.UserForm
Private Sub txt_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("0123456789.", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub
Private Sub user_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If txt <> "" Then txt = Format(txt, "0.00")
End Sub
Sub Init(Form As MSForms.UserForm)
Set user = Form
End Sub

interessant skoobi
 
Dernière édition:

Discussions similaires

Réponses
29
Affichages
924

Statistiques des forums

Discussions
312 219
Messages
2 086 372
Membres
103 198
dernier inscrit
CACCIATORE