Masque de saisie

cs_apz Messages postés 281 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 11 avril 2013 - 6 janv. 2012 à 21:48
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 15 janv. 2012 à 19:52
Bonsoir à tous,

J'aimerais appliquer un masque pour la saisie d'un numéro de téléphone de la sorte :

"011 __ __ __"

Un code ici :

http://www.excel-downloads.com/forum/175704-masque-de-saisie.html#post1079963

Mais reste à bien traiter la touche "Suppr".

Merci d'avance.

81 réponses

Utilisateur anonyme
12 janv. 2012 à 13:08
Re:

beaucoup d'efforts pour un gadget dont l'utilité réelle reste à démontrer.

Tu m’étonnes ... je ne te le fais pas dire

Ok on reprend alors...




CF2i - Guadeloupe
Ingénierie Informatique
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 janv. 2012 à 14:37
Faut pas s'inquiéter si je demande maintenant quelques heures de plus.
Justification de ce retard : je suis en train d'y ajouter maintenant (tout le reste est fini) de quoi "empoisonner l'existence" des amoureux de la moulinette/robot/craqueur-mot-de-passe , dans la foulée.
(un autre petit jonglage, donc)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
13 janv. 2012 à 16:46
Salut,

Moi aussi je suis dessus ça commence à prendre forme...

Cordialement





CF2i - Guadeloupe
Ingénierie Informatique
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 janv. 2012 à 23:30
Te voilà "servi", apz ===>>
Clique donc ici tu y trouveras à la fois ton bonheur et beaucoup de malheur.
Si tu veux tenter d'analyser : munis-toi du matériel recommandé : un casque, une escopette à canons juxtaposés, une bonne paire de jumelles, du sparadrap (si tu te grattes la tête) et quelques cachets d'aspirine (environ un par heure).
Bonne chance et bon week-end.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
14 janv. 2012 à 02:50
Alors,
La chasse aux fantômes est ouverte!
Jacques j'ai vu ce que tu as fait (et bien) et soit j'ai toujours rien compris du résultat attendu, soit j'ai encore picolé un verre de trop...

Bon, par contre toujours en vb6, je le voyais différemment, le masque de saisie... testez-le et vous me dites ce qui est correct (à mon avis c'est plus simple que de dire ce qui n'est pas correct )...

Dim Masque, Caractère, St As String
Dim ChrsAffichés, Compteur, i, Rt As Integer
Dim ToucheSupp As Boolean

Private Sub Form_Load()
Masque = "### ## ## ##"
Caractère = "_"
ChrsAffichés = 3
Formate
Text1.SelStart = 0
Text1.SelLength = 1
Text1.MaxLength = Len(Masque)
Text5.MaxLength = 1
Text4.MaxLength = 1
End Sub

Private Sub SelectNext()
St = Text1.Tag
St = Replace(St, " ", "")
Compteur = 0
'On sélectionne le prochain emplacement
For i = 1 To Len(Text1.Text)
   If Mid(Text1.Text, i, 1) <> " " Then
      Compteur = Compteur + 1
      If Compteur > Len(St) Then
         Text1.SetFocus
         Text1.SelStart = i - 1
         Text1.SelLength = 1
         Exit For
      End If
   End If
Next i
'Si le numéro est complet on déselectionne le texte
'et le contenu de Text1.Tag est prêt à être utilisé
If Len(Text1.Tag) = Len(Masque) Then
   Text1.SelStart = Len(Text1.Text)
   Text1.SelLength = 0
   'List1.AddItem Text1.Tag
End If
End Sub

Private Sub Text1_Change()
If Len(Text1.Text) < Len(Masque) Then
   If ToucheSupp = False Then
      St = Text1.Tag
      If Len(St) > 0 Then
         St = Replace(St, " ", "")
         St = Left(St, Len(St) - 1)
         Text1.Tag = St
      End If
   End If
   Formate
End If
End Sub

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 46 Then
   ToucheSupp = True
Else
   ToucheSupp = False
End If
End Sub

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
SelectNext
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
   If IsNumeric(Chr(KeyAscii)) True Or KeyAscii 8 Then
      If KeyAscii <> 8 Then
         Text1.Tag = Text1.Tag & Chr(KeyAscii)
         Formate
         'Si le nombre de chiffres à afficher est atteint on les remplace par le caratère
         If IsNumeric(Mid(Text1.Text, ChrsAffichés, 1)) True Then KeyAscii 0
      End If
   Else
      KeyAscii = 0
   End If
   If Len(Text1.Tag) Len(Masque) And KeyAscii <> 8 Then KeyAscii 0
End Sub

Private Sub Formate()
 Compteur = 0
 St = ""
 Text1.Tag = Replace(Text1.Tag, " ", "")
 For Rt = 1 To Len(Masque)
     If Mid(Masque, Rt, 1) = "#" Then
        Compteur = Compteur + 1
        If Compteur > Len(Text1.Tag) Then Exit For
        St = St & Mid(Text1.Tag, Compteur, 1)
     Else
        St = St & " "
     End If
 Next Rt
 Text1.Tag = St
 St = ""
 For Rt = 1 To Len(Masque)
    If Mid(Masque, Rt, 1) = " " Then
       St = St & " "
    Else
       If Rt <= Len(Text1.Tag) Then
          If Rt <= ChrsAffichés Then
             St = St & Mid(Text1.Tag, Rt, 1)
          Else
             St = St & Caractère
          End If
       Else
          St = St & Caractère
       End If
    End If
 Next Rt
 Me.Caption = "Le numéro est le: " & Text1.Tag
 Text1.Text = St
End Sub





CF2i - Guadeloupe
Ingénierie Informatique
0
Utilisateur anonyme
14 janv. 2012 à 03:01
Pardon,
le Text4 et le Text5 dans le Form_Load n'ont rien à faire la dedans, c'était pour mes tests...

Il faut juste une Form et un TextBox (Text1).




CF2i - Guadeloupe
Ingénierie Informatique
0
Utilisateur anonyme
14 janv. 2012 à 03:20
Re-pardon,

Il y a des erreurs si l'on augmente la valeur de ChrsAffichés, et je pense que si l'on change le format aussi (Masque), si ça convient à la demande je vais le rectifier demain matin tête fraîche (il est 22h20 chez moi).

Je voulais aussi dire qu'on pourrait aussi utiliser:
Text1.Tag = Format(Text1.Tag, Masque)

Ça fonctionne, mais le problème c'est qu'il supprime les zéros au début du texte, et les numéros de tel commencent par zéro (0033 par exemple) c'est pour ça que je le fais manuellement.

Cordialement



CF2i - Guadeloupe
Ingénierie Informatique
0
cs_apz Messages postés 281 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 11 avril 2013
14 janv. 2012 à 11:36
Bonjour ucfoutu, acive

Un premier test de ton code ucfoutu, j'ai remarqué qu'il y a un blocage de la touche flèche gauche (pour se positionner sur le chiffre à supprimer).

Elle ne fonctionne que pour un seul caractère.

Acive -> j'ai fait quelques modifications sur ton code pour qu'il fonctionne sous vba et j'ai vu que seuls les trois premiers chiffres qui s'affichent dans le TextBox et que le tout s'affichent dans l'intitulé de la forme.

Egalement la touche flèche gauche ne fonctionne que pour un seul caractère.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 janv. 2012 à 11:41
A apt.

Ce blocage est délibéré et correspond à une ligne précise et volontaire du code : il a pour vocation de ne pas permettre de se "promener" au delà à l'intérieur de ce qui est déjà saisi, que ce soit pour effacer ou pour remplacer.
Si tu veux supprimer plus : à faire avec backspace, ou à sélectionner de droite à gauche puis suppr.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 janv. 2012 à 11:47
En d'autres termes : je ne permets aucune suppression, aucun remplacement, etc ... qui ne serait ou n'inclurait pas le dernier caractère saisi. (et pour cause !)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
14 janv. 2012 à 12:52
Salut APZ,

D'abord excuse moi pour le VB6 mais j'ai un peu du mal avec les anciens langages.

J'ai aussi pensé que tu voulais afficher que les trois premiers numéros, (comme la saisie d'un numéro de compte bancaire, pour éviter que la personne derrière le rédacteur ne puisse pas le lire).

Ceci-dit, mon code permet l'affichage de tous les chiffres, il suffit de faire ChrsAffichés = Len(Masque), mais hier je me suis aperçu d'une erreur quand cette valeur dépasse 3 (je vais rectifier ça).

Sinon, j'ai voulu gérer le déplacement avec les flèches, mais ça se complique pas mal, car il faut connaitre la position du curseur, y compris quand on clique avec la souris, je vais voir comment on peux faire.

Pour l'instant on peux effacer uniquement avec Backspace.




CF2i - Guadeloupe
Ingénierie Informatique
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 janv. 2012 à 12:59
Et tu as bien raison, acive, de ne pas permettre autre chose que cette possibilité
Si cela échappe à apt, c'est qu'il est donc très loin d'avoir "cerné" les contraintes, les conséquences, et tutti quanti ....
Et je sais maintenant qu'il est par ailleurs incapable de pister les fantômes et ce qu'ils empêchent (alors que cette manoeuvre d'empêchement est la plus visible, pourtant, dans le labyrinthe qu'il a eu le loisir de lire)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
14 janv. 2012 à 13:34
Salut Jacques,

Mais je pense que c'est gérable, même avec déplacement du curseur avec un clique de souris, je m'y pencherais plus tard.

Mais en réfléchissant bien, avec ma logique (celle de cacher les chiffres tapés), si le gars efface un chiffre au milieu du texte sans savoir trop ce qu'il efface, ça peux que compliquer la saisie.

Je crois que t'as raison il faut utiliser uniquement le backspace, car on connait tous les numéros de tel toujours dans l'ordre (069038...), donc s'il a un doute il vaux mieux recommencer tout le numéro.
Sinon ce n'est plus des chiffres fantôme, c'est carrément toute la maison hantée...

Je pense que je vais ajouter une source avec mon code (une fois terminé), ça pourrait servir à quelqu'un pour la saisie des numéros de compte.

Cordialement



CF2i - Guadeloupe
Ingénierie Informatique
0
cs_apz Messages postés 281 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 11 avril 2013
14 janv. 2012 à 14:40
D'accord, si vous voyez que c'est mieux d'effacer seulement avec le BackSpace.

Mais il faut penser à informer l'utilisateur qu'il ne doit utiliser que cette procédure pour rectifier sa saisie (Il sera surement étonner que les touches flèche gauche et "Suppr" ne fonctionnaient plus )

Et merci encore de votre patience
0
Utilisateur anonyme
14 janv. 2012 à 14:54
Ça dépend si l'utilisateur voit ce qu'il efface ou pas...

Je vais te le faire mais tu verras les erreurs qu'ils vont commettre à la saisie, tandis que de la façon qu'on l'a fait, tu n'as pas à informer l'utilisateur, il n'aura pas le choix, il va bien s'en rendre compte que c'est le seul moyen pour effacer.

Pour l'instant je rectifie l'erreur des caractères visibles




CF2i - Guadeloupe
Ingénierie Informatique
0
cs_apz Messages postés 281 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 11 avril 2013
14 janv. 2012 à 15:06
Et pour la non découverte de ton "fameux fantôme" c'est parce que je n'ai pas encore décortiqué le code.

En tout cas j'espère bien le trouver
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 janv. 2012 à 16:00
En tout cas j'espère bien le trouver


C'est le seul intérêt de tout ce bout de code. Trouver ce fantôme, c'est en comprendre le mécanisme. Tout le reste n'est que du pipeau
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
14 janv. 2012 à 16:25
Re:

Ça y est, le mien est fonctionnel en vb6, téléchargeable ICI.

Cordialement



CF2i - Guadeloupe
Ingénierie Informatique
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 janv. 2012 à 16:44
Très bon travail sous VB6, acive
Juste un petit truc (rien à voir avec le mécanisme du code) :

Retourne et débride la longueur des textbox 4 et 5 ici :
Text5.MaxLength = 1
Text4.MaxLength = 1

de sorte à ne pas te limiter à 9 chiffres.
Monte cette barre à 2, ce qui te permettra de formater des nombre bien plus grands, sans rien changer d'autre.
Toutes mes félicitations pour ce travail


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
14 janv. 2012 à 16:52
Oui, pardon je l'avais mis au début, je l'ai enlevé pour vous envoyer le code et j'ai oublié de le remettre...

Merci pour le "bon travail", du coup je me sens un peu moins "rouillé" en VB6 (ça fait des années que j'y touchais plus)

Sinon en revenant au problème de apz, on pourrait éventuellement prévoir la remise en route de la touche Supp et des flèches une fois que tout le texte s'affiche à l'utilisateur uniquement.

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Rejoignez-nous