[Résolu] Module de classe pour TextBox

apt

XLDnaute Impliqué
Bonjour à tous,

J'ai créer un module de classe pour remplacer un traitement répétitif dans l'événement KeyDown des TextBox.

Mais voila, parfois les événements KeyDown des TextBox, contiennent des valeurs différentes et parfois des lignes de commande en plus l'un par rapport à l'autre.

Comment unifier le module de classe, tout en gardant les lignes de codes ou les quelques propriétés en plus.

- Les (.Text) parfois elle est égal à "", "T" ou "L3-"
- On trouve parfois Selstart dans des Textbox et pas d’autres

Merci.

Les Evenements à remplacer.


Code:
Private Sub tbN_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)    If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then        KeyCode = 0        With tbTr            .Text = "T"            .SelStart = Len(.Text)            .SetFocus        End With    End IfEnd SubPrivate Sub tbTr_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)    Dim Texte As String    Texte = tbTr.Text    If Len(Texte) = 4 Then Texte = Texte & "-"    tbTr.Text = Texte    If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then        KeyCode = 0        With tbPr            .Text = ""            .SetFocus        End With    End IfEnd SubPrivate Sub tbPr_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)    If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then        With tbL3            KeyCode = 0            .Text = "L3-"            .SelStart = Len(.Text)            .SetFocus        End With    End IfEnd SubPrivate Sub tbAD_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)    If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then        With tbPt            KeyCode = 0            .Text = ""            .SetFocus        End With    
End IfEnd Sub

-----
Classe : KeyControlClass

-----

Code:
Public WithEvents tbKey As MSForms.TextBoxPrivate Sub tbKey_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)    If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then        KeyCode = 0        With tbTr            .Text = "T" ' on trouve parfois .Text="", parfois .Text = "L3-" : Comment traiter ce probleme ?            .SelStart = Len(.Text)            .SetFocus        End With    End If   End Sub
----------Appel de la classe-----
Code:
Dim TBx(1 To 5) As New keyControlClassPrivate Sub UserForm_Initialize()    Dim b As Byte    Dim Ctl As MSForms.Control    b = 1    For Each Ctl In Me.Controls        If TypeOf Ctl Is MSForms.TextBox Then            TBx(b).tbKey = Ctl.Name            b = b + 1        End If    Next CtlEnd Sub

Mais quand j'appel mon userform avec FrmSaisie.Show ça bug.

Une solution ?

Merci d'avance

http://www.developpez.net/forums/d1170734/logiciels/microsoft-office/excel/macros-vba-excel/module-classe-textbox/

PJ
en :https://www.excel-downloads.com/threads/formulaire-modification-ajout-votre-opinion.175488/
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Module de classe pour TextBox

Bonjour le fil :),
Et oui Pierrot, encore un peu de crossposting signalé sur le tard :eek:...
Sinon, sans utiliser le .Tag, on peux aussi utiliser le .Name directement dans la classe pour savoir de quel TextBox il s'agit :rolleyes:...
Bonne suite :cool:
 

JNP

XLDnaute Barbatruc
Re : Module de classe pour TextBox

Re :),
Et je crois que le problème vient de que j'ai renomé tous les TextBox.

TextBox1 en tbN
TextBox2 en tbTr
...
TextBox6 en tbPr
Evidemment, pourquoi faire simple quand on peux faire compliqué :rolleyes:...
L'avantage du module de classe, c'est de pouvoir traiter en nombre, d'où l'intérêt de conserver la numérotation des TextBox :eek:...
Tu sais ce qu'il te reste à faire :p...
Bonne suite :cool:
 

apt

XLDnaute Impliqué
Re : Module de classe pour TextBox

Bonjour JNP,

J'ai renomé toutes mes TextBox selon l'ordre croissant et ça marche.

Merci bien.

Mais reste à traiter la derniere textbox.

Quand j'enfonce "Return" ou "TAB" TextBox6 est éffacé au lieu de passer au control suivant qui est un bouton "Enregistrer".
 

apt

XLDnaute Impliqué
Re : Module de classe pour TextBox

Bonsoir JNP,

J'ai fait des testes avec des MsgBox lors de l'attribution des événements de la classe aux TextBox, et j'ai constaté que le parcourt des contrôles par ordre croissant de 1 à 6 se fait normalement.

Mais en testant les touches "Return" et "TAB" ou MouseDown, j'ai découvert que l'avant dernière TextBox (5ème) s'appel bien TexBox6 et la dernière (6eme) s'appel TexBox5.


Je ne sais d’où vient cette erreur ?
 

Pièces jointes

  • saisie_v(3.1).xls
    90 KB · Affichages: 61
G

Guest

Guest
Re : Module de classe pour TextBox

Bonsoir,

Bien que tout ceci me paraisse aller vers l'usine à gaz, dans le userForm tu corrigeras ton problème avec:
Code:
Dim TBx(1 To 6) As New ClsTB       '---- keyControlClass
Private Sub UserForm_Initialize()
    Dim b As Byte
    For b = 1 To 6
        Set TBx(b).GrpTB = Me.Controls("Textbox" & b)
        TBx(b).GrpTB.Tag = b
    Next
End Sub

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 047
Messages
2 084 863
Membres
102 688
dernier inscrit
Biquet78