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

QUELLE CLASSE ! à limiter à 7 caractères

  • Initiateur de la discussion Initiateur de la discussion mikeo
  • Date de début Date de début

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 !

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

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+
 
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+
 
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
@+
 
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 😱...
Or, comment veux-tu savoir quel est le moment adequat pour complèter ton TextBox avec des 0 sans disposer de ces événements 😕 ?
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 😛... Bonjour les temps de réponse 🙄...
Bon courage 😎
 
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

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:
Re : QUELLE CLASSE ! à limiter à 7 caractères

Bonjour Laetitia et rebonjour pour les autres,

Eh bien, encore une fois tu me permets d'avancer. Avec en prime des explications détaillées.

Merci beaucoup.

Mikeo
 
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 😱...

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.
 
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 😛 ?
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 🙄...).
J'ai pas testé la compatibilité avec ton autre module de classe 🙂...
Bonne soirée 😎
 
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:
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 😱...
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 🙄...
Que veux-tu gérer dans tes formats d'affichage (un petit fichier exemple en prime) 😉 ?
Bonne soirée 😎
 
Re : QUELLE CLASSE ! à limiter à 7 caractères

Mais tu sais bien que je ne fais rien comme d'habitude moi ^^

On peut donc essayer de s'occuper de ton cas maintenant, si tu es un peu plus prolixe dans tes explications 🙄...

Voilà une proposition qui n'est pas tombée dans l'oreille d'un sourd !
Je crée immédiatement un post dédié à ce sujet.

Merci !
 
- 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

  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
906
B
Réponses
4
Affichages
1 K
biuzi
B
Réponses
3
Affichages
1 K
Guest
G
Z
Réponses
5
Affichages
2 K
Z
G
Réponses
6
Affichages
1 K
G
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…