Format dans TextBox

[Résolu]
Signaler
Messages postés
44
Date d'inscription
vendredi 25 janvier 2008
Statut
Membre
Dernière intervention
17 mai 2012
-
Messages postés
44
Date d'inscription
vendredi 25 janvier 2008
Statut
Membre
Dernière intervention
17 mai 2012
-
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 

9 réponses

Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
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 ...
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
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
..
Messages postés
44
Date d'inscription
vendredi 25 janvier 2008
Statut
Membre
Dernière intervention
17 mai 2012

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 
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
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 ...)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
tu es en VBA, utilises un MaskedEditBox (Microsoft Masked Edit Control)
Messages postés
44
Date d'inscription
vendredi 25 janvier 2008
Statut
Membre
Dernière intervention
17 mai 2012

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 
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
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 ...)
Messages postés
44
Date d'inscription
vendredi 25 janvier 2008
Statut
Membre
Dernière intervention
17 mai 2012

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
Messages postés
44
Date d'inscription
vendredi 25 janvier 2008
Statut
Membre
Dernière intervention
17 mai 2012

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