QUELLE CLASSE ! à limiter à 7 caractères

mikeo

XLDnaute Occasionnel
Bonjour à tous,

Les cours de Laetitia ont commencé à rentrer mais j'ai encore des difficultés sur les modules de classe.

Je voudrais, dans la saisie des textbox, à travers un module de classe :

1 :limiter la longueur des saisies à 7 chiffres ou caractères

- 2 : s'il y a moins de 7 caractères, compléter par des 0 jusqu'à 7 caractères.

Merci à vous.

Mikeo
 

Pièces jointes

  • LACLASSE.xls
    31.5 KB · Affichages: 49
  • LACLASSE.xls
    31.5 KB · Affichages: 46
  • LACLASSE.xls
    31.5 KB · Affichages: 47

fhoest

XLDnaute Accro
Re : QUELLE CLASSE ! à limiter à 7 caractères

Bonsoir,
pas tester mais je pense qu'il suffit de mettre l'instruction maxlenght dans le module de classe
Code:
Public WithEvents Txt As MSForms.TextBox, i As Byte, x As Variant

Private Sub Txt_keyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Txt.MaxLength = 7
With UserForm1
If InStr("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" & vbCr & vbBack, Chr(KeyAscii)) = 0 Then KeyAscii = 0
End With

End Sub
A+
 

mikeo

XLDnaute Occasionnel
Re : QUELLE CLASSE ! à limiter à 7 caractères

Bonjour au forum, fhoest,

Merci fhoest, c'est bon pour la première question avec maxlength.

Mais pour la 2è ? : Si le nombre des caractères est inférieur à 7, compléter avec des "0". Il y a toujours une instruction que vous sortez du chapeau sans passer par des "si" à tiroirs. Mais il faut la trouver.

A+
 

Pierrot93

XLDnaute Barbatruc
Re : QUELLE CLASSE ! à limiter à 7 caractères

Bonjour à tous

perso, pour la limitation du nombre de caractères, je le ferait une fois pour toute lors de l'initialisation de l'usf, plutot qu'à chaque pression sur une touche... me semble plus rationnel, enfin c'est juste mon avis...

bonne journée
@+
 

JNP

XLDnaute Barbatruc
Re : QUELLE CLASSE ! à limiter à 7 caractères

Bonjour le fil :),
Le problème est qu'en module de classe, il n'est pas possible (il me semble) de gérer Exit ou Enter :eek:...
Or, comment veux-tu savoir quel est le moment adequat pour complèter ton TextBox avec des 0 sans disposer de ces événements :confused: ?
Sinon, il faut envisager tous les cas (KeyPress pour la tabulation, Click pour le changement de TextBox, etc., et à chaque fois, scanner tous les Textbox dans lequel tu n'es pas pour savoir s'il y en a à complèter :p... Bonjour les temps de réponse :rolleyes:...
Bon courage :cool:
 

mikeo

XLDnaute Occasionnel
Re : QUELLE CLASSE ! à limiter à 7 caractères

Bonjour JNP, Pierrot, Habitude, le forum

Merci d'être intervenus.

J'ai essayé par FORMAT mais il me complète des 0 par la gauche, c'est pas bon.

JNP a raison car avec click et enter, ça ne marche pas. Tout ce que j'ai trouvé c'est de passer par MOUSEUP mais je ne suis pas tout à fait satisfait car ce n'est pas automatique.

Code:
Private Sub Txt_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Len(Txt.Text) < 7 Then
    X = 7 - Len(Txt.Text)
    For i = 1 To X
    Txt.Text = Txt.Text & 0
    Next
End If

End Sub

S'il n'y a pas d'autre solution, c'est ce que je vais faire.

Bonne journée à tous.
 

Pièces jointes

  • LACLASSE.xls
    34.5 KB · Affichages: 35
  • LACLASSE.xls
    34.5 KB · Affichages: 37
  • LACLASSE.xls
    34.5 KB · Affichages: 37

laetitia90

XLDnaute Barbatruc
Re : QUELLE CLASSE ! à limiter à 7 caractères

bonjour mikeo,JNP,Pierrot93,Habitude,fhoest:):):):):):):)
peut être tenter un truc dans ce genre mais bon!!!

Code:
Public WithEvents Txt As MSForms.TextBox
Private Sub txt_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 And Txt <> "" And Len(Txt) < 7 Then
Do Until Len(Txt) = 7
Txt = Txt & 0
Loop
End If
End Sub

eventuellent recuperer le keycode de deplacement vers le bas en plus???

keycode vers le bas =40
ce qui donne pour la condition

Code:
If (KeyCode = 13 Or KeyCode = 40) And Txt <> "" And Len(Txt) < 7 Then
 
Dernière édition:

GeoTrouvePas

XLDnaute Impliqué
Re : QUELLE CLASSE ! à limiter à 7 caractères

Bonjour tout le monde,

Ah les contrôles de saisie via module de classe... Mon grand dada en ce moment !

Le problème est qu'en module de classe, il n'est pas possible (il me semble) de gérer Exit ou Enter :eek:...

Effectivement, ça n'est pas possible "d'origine" mais une grosse bidouille est possible. J'avais d'ailleurs posé la question sur ce post et Klin89 y avait apporté une réponse adéquat.

Par contre je n'ai vraiment pas réussi à l'adapter à mon cas. Et pourtant je me suis vraiment creuser le crâne dessus.
 

JNP

XLDnaute Barbatruc
Re : QUELLE CLASSE ! à limiter à 7 caractères

Re :),
Par contre je n'ai vraiment pas réussi à l'adapter à mon cas. Et pourtant je me suis vraiment creuser le crâne dessus.
Un petit coup de fatigue :p ?
Non, vraiment très interressant ce code ;) !
En utilisant ce module de classe fourni dans le post de MichelXLD
Code:
'---- dans un module de classe nommé Classe2
Option Explicit
Public Event GetFocus()
Public Event LostFocus(ByVal Txtbx As String)
Public nomObjActif As String
 
Public Sub cibleFocus(USF As MSForms.UserForm)
With USF
        If TypeName(.ActiveControl) = "TextBox" Then
            nomObjActif = .ActiveControl.Name
            On Error GoTo errorHandler
            Do
                DoEvents
                If .ActiveControl.Name <> nomObjActif Then
                    If TypeName(.ActiveControl) = "TextBox" Then
                        RaiseEvent LostFocus(nomObjActif)
                        nomObjActif = .ActiveControl.Name
                        RaiseEvent GetFocus
                    End If
                End If
            Loop
            End If
End With
 
errorHandler:
Exit Sub
End Sub
et dans l'USF
Code:
'---  dans l'UserForm  ---
Option Explicit
Private WithEvents USF As Classe2
 
Private Sub UserForm_Activate()
    Set USF = New Classe2
    TextBox1.SetFocus
    USF.cibleFocus Me
End Sub
 
Private Sub UserForm_Initialize()
Dim MonControle As Control
For Each MonControle In Me.Controls
    If TypeName(MonControle) = "TextBox" Then
        MonControle.MaxLength = 7
    End If
Next MonControle
End Sub
Private Sub USF_GetFocus()
End Sub
 
Private Sub USF_LostFocus(ByVal Txtbx As String)
If Len(Me.Controls(Txtbx)) < 8 Then Me.Controls(Txtbx) = _
    Me.Controls(Txtbx) & String(7 - Len(Me.Controls(Txtbx)), "0")
End Sub
 
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Set USF = Nothing
End Sub
Ça fonctionne (tout au moins en 2007 :rolleyes:...).
J'ai pas testé la compatibilité avec ton autre module de classe :)...
Bonne soirée :cool:
 

GeoTrouvePas

XLDnaute Impliqué
Re : QUELLE CLASSE ! à limiter à 7 caractères

J'ai beau avoir fait des progrès considérables depuis un an (je partais de loin ^^), je n'arrive pas à comprendre ce code. La dernière fois ça m'a valu un claquage de cerveau suivi d'une transplatation de cellules grises. Tout avait fondu à cause de la surchauffe.

Ce code me semble absolument génial mais je n'ai pas réussi à l'épurer et à l'adapter à mon cas (je voulais simplement gérer les formats d'affichage en entrée et sortie de certains textbox).

Après je suis d'accord avec toi, ce code semble magnifique.
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : QUELLE CLASSE ! à limiter à 7 caractères

Re
Ce code me semble absolument génial mais je n'ai pas réussi à l'épurer et à l'adapter à mon cas (je voulais simplement gérer les formats d'affichage en entrée et sortie de certains textbox).
C'est moi qui ai mal lu :eek:...
Par habitude, j'ai lu
Par contre je n'ai vraiment pas réussi à l'adapter à ton cas
et non
Par contre je n'ai vraiment pas réussi à l'adapter à mon cas
On peut donc essayer de s'occuper de ton cas maintenant, si tu es un peu plus prolixe dans tes explications :rolleyes:...
Que veux-tu gérer dans tes formats d'affichage (un petit fichier exemple en prime) ;) ?
Bonne soirée :cool:
 

Discussions similaires

Statistiques des forums

Discussions
312 330
Messages
2 087 341
Membres
103 524
dernier inscrit
Smile1813