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

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 235
9 janv. 2012 à 20:45
Non seulement je pense avoir tout dit de ce qu'il fallait dire, mais, en plus, ce bout de code n'est pas de moi (et ne risque pas de l'être .... je n'aurais JAMAIS commis une telle bourde de rigidité par rapport à la souplesse supposée d'un masque ! ).
Bon...
continue donc à t'amuser, si tu veux A défaut d'atteindre un but valable et utile, cela te permettra de t'habituer à jongler
___________________
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 235
9 janv. 2012 à 20:53
Pour que tu comprennes mieux le sens exact de mon dernier message :
Je ne sais pas d'où tu tiens le bout de code montré, mais réfléchis donc un peu ! cela voudrait dire qu'il te faudrait faire autant de codes différents que de masques différents ! === >> C'est, sinon totalement absurde, tout au moins très très très éloigné de l'esprit informatique.


____________________
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 235
9 janv. 2012 à 20:57
Avec un tel code, par exemple et entre autres :
1) que demain la numérotation change de structure dans ton pays, et tu peux jeter ton code à la poubelle.
2) si l'on se "foule" à développer une saisie contrôlée sur la base d'un masque, ce "foulage" n'est justifié que s'il suffit de définir n'importe quel masque pour que le code s'y conforme.
Toute autre approche serait du pipeau - l'infini.


____________________
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 235
9 janv. 2012 à 21:29
le code de mise sur rail que je t'ai montré dès vendredi soir dernier (à 22 h 47) s'affranchit pae exemple d'une telle rigidité. On change le masque ? ===>> le code suit toujours.
Je t'ai précisé qu'il n'était qu'une "mise sur rail". Si tu tiens à te "fouler", ce sera sur ces "rails" qu'il te faudra apporter tes perfectionnements (pou des rails du même type, mais en aucun cas comme le montre ton dernier bout de code montré, qui est "figé" par des positions "arrêtées".)
Voilà


____________________
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
cs_apz Messages postés 281 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 11 avril 2013
10 janv. 2012 à 12:52
Bonjour,

J'ai modifié cette ligne (ajouté le touche retour suppression) :

If KeyAscii 8 Or KeyAscii 46 Then Exit Sub


et modifié le masque de sortie en :

TextBox1.Text = Format(TextBox1.Text, "0## ## ## ##")


Le code :

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  
  If KeyAscii 8 Or KeyAscii 46 Then Exit Sub
  If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0
  
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 If Not Replace(TextBox1.Text, " ", "") Like "#########" Then
   MsgBox "saisie erronée - saisissez 9 chiffres"
   Cancel = True
 End If
   TextBox1.Text = Format(TextBox1.Text, "0## ## ## ##")
End Sub
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 235
10 janv. 2012 à 13:16
D'ac

Et ?

Es-tu ainsi satisfait du résultat ?


=> si oui ===>> parfait
=>> si non : pourquoi ?

Ceci étant dit :
1) je t'ai signalé l'existence d'un ocx déjà "tout cuit"
3) tu as "insisté" sur l'amour voué à la présence de tes "_"
2) je t'ai parlé "d'usines à gaz"
Alors :
1) ou tu es disposé à te servir de ce qui existe (l'ocx tout cuit), mais qui ne sera pas "de toi"
2) ou tu veux écrire du "perso" et alors : écris-le toi-même ... vas-y
3) ou tu veux qu'on écrive pour toi "ta chose", mais alors : si ce sont d'autres qui l'écrivent pour toi, elle ne sera plus du tout "ta chose" et nous nous trouverions là face à un paradoxe assez drôle, non ?

Pour ton information : les rails que je t'ai donnés dès le départ me paraissant assez valables, je me suis amusé à continuer à "circuler sur ces rails-là", tout en m'efforçant d'éviter d'aboutir à une usine imbuvable, juste pour "voir". J'y suis parvenu ===>> par deux astuces additionnelles. Pourquoi y suis-je parvenu ? ===>> parce-que je suis un "emmerdeur" et un "guerrier" (les deux à la fois).
Or, il ne s'agit pas là d'un intérêt qui serait le mien, mais bien d'une démarche que tu voudrais la tienne ! Curieux, non ?

Conclusion : je te laisse quelques jours pour tenter de "jongler" seul sur la base de ce que je t'ai montré vendredi dernier. Au delà ===>> tu l'auras, ce source, mais, dans un tel cas ===>> je le déposerai et il ne sera plus le tien du tout du tout ... hein !
A toi de voir ! "Quelques jours", c'est beaucoup et beaucoup plus que les quelques 30 minutes qui m'ont suffi ce matin ===>> alors ===>>> "jongle" et tu seras un "propriétaire" ou abandonne le "jonglage". (choix à faire).
Amitiés



____________________
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
cs_apz Messages postés 281 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 11 avril 2013
10 janv. 2012 à 21:41
Salut ucfoutu,

Après tes conseils d'éviter d'escalader une falaise sans cordes, j'ai décidé d'abandonner de masquer mon numéro de téléphone avec des tirets.

Mais une petite question (peut-être tout bête) :

A quoi sert d'avoir un masque de saisie si on ne l'obtient qu'après que TextBox perd le focus ?

Parce que le formatage des données on peut l'avoir avec du code VBA avant insertion dans la feuille ? Non ?

Pour l'OCX, j'aimerais bien le connaitre et l'utiliser (As-tu lien de cours ?)

Je viens sur les forums pour apprendre, le code viendra de moi ou d'un bénévole m'importe peu

Pour ta surprise, j'attendrais ces jours qui restent avec impatience
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 235
10 janv. 2012 à 22:20
Pour l'OCX, j'aimerais bien le connaitre et l'utiliser (As-tu lien de cours ?)

Pas de cours nécessaire pour lui (je n'en ai jamais vu un pour si peu). Totalement intuitif !

A quoi sert d'avoir un masque de saisie si on ne l'obtient qu'après que TextBox perd le focus ?

A question amusante ===>> réponse amusante : à quoi sert le masque, en cours de saisie ? === >> A quasiment rien (un utilisateur, une dactylo, frappent d'ailleurs en général sans regarder)
Mais qu'à cela ne tienne :
Les tirets, eux, ne servent rigoureusement à rien, y compris pour ceux qui regardent en cours de frappe, dès lors (et c'est ce que fait le code montré vendredi) que leur frappe va spontanément incrémenter la chaîne au bon endroit
A toi d'y aller, hein, à partir de ce code, pour le perfectionner.

Pour ton information (et j'insiste), j'en suis en ce qui me concerne (et précisément en continuant sur la lancée de mon propre code) à travailler pour le rendre polyvalent (seul le masque changeant). J'ai même traité avec les tirets (hé oui !).

J'attends encore deux jours et dépose cette source, que j'assortirai toutefois d'un commentaire pour dire à quel point je désapprouve, mais qu'elle constitue un exemple d'acrobatie et d'astuces telles (tu verras lesquelles et elles ne résultent pas de la connaissance de VBA, mais de l'utilisation de l'esprit humain) non dénué d'intérêt pour les amateurs de jonglage. Tout le reste, à part cet intérêt-là, ne vaut rigoureusement rien pour moi.
A plus.

____________________
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
cs_apz Messages postés 281 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 11 avril 2013
10 janv. 2012 à 22:38
Salut,

J'ai même traité avec les tirets


En fin des tirets sans avoir à monter une usine à gaz

J'ai ajouté le formatage des chiffres en cours de frappe :

Private Sub TextBox1_Change()
    Dim Txt As String

    Txt = TextBox1.Text
    v = Len(Txt)
    If v 3 Or v 6 Or v = 9 Then Txt = Txt & " "
    TextBox1.Text = Txt

End Sub
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 235
10 janv. 2012 à 23:32
En fin des tirets sans avoir à monter une usine à gaz

Oui, mais tu verras . ===>>> des tirets genre "fantômes ecossais", qui je ne mets même pas dans ma textbox, bien que tu les y verras et uniquement là où non rempli, au fur et à mesure de la saisie (et que je n'ai donc même pas à gérer réellement... des fantômes, quoi !)...
If v 3 Or v 6 Or v = 9 Then Txt = Txt & " "

tu n'as rien compris, manifestement, à ce que je t'ai dit plus haut à propos de cette "bourde de rigidité" ! Tu continues avec ce code trouvé je ne sais où et qui dénote un esprit assez peu informatique.... !
Un tel bout de code ne sera valable que pour un seul masque et tu seras obligé de tout recalculer si par bonheur (car je l'espère pour ton pays) le nombre des abonnés au téléphone croissait (comme partout ailleurs) au point de passer d'une numéroration à 9 chiffres à une numérotation à 10 chiffres (entre autres, hein ...). Et ce n'est pas tout ...
Mais je ne vais tout de même pas me répéter sans cesse, à tous mes messages ...
Bref. Tu attendras le dépôt annoncé. Mais je te préviens : mon code et mes fantômes seront difficiles à suivre.
____________________
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
10 janv. 2012 à 23:54
Salut,

D'après ce que j'ai compris, il faudrait créer un tableau de variables de la longueur du texte et y enregistrer le code ascii tapé (ou le chiffre directement) avant de remplacer les caractères par des "_".

Sinon j'ai mal compris le problème.

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 235
11 janv. 2012 à 00:16
Bonjour, Acive,

Non, c'est plus complexe que cela.
Mais si cela t'amuse également et que tu es à la fois acrobate, jongleur et chasseur de fantômes, tu vas bien rigoler en voyant ce que je déposerai dans deux jours (de l'innattendu garanti)
Ce sera plus compliqué (à suivre) que de chasser la viscacha dans la pampa. Promis juré


____________________
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
11 janv. 2012 à 00:28
Salut Uc,

Comme tu as (et bien) fait:
J'ai par exemple limité l'effacement aux seuls backspaces entamés depuis la fin.

Il faut de même interdire les déplacements au milieu du texte, puisque si tu effaces un "_" dans le texte, ça ne reste qu'un "_" d'effaçé et le nombre sera erroné.

Mais moi, étant aux Antilles, j'ai la habitude des pirates des caraïbes, pourquoi pas me lancer dans la chasse aux fantômes écossais aussi?...
Je suis curieux




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
11 janv. 2012 à 00:35
J'attendrais ton code, et entre temps je solliciterais un chasseur de fantômes pour m'épauler à comprendre ton petit projet
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 235
11 janv. 2012 à 07:19
[u]Il faut de même interdire les déplacements au milieu du texte, puisque si tu effaces un "_" dans le texte, ça ne reste qu'un "_" d'effaçé et le nombre sera erroné.

/u

et toute l'astuce, pour y parvenir, et justement ici : y montrer ces tirets (là où il faut et quel que soit l'état de la saisie, y compris si effacements par backspace ou autre), sans jamais les y écrire. un inssaisissabler fantôme est là pour le faire et il le fait bien.


____________________
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
12 janv. 2012 à 01:46
Salut les gars,
Alors je vous ai fait une vrai usine à gaz, désaffectée puisque il y a des fantômes
Ça fonctionne bien avec les chiffres mais j'arrive pas encore à gérer les erreurs de frappe correctement.
Je suis fatigué (je sais c'est encore une excuse), mais j'ai mangé et bu quelques verres
Ça c'est une excuse!...
Pour la suppression aussi je ne me suis pas trop pris la tête, vous allez voir...


Dim NuméroTel As String
Dim Change As Boolean

Private Sub Form_Load()
Text1.MaxLength = 12
Change = False
End Sub

Private Sub Text1_Change()
If Change = True Then
   Change = False
Else
   NuméroTel = NuméroTel & Right(Text1.Text, 1)
   Form1.Caption = "Ton numéro est le : " & NuméroTel
   If IsNumeric(Right(Text1.Text, 1)) = True And Len(Text1.Text) > 4 Then
      Change = True
      Text1.SelStart = Len(Text1.Text) - 1
      Text1.SelLength = 1
      Text1.SelText = "_"
   End If
End If
End Sub

Private Sub Text1_Click()
SendKeysFin
End Sub

Private Sub Text1_DblClick()
SendKeysFin
End Sub

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = 8 Then
   Text1.Text = "":
   NuméroTel = ""
   Form1.Caption = ""
   Exit Sub
End If
Dim i As Integer
For i = 1 To Len(Text1.Text)
   If Mid(Text1.Text, i, 1) <> "_" And Mid(Text1.Text, i, 1) <> " " And IsNumeric(Mid(Text1.Text, i, 1)) = False Then
      Text1.Text = Replace(Text1.Text, Mid(Text1.Text, i, 1), "")
   End If
Next i
If Len(Text1.Text) 3 Or Len(Text1.Text) 6 Or Len(Text1.Text) = 9 Then Text1.Text = Text1.Text & " "
SendKeysFin
End Sub

Private Sub SendKeysFin()
Text1.SelStart = Len(Text1.Text)
Text1.SelLength = 0
End Sub



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 235
12 janv. 2012 à 07:20
Bonjour, Acive,

Ah ! Je vois que tu t'es pris au jeu
Trois petits problèmes, toutefois :
- Le premier est mineur (car transposition possible) : ce que tu montres est pour du VB6 et ne va pas, sans adaptations (assez faciles) sous VBA.
- Le deuxième est plus gênant : tu n'as pas compris ce qui est attendu en matière de tirets/masque
- cette ligne de code :
If Len(Text1.Text) 3 Or Len(Text1.Text) 6 Or Len(Text1.Text) = 9 Then Text1.Text = Text1.Text & " "

présente le même défaut que celui que j'ai dénoncé plus haut pour la ligne de code présenté par apz :
If v 3 Or v 6 Or v = 9 Then Txt = Txt & " "

(rigidité et obligation d'un code différent pour chaque masque).
PS : j'espère déposer mon fantôme (un vrai) ce soir : il est terminé. Juste une question, maintenant, de rédaction de sa présentation.

A plus
____________________
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 235
12 janv. 2012 à 11:16
j'espère déposer mon fantôme (un vrai) ce soir : il est terminé. Juste une question, maintenant, de rédaction de sa présentation.

Pas vraiment certain car je viens de m'attaquer également à la saisie contrôlée des mots de passe (avec remplacement par passwordchar) et des raison évidentes de discrétion font que je veux éviter d'en montrer la longueur, bien que cette longueur soit déterminée par le masque
J'y travaille en ce moment même (et vais y parvenir car je suis têtu comme pas deux)

____________________
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
12 janv. 2012 à 12:31
Salut Jacques,

Oui c'est du vb6, j'ai oublié de le dire
D'ailleurs ça fait quelques 6/7 ans que j'ai pas touché à vb6...

Un moment je me suis embrouillé les pinceaux, c'est la raison de la fameuse formule:
If v 3 Or v 6 Or v = 9 Then Txt = Txt & " "
que je ne voulais absolument pas utiliser.

Alors, en ce qui concerne le masque, désolé j'ai toujours pas complètement compris... (je suis aux DOM, ils m'ont contaminé )

Tu veux dire qu'on doit laisser la possibilité à l'utilisateur de modifier le masque?
Par exemple, si telecom ajoute des chiffres.
Format(Text1.text, "### ## ## ##") ou
Format(Text1.text, "## ## ## ## ##") ?




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 235
12 janv. 2012 à 13:02
Oui, Acive,
- D'une part, le masque doit pouvoir être modifié et être utilisé sans rien changer au code (un seul code pour tous les cas de masque)
- Le masque doit pouvoir être composé de plusieurs élément :
-- un séparateur éventuel, forcer à des caractères numériques ou alphanumériques (ou un mélange des deux)
-- permettre l'insertion de caractères "forcés", alphanumériques ou non
- D'autre part ( le "coup" des tirets ) : des tirets doivent remplacer, tout au long de la saisie et à la position voulue les caractères non encore frappés. La gestion de la saisie doit par ailleurs être telle que le curseur ne doit se placer (prêt pour la saisie) qu'aux endroits où l'on attend un caractère à saisir).
Et tout cela : en réduisant autant que faire ce peut le caractère "usine à gaz" de l'ensemble
Tu vois le "truc" ?
En résumé et comme je ne cesse de le répéter : beaucoup d'efforts pour un gadget dont l'utilité réelle reste à démontrer. ===>> et je vais déposer un source, non pour l'utilité, mais pour l'exemple de "jonglage" (rien d'autre). Et puisque d'amour du "jonglage" il s'agit ===>> je n'assortirai mon code d'aucune ligne de commentaire, juste pour laisser aux "amoureux du jonglage ludique" le "plaisir" de "décortiquer" ce mécanisme de fou. (on est jongleur ? alors on jongle ou, au moins, on "décortique" ! Sinon : on s'abstient )



____________________
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