Code retour en arrière pour numéro de tel dans texbox

Rigel Io Messages postés 11 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 octobre 2012 - 29 oct. 2012 à 01:06
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 29 oct. 2012 à 16:53
Bonjour à tous,

Je suis en train de faire un petit prog sous VBA excel.
Le contexte est le suivant: je veux seulement insérer des "." dans un numéro de téléphone en le tapant dans un textbox et ainsi obtenir 06.12.34.56.78 à la place de 0612345678.
Mon problème est que je n'arrive pas à trouver le code qui permet de savoir quand on appuie sur le bouton retour en arrière du clavier afin d'éviter le code pour pouvoir effacer le ".".
Le code que j'ai développé est le suivant:

Private Sub TextBox16_Change()
Dim pair As Integer, i As Integer
Dim NbrPt As Integer
    'Application.SendKeys={return}
    If KeyCode = Chr(13) Then 'chr(13)=touche return 'MON PROBLEME
        UserForm1.TextBox16 = Left(UserForm1.TextBox16, Len(UserForm1.TextBox16) - 2)
        Exit Sub
    End If
    If Left(UserForm1.TextBox16, 1) <> "+" Then
        For i = 1 To Len(UserForm1.TextBox16)
            If Mid(UserForm1.TextBox16, i, 1) "." Then NbrPt NbrPt + 1
        Next i
        pair = (Len(UserForm1.TextBox16) - NbrPt) Mod 2
        If pair = 0 And Right(UserForm1.TextBox16, 1) <> "." And NbrPt <> 4 Then
            UserForm1.TextBox16 = UserForm1.TextBox16 & "."
            If UserForm1.TextBox16 "." Then UserForm1.TextBox16 ""
        End If
    End If
End Sub


Je le trouve un laborieux pour une chose si simple, si vous avez d'autre idée n'hésitez pas mais mon principal problème pour l'instant et de trouver comment reconnaitre le bouton retour en arrière du clavier dans une textbox.

Merci d'avance,

Rigel-IO

4 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
29 oct. 2012 à 08:36
Bonjour,
Essai ceci cela te donne un espace. Tu pourras l'adapter avec des points

Private Sub TextBox1_Change()
TextBox1.Text = Format(TextBox1.Value, "0# ## ## ## ##")
End Sub


@+Le Pivert
0
Bonjour Rigel Io.

Un contrôle TextBox est un outil de traitement de texte. Il permet donc de faire des effacements avant et arrière, ce qui est la moindre des choses pour un traitement de texte, fût-il élémentaire. Il en résulte que les caractères de contrôle qui provoquent des effacements ne peuvent se retrouver dans le contrôle.
La voie que je vous conseille est de convertir le texte du TextBox en un tableaux de strings, chacun d'eux ne contenant que le texte d'une ligne. Vous pourrez alors modifier comme vous voudrez le texte de telle ligne qu'il vous plaira par une commande externe (un bouton de commande par exemple), puis procéder à la conversion inverse.
Mais me direz-vous, ces conversions doivent des usines à gaz ! Nenni vous répondrai-je alors. Je me propose de vous envoyer les codes de ces mini-algorithmes, après les avoir préparés. En effet, je ne suis pas capable des les écrire à la volée. Voyez d'ailleurs ma signature.

Cordialement.


Étant illettré, je signe d'une croix : ×
0
Me voici à nouveau, Rigel Io.

Vous avez ci-dessous les deux mini-algorithmes. Notez bien que
– j'utilise des tableaux de base 0, sans pour autant exploiter les termes de rang 0,
– chaque string renvoyé par le décomposé se termine par vbCrLf, c'est-à-dire par Chr(13) & Chr(10).


Private Function Décomposé(Txt As String) As String()
Dim Txts() As String, n As Long, p As Long, q As Long
If Right(Txt, 2) <> vbCrLf Then Txt = Txt & vbCrLf
n = 0: ReDim Txts(0 To n)
p = 1
Do
    q = InStr(p, Txt, vbCrLf)
    If q = 0 Then
        Exit Do
    Else
        n = n + 1: ReDim Preserve Txts(0 To n)
        Txts(n) Mid(Txt, p, q - p + 2): p q + 2
    End If
Loop
Décomposé = Txts
End Function

Private Function Recomposé(Txts() As String) As String
Dim i As Long, n As Long, Txt As String
n UBound(Txts): Txt ""
For i = 1 To n
    Txt = Txt & Txts(i)
Next i
Recomposé = Txt
End Function


En espérant que cela vous aidera.



Étant illettré, je signe d'une croix : ×
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
29 oct. 2012 à 16:53
Voilà exactement se que tu recherches avec un classeur à télécharger!

http://www.excel-downloads.com/forum/81711-vba-masque-saisie-textbox-numero-telephone-how.html
0
Rejoignez-nous