• Initiateur de la discussion Initiateur de la discussion Pateros
  • 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 !

Pateros

XLDnaute Nouveau
Bonjour,

Je travaille en ce moment sur un formulaire ou j'ai des zones de texte.
Ce que je sais pas faire c'est mettre des tirets ou underscores dans une zone pour indiquer à l'utilisateur qui va se servir du formulaire le nombre de caractères à insérer et à ne pas dépasser.

Par exemple mettre : "----/----" dans la zone. (Le / ne dois pas bouger et ne pas être effacer).

Puis au fur à mesure qu'il rentre un charactère mettre le premier charactère dans la zone de texte avec le reste des tirets (max. 8 charactères).

Par exemple: "X---/----"

Merci beaucoup
Bonne journée

Excel 2003
 
Re : Masque de saisie

Bonjour Pateros

Il suffit d'initialiser ton textbox avec ----/----.

Puis de tester au changement du textbox (textbox_change), la frappe et de l'inscrire avec les modifs (en général, on utilise len, left, right, mid avec $ quelques fois).

C'est pas très simple à faire (enfin pour moi 🙂).
 
Re : Masque de saisie

Salut,

J'ai essayé avec le code suivant mais ca marche pas.
Je sais pas qu'est ce qu'il faut mettre d'autre je suis débutante.

Private Sub TextBox1_change()

TextBox1 = "----/----"
If Len(TextBox1) > 9 Then
TextBox1 = Left(TextBox1, 9)
End If

End Sub

Merci
 
Re : Masque de saisie

Re, Bonjour Jean-Marcel

Ah Jean-Marcel, très bien ta démarche 😉.

Adaptation de ton code à tester 🙂.

Mais après, on peut avoir des problèmes sur une grosse application 😕.

Code:
Private NBValeurSaisie
Private Sub TextBox1_Change()
   ValeurActuelle = TextBox1
   NBValeurSaisie = NBValeurSaisie + 1
   ValeurInitiale = "----/----"
   AncienneValeur = Left(TextBox1, NBValeurSaisie)
   If NBValeurSaisie = 4 Then
        NBValeurSaisie = 5
        AncienneValeur = AncienneValeur & "/"
   End If
 
   If Len(AncienneValeur) <= 9 Then
        If ValeurActuelle <> AncienneValeur & Right(ValeurInitiale, 9 - Len(AncienneValeur)) Then
            NBValeurSaisie = NBValeurSaisie - 1
        End If
        TextBox1 = AncienneValeur & Right(ValeurInitiale, 9 - Len(AncienneValeur))
   End If
  Application.EnableEvents = False
SendKeys ("^{home}")
For i = 1 To (NBValeurSaisie)
SendKeys ("{right}")
Next
Application.EnableEvents = True
End Sub
Private Sub UserForm_Click()
End Sub
Private Sub UserForm_Initialize()
TextBox1.SetFocus
SendKeys ("^{home}")
End Sub
 
Re : Masque de saisie

Re, Bonjour Philippe

Philippe: Bravo pour ta version (j'aime bien avoir plusieurs possibilités).

Jean-Marcel: Voici ton fichier adapté avec 2 Textbox (en module de classe, cela doit être bien, mais trop complexe pour moi 😉).

Voila, si d'autres ont des solutions à ce problème épineux qui est de facilement programmer des masques de saisie (J'en connaît un comme Géo qui va être content 😛).

Merci à tous et à Pateros qui a initié cette discussion 🙂.
 

Pièces jointes

Re : Masque de saisie

Re , Bonjour PierreJean, Bruno (Youky)​

Merci pour vos solutions intéressantes. Cela nous en fait 4.​

Juste un petit problème est que si on se trompe il faudra réinitialisé le textbox. Bon c'est pas grave 😱.​

Sinon, un truc sympa ce serait qu'on puisse choisir au départ le format
ex: 11/11/1111 avec des chiffres et en mettant des a, si on veut des lettres.​

Je vous laisse cogiter. Prenez votre temps, on n'est pas pressé 😉. (sinon en cherchant sur XLD masque saisie dans le titre, on devrait retrouver facilement cette discussion)​

Ah! je vois que Bruno nous a mis un petit fichier sympa ici​


Merci Bruno 🙂

Bonne soirée 🙂.​
 
Dernière édition:
Re : Masque de saisie

Re 🙂,
Et voici la version "Numérique uniquement" 😉
Code:
Private Sub TextBox1_Change()
Dim N
With TextBox1
Select Case .SelStart
Case 1 To 3, 5 To 8
If Not IsNumeric(Mid(TextBox1.Value, .SelStart, 1)) Then
N = .SelStart
.Text = Left(.Text, N - 1) & "-" & Right(.Text, 9 - N)
.SelStart = N - 1
End If
.SelLength = 1
Case 4
.SelStart = 5
.SelLength = 1
Case Else
.SelStart = 0
.SelLength = 1
End Select
End With
End Sub
A + 😎
 
Re : Masque de saisie

Re re 🙂,
Et voici une version avec choix du type de masque (Chiffres, Majuscules, Minuscules, Mixte, ou ce que vous voudrez à condition de saisir le Pattern correctement 😛.
Je sais, il manque les dates, mais je pense que ça doit être jouable avec un peu de patience 😀...
A + 😎
 

Pièces jointes

Re : Masque de saisie

Bonjour Jean-Noël, à tous

Jean-Noël: Alors la 😱 c'est du grand art que nous soumet.

Bravo pour cet exercice de style qui va rester un must sur XLD.

En plus Regexp, si cher à JM 😉. Mais j'ai pas bien compris son utilité. On peut l'enlever? 😕

Ah! Noël en septembre, c'est Cool 🙂.
 
Re : Masque de saisie

Re 🙂,
Tu n'as pas du tester mon #16 😛...
Le code RegExp de mon #14 n'était qu'un oubli d'un copier/coller (il fonctionne sans RegExp), mon premier élan allant vers RegExp, le 2ème simplifiant les choses, et seul le dermier l'utilisait 😀...
Mais merci de ton soutien 😉.
A +, dès que j'ai établi les patterns des dates 😱... 😎
 
- 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

Retour