Format dans TextBox

Résolu
cs_antom Messages postés 44 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 17 mai 2012 - 14 mai 2009 à 17:20
cs_antom Messages postés 44 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 17 mai 2012 - 16 mai 2009 à 11:10
Bonjour tout le monde,

C'est terrible, je ne parviens pas à forcer ce format ci dessous dans un TextBox.

Si je saisis dans le TextBox 0034953456754, je souhaiterais que dans ce même TextBox, qu'il affiche

+3495 345 67 54 au fur et à mesure que je saisis...

Possible ?

Donc par macro, j'ai déjà essayé ceci, entre autres... mais en vain.

Private Sub TextBox1_Change()   
    TextBox1 = Format(TextBox1, """+""#### ### ## ##")
End Sub

Merci pour votre aide précieuse.

JassBass 
A voir également:

9 réponses

jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
14 mai 2009 à 19:10
Bonjour,


 


Je n'ai pas vraiment envie d'écrire à ta place tout de ce "machin"-là (il faut que tu mérites un peu les choses en faisant ton propre effort).


 


Je vais donc me contenter de te macher le travail et te laisser continuer pour ce qui est d'améliorations :


Avec une textbox nommée Text1 et sa propriété maxlength à 16)



Private Sub Text1_Change()
  Dim filtre As String, titi As Integer
  If Len(Text1.Text) < 2 Then Exit Sub
  filtre = Mid("#### #### ## ##", 1, Len(Text1.Text) - 1)  titi IIf(Left(Text1.Text, 1) "+", 2, 1)
  Text1.Text = "+" & Format(Val(Mid(Text1.Text, titi)), filtre)
  Text1.SelStart = Len(Text1.Text)
End Sub


Et tu n'auras même pas à te soucier de contrôler que les caractères saisis sont bien numériques.
Je te laisse découvrir, analyser, comprendre ... et arranger à ta sauce ...
3
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
15 mai 2009 à 21:57
Ah....

NBon, ce n'est pas bon ....
Saisis qujelquechose et reviens en arrikère jusqu'au bout par le backspace ===>> tu auras une erreur au dernier backsâce, forcément...

Bon !
Tu as choisi l'évènement Change et je t'ai suivi juste pour le plaisir de forcer à la réflexion.
Qu'est cette réflexion ?
Tout simplement celle-ci : l'évènement Change est déclenché à chaqye fois que tu chan,ge le texte ...
Or, que se passe-t-il lorsque tu traites ? ===>> tu changes le texte et déclenche donc à nouveau l'év_nement change ...
Zut alors ... et comment faire dans un tel cas ?

Ainsi (et tu noteras au passage que j'ai supprimé un test IIf, forçant systématiqyement à 2 ( et pour cause, puyisque le change provoque une modification, donc un nouveau Change !°

Private Sub Text1_Change()
  Dim filtre As String, titi As Integer  If Text1.Text "+" Then Text1.Text "": Exit Sub ' oui, mais comme j'ai modifié, je vais y revenir, pardi !  If Len(Text1.Text) 1 Then Text1.Text "+" & Text1.Text: Exit Sub
  If Text1.Text = "" Then Exit Sub    ' et voilà comment eviter l'erreur du backspace final ....
  filtre = Mid("#### ### ## ##", 1, Len(Text1.Text) - 1)
  Text1.Text = "+" & Format(Val(Mid(Text1.Text, 2)), filtre) ' je force à 2 et ai reaison quel que soit le cas de figure . p^lus de IIf, donc !
  Text1.SelStart = Len(Text1.Text)
End Sub

Voilà !
Analyse lentement... et réfléchis...

Maintenant : autant je t'ai suivi par jeu dans cet évènement Change, autant je vais t'encourager à utiliser plutôt (un peu différemment) l'évènement Keypress, qui t"évitera ces acrobaties de la pensée. Mais là, je vais te laisser faire...
Tu as déjà, en attendant, ta solution acrobatique avec le Change et elle marche sans faille...*
Amitiés et bonne étude
..
3
cs_antom Messages postés 44 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 17 mai 2012
15 mai 2009 à 08:48
Hello tout le monde, Jmf0,

Désolé de ne pas avoir répondu avant Jmf0.

J'aime bien ton principe !

No problème, je suis sur que je vais comprendre et trouver les erreurs et te tiens au courant dans la journée.

Te souhaite une bonne fin de semaine et encore merci !

JassBass 
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
15 mai 2009 à 08:51
Il n'y a pas d'erreur, mais j'y ai "glissé" (volontairement) un test totalement inutile, juste pour voir si tu étais capable de trouver où et de le supprimer toi-même (c'est ma manière de forcer à la réflexion ...)
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 mai 2009 à 08:56
tu es en VBA, utilises un MaskedEditBox (Microsoft Masked Edit Control)
0
cs_antom Messages postés 44 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 17 mai 2012
15 mai 2009 à 12:04
Re,

Donc ok j'ai réussi, (tu m'as donné la soluce) j'ai juste retiré le premier If et modifié les dièses pour le format souhaité, ainsi que le nom des variables !

Comme ceci

Private Sub Text1_Change()
   
    Dim x As String, y As Integer
 
    x = Mid("#### ### ## ##", 1, Len(Text1.Text) - 1)    y IIf(Left(Text1.Text, 1) "+", 2, 1)
    Text1.Text = "+" & Format(Val(Mid(Text1.Text, y)), x)
    Text1.SelStart = Len(Text1.Text)


End Sub

C'est impec, j'y mets bien au fond de mon tiroir magique...

Encore merci et à bientot !

Renfield, je ne connais pas la fonction MaskedEditBox, mais je vais me renseigner, merci.

JassBass 
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
15 mai 2009 à 14:41
Ah ah !....
T'as pas suffisamment testé, toi ....


1) remets vite :
If Len(Text1.Text) < 2 Then Exit Sub
sinon : fais des backspace jusqu'au bout et tu vas voir la différence ...(===>> erreur garantie)!
2) alors comment faire pour que le + s'affiche dès le 1er caractère ?
C'est là que je t'attends (un peu d'astuce, sans plus ...)
0
cs_antom Messages postés 44 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 17 mai 2012
15 mai 2009 à 17:50
Re,

Hm okey alors avec ça...

    Dim x As String, y As Integer
   
    If Len(Text1.Text) < 1 Then Exit Sub
         
    x = Mid("#### ### ## ##", 1, Len(Text1.Text) - 1)    y IIf(Left(Text1.Text, 1) "+", 1, 1)
    Text1.Text = "+" & Format(Val(Mid(Text1.Text, y)), x)
    Text1.SelStart = Len(Text1.Text)

Je pense que cette fois c'est bon ?   

En tous cas merci pour ta pédagogie !

mOOm
0
cs_antom Messages postés 44 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 17 mai 2012
16 mai 2009 à 11:10
Bonjour tout le monde, Jmf0,

Bon ok j'ai bien regardé et je crois comprendre un peu mieux.

Par contre, avec le dernier code, plus (aucun) message d'erreur en faisant le backspace.

Je vais voir l'événement Keypress que je ne connais pas, et oui je débute, et te tiens au courant.

Encore merci pour tout et au plaisir.

JassBass 
0
Rejoignez-nous