XL 2010 Propriété MaxLength d'une TextBox pour saisie n° de téléphone

Eric C

XLDnaute Barbatruc
Bonjour le forum
Bonjour à tous & à toutes

Lorsque je désire saisir un numéro de téléphone via une TextBox, j'utilise ce code :
VB:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    TextBox1.Value = Format(TextBox1.Value, "0# ## ## ## #")
End Sub
Celui-ci fonctionne très bien sauf que je ne peux y adjoindre la propriété MaxLength pour limiter sa saisie ce qui fait que si par mégarde j'ajoute un chiffre de trop, le numéro est à ressaisir...
Ma question est simple : pourquoi ?
Si je retire le "0" (qui n'apparaitra plus dans la valeur de la TextBox (Numéro de téléphone saisi)), je peux indiquer le MaxLength.

Ou peut etre y a t'il une autre proposition de code (j'ai un problème avec les accents circonflexes, il faudra que je nettoie mon clavier).

Sur ce bonnes fetes de fin d'année à toutes & à tous.
Eric c
 

patricktoulon

XLDnaute Barbatruc
@Eric C
le must de chez must
avec un masque de saisie

VB:
Option Explicit
'Const mask = "**.**.**.**.**"
'Const mask = "--.--.--.--.--"
'Const mask = "__.__.__.__.__"
Const mask = "__ __ __ __ __"
'Const mask = "==.==.==.==.=="
'Const mask = ".. .. .. .. .."

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Dim V$, X&, SL&
    With TextBox1
        V = .Value: If V = "" Then V = mask
        X = .SelStart: SL = .SelLength
        Select Case KeyCode
        Case 96 To 105 ' les touches du pavé
            Select Case X: Case 2, 5, 8, 11: X = X + 1: SL = SL - 1: SL = IIf(SL < 1, 1, SL): End Select
            If X = 14 Then KeyCode = 0: Exit Sub
            Mid(V, X + 1, SL) = mask: Mid(V, X + 1, 1) = Chr(KeyCode - 48)
            KeyCode = 0: .Value = V
            Select Case X: Case 1, 4, 7, 10: X = X + 1: SL = IIf(SL < 1, 1, SL - 1): End Select
            .SelStart = X + 1
        Case 8
            If X < 1 Then KeyCode = 0: Exit Sub
            Select Case X: Case 3, 6, 9, 12: X = X - 1: End Select
            KeyCode = 0: Mid(V, X, 1) = Mid(mask, X, 1)
            If V = mask Then V = ""
            .Value = V: .SelStart = X - 1
        Case 46
       
        Case 13, 9

        case else :keycode=0
        End Select
    End With

End Sub
 

patricktoulon

XLDnaute Barbatruc
Bonsoir jean-marie
non c'est pour garder la propriété vide au cas ou elle pourrait servir de condition pour quelque chose

j'en viens au code que ma donné en mp eric maintenant

Code:
Private Sub UserForm_Initialize()
    Me.ComboBox3.List = Array("Rédaction", "Dictée", "Etude de texte", "Présentation", "Histoire-Géographie", "Sciences", "Opérations", "Problème", "Dessin", "Lecture", "Récitation/Chant", "EPS")
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    TextBox1.MaxLength = 4
    Select Case KeyAscii
    Case 44, 46                        '  "," ou "."
        If InStr(TextBox1.Text, ",") Then KeyAscii = 0: Exit Sub   'Si la "," est déjà saisie on stoppe ??
        KeyAscii = 44    ' la virgule forcée

    Case 48 To 57
        'Si la valeur du Cbo est "Rédac.." et que la valeur entrée est sup à 10 alors MsgBox  et annulation de la touche et vidage textbox
        If ComboBox3 = "Rédaction" And CDbl(TextBox1.Value & (KeyAscii - 48)) > 10 Then
            MsgBox "La note de " & ComboBox3.Value & " est sur 10 "
            KeyAscii = 0
            TextBox1.Value = ""
        End If

    Case Else: KeyAscii = 0
    End Select
End Sub
 

Eric C

XLDnaute Barbatruc
Re le fil

Mon message en MP car le code provenait d'un autre forum et je ne voulais l'étaler ici :
Tu vas me dire, il abuse cet Eric c mais je reviens vers toi en MP pour un petit service (aide).
J'ai "aidé" sur un forum ami, une personne qui a du reprendre un code glané sur le net.
Le role de ce code (je n'ai mis qu'une matière "Rédaction") est que l'on entre une note pour un élève. Si cette note est > à 10 alors MsgBox d'avertissement:
Ce code n'est pas de moi. Par contre c'est moi qui l'ai annoté en disant meme qu'il y avait de nombreux doublons (définition des caractères 0 à 9 puis nouvelle définition avec les Case 48 to 57 ...).
Dans ta vidéo, tu dis que l'on ne peut entrer le nombre 8,XXX. C'est normal le MaxLength autorise 4 caractères.
Non, ce que je te demandais c'est que voulais dire "& (KeyAscii - 48)) du code :
VB:
If ComboBox3 = "Rédaction" And CDbl(TextBox1.Value & (KeyAscii - 48)) > 10 Then
Je ne trouve pas la signification...

Bonne soirée

Eric c
 
Dernière édition:

Eric C

XLDnaute Barbatruc
Bonsoir le fil
Bonsoir Jean-Marie

Je le répète, ce n'est pas mon fichier. Je bidouille en Vba mais mes codes sont un peu plus élaborés (pas beaucoup plus mais bon....) - Voici le lien du demandeur -=- Ici -=- avec ma modeste réponse. Tout ce que je demandais c'est pourquoi le créateur du post initial a déclaré :
VB:
CDbl(TextBox1.Value & (KeyAscii - 48))
. J'ignore la traduction de cette partie de code (on retrancher un chiffre à du KeyAscii ???).
@+ Eric c
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour @Eric C
non je trouve qu'il a raison
quand tu tape la virgule apres avoir tapé 8 par exemple
tu teste cdbl("8,") c'est moyen entre nous
chez moi par exemple cdbl("8,") plante sur 2016 et sur 2013 ça plante pas
donc si tu tape par exemple 5 après avoir taper "7,"
ton test cdbl(.value & chr(keyascii)) donne cdbl("7,5")

de plus
si tu "10," et que tu tape par exemple 1
si tu teste seulement le .value ca va passer alors que c'est 10,1 qui est tapé donc plus haut que 10

tu comprends?
 

Eric C

XLDnaute Barbatruc
Bonjour le forum
Bonjour le fil, bonjour Patrick

Oui, là je comprends mieux. Ne parvenant pas à mes fins avec TextBox3.KeyPress, j'étais parti avec TextBox3.Exit. Avec cet even, cela fonctionnait.
Merci pour cette petite leçon.
@ + Eric
 

Discussions similaires