Format Textbox à la saisie

cathodique

XLDnaute Barbatruc
Bonsoir:),

Je voudrais imposer un format à la saisie dans une textbox qui représente un numéro siret.
Ex: xxx xxx xxx xxxxx (3 chiffres espace 3 chiffres espace 3 chiffres espace 5 chiffres).
Les espaces se rajoutent automatiquement.

C'est à dire si ce format n'est pas respecter la textbox ne perd pas le focus pour corriger.

Merci beaucoup.

Bonne soirée.
 

Pièces jointes

  • Format siret.xlsm
    17.4 KB · Affichages: 34

Eric C

XLDnaute Barbatruc
Bonsoir Patrick

Eh bien non, je n'ai eu ce que je désirais dans la mesure où je ne parviens à remplir le TextBox avec de l'ALPHANUMERIQUE ??? Je peux changer la ponctuation dans le code mais la saisie ne reste autorisée qu'avec des chiffres ...
Bonne soirée
 

patricktoulon

XLDnaute Barbatruc
bonsoir eric C
si je me réfère au post 13
1569868517910.png


je change le mask et voila
Mask = "XXX / XXX XX XX"

maintenant si tu tiens a taper toi même le(s) caracteres autres que les chiffres
je dirais que ta demande est pour le moins bizarre
a quoi ca sert de contraindre un textbox a un format si tu veux tout taper toi même o_O
 

Pièces jointes

  • textbox formaté par mask de saisie .xlsm
    15.1 KB · Affichages: 15

Eric C

XLDnaute Barbatruc
Re Patrick. Je suis content que tu te penche sur mon "problème".

Je désirerais garder le code de job75 car il me permet de pouvoir le modifier :
VB:
Pour entrer en dynamique un N° de SIRET
Ex: 123 456 789 12345
While Mid(x, i, 1) <> ""
If i = 4 Then x = Left(x, 3) & " " & Mid(x, 4): i = i + 1
If i = 8 Then x = Left(x, 7) & " " & Mid(x, 8): i = i + 1
If i = 12 Then x = Left(x, 11) & " " & Mid(x, 12): i = i + 1
i = i + 1

Code revu pour entrer un n° de téléphone étranger
Ex: 123 / 456 78 91
'While Mid(x, i, 1) <> ""
' If i = 4 Then x = Left(x, 3) & " " & Mid(x, 4): i = i + 1
' If i = 5 Then x = Left(x, 4) & "/" & Mid(x, 5): i = i + 1
' If i = 6 Then x = Left(x, 5) & " " & Mid(x, 6): i = i + 1
' If i = 10 Then x = Left(x, 9) & " " & Mid(x, 10): i = i + 1
' If i = 13 Then x = Left(x, 12) & " " & Mid(x, 13): i = i + 1

Mon souhait : Arriver à transposer le code afin de pouvoir réaliser une saisie ALPHANUMERIQUE (caractères qui peuvent être soit alphabétiques (A à Z), soit numériques (0 à 9), soit codés par un autre signe conventionnel (., §, &, …).
Je bute grave sur la boucle qui ne considère que les chiffres :
Code:
For i = 1 To Len(t)
If IsNumeric(Mid(t, i, 1)) Then x = x & Mid(t, i, 1)
 Next
que je n'arrive pas à "shunter" ou transformer (désolé mais la programmation pure n'est pas mon fort)

Bonne soirée à toi (ainsi qu'à toutes & à tous).
P.s : Le sujet semble intéressé pas mal de monde (+700 vues)
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Juste pour infos
je pige plus rien tu veux faire quoi??? finalement
que les caractères s’insèrent tout seuls ou pas
je rappelle tout de même que le titre c'est " format textbox a la saisie "
si çà n'est pas cela que tu veux il va falloir t'expliquer
Sauf que ce fil a été crée en mars 2018 par cathodique.
D'où l'éternelle question: ressortir les vieux fils ou les citer dans une nouvelle discussion ;)
 

Eric C

XLDnaute Barbatruc
Je m'excuse de ne pas être très clair. Ce post, je l'ai "déterré", il date de mars 2018 et a gardé son titre original. Initialement, il servait à remplir, en live (dynamique), un TextBox avec saisie des chiffres pour obtenir un n° SIRET. Les différentes ponctuations (espace) se mettent automatiquement en place.
"L'ossature ou l'architecture" du code proposé, me permet facilement de modifier les données afin de modifier le masque (Siret : 1232 456 789 12345 par 123 / 456 78 91 pour un n° de TPH spécial). Toutefois, mon problème est que cela reste de la saisie obligatoirement numérique. Mon souhait est que je puisse remplir le TextBox avec des valeurs alphabétiques mélangées à des valeurs numériques Ex : : J'entre dans le TextBox : les saisies : 12A1Y12OPA et GRACE au code j'obtiens 12A / 1Y - 12OPA. Comme dit précédemment, je bute sur cette boucle qui n'autorise que la saisie Numérique :
VB:
For i = 1 To Len(t)
If IsNumeric(Mid(t, i, 1)) Then x = x & Mid(t, i, 1)      "" Cela n'existe pas mais dans l'idéal If Is Alphanumeric(Mid.....
Next

Dur dur
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
il est donc preferable de partir sur une formule comme la mienne basé sur un mask
avec "l'ossature que tu veux utiliser arriver a ton but deviendrait une usine a gaz
rien n’empêche dans mon model d'ajouter le "[A-z]" dans les caractères autorisés
pour les mask complexes faudra peut être ajouter une ligne ou deux
je vais essayer de te faire un model avec un de mes autres principe sans mask de saisi
 

Eric C

XLDnaute Barbatruc
@ Patricktoulon

Désolé pour hier soir, j'étais dans ma bulle et j'aurais mieux fait d'aller me coucher (journée très pénible). Ton dernier fichier (#18) répond, en très grande partie à ce que je désire. Très subtil ce masque de saisie que je peux aménager à mon gré (je suis désolé j'en étais resté à ton 1er fichier qui ne convenait pas). Je n'ai plus besoin de papier crayon pour connaître et calculer la position de mes ponctuations. ne me reste plus qu'à trouver où mettre la partie nécessaire aux caractères alphabétiques (minuscules et majuscule) et à découvrir la fonction de Case 13. Chapeau bas Monsieur l'artiste.
Encore merci pour cette EXCELlente participation.
Une dernière demande : pourrais-tu, je te prie, annoter ton fichier. Merci
@+ Eric c
 

patricktoulon

XLDnaute Barbatruc
re
tiens vite fait le code avec les commentaires
VB:
Private Sub Tsiret_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Dim Mask$, txt$, s&, longg&, plus& 'variable
        Mask = "XXX / XXX XX XX" 'masque de saisie
    If Tsiret = "" And KeyCode <> 8 And KeyCode <> 46 Then Tsiret = Mask 'si le textbox est vide et la touche tapée est "Retour en arriere" ou "suppr" on remet le pasque entier
    txt = Tsiret.Value 'variable txt = le textbox
    If txt = Mask Then Tsiret.SelStart = 0 'si txt = le masque  le carret est au debut (carret=curseur)
    s = Tsiret.SelStart: 's= position carret
    longg = Tsiret.SelLength: If longg = 0 Then longg = 1 ' longg = la longeur de text selectionner(bleuie)
    plus = IIf(KeyCode < 96, 32, -48) 'coeef supplement keycode pour code asc
    Select Case KeyCode 'selon keycode(touche tapée
    Case 96 To 105, 65 To 90 'case chiffre ou lettres
        If s = Len(Mask) Then KeyCode = 0: Exit Sub ' si s= la fin du textbox on sort
        Mid(txt, s + 1, longg) = Chr(KeyCode + plus) & Mid(Mask, s + 2, longg - 1): KeyCode = 0 'remplacement du masque par la touchetapée + la partie correspondant a la selection (index de depart et de fin)
        Tsiret = txt: Tsiret.SelStart = IIf(InStr(1, Tsiret, "X") = 0, s + 1, InStr(1, Tsiret, "X") - 1) 'repositionnement du carret (curseur) sur le prochain x
    Case 8  ''si touche retour en arriere
        If s <> 0 Then Mid(txt, s, longg + 1) = Mid(Mask, s, longg + 1) Else Exit Sub 'si position carret(curseur) <> 0 remplacement du caractere par celui du masque au meme endroit
        Tsiret = txt: Tsiret.SelStart = s - 1: KeyCode = 0 'textbox = txt et positionnement du carret(curseur)
    If txt = Mask Then Tsiret = "" ' si txt = masque alors on vide le textbox
    Case 46 'si touche suppr
        If Tsiret = "" Then Exit Sub ' si letextbox est vide on sort
        If longg = 0 Then longg = 1 ' si la longeur de selection de texte est 0 (donc juste selstart) alors la longeur =1
        Mid(txt, s + 1, longg) = Mid(Mask, s + 1, longg) 'remplacement de la selection de texte dans le textbox par la partie correspondante du masque
        Tsiret = txt: Tsiret.SelStart = s: KeyCode = 0 ' et enfin textbox = txt et positionnement du carret(curseur)et annulation de la touche
    If txt = Mask Then Tsiret = "" ' si txt = masque alors on vide le textbox
 
    Case 39: Tsiret.SelStart = s + 1 ' deplacement avec les fleche (droite)
    Case 37: Tsiret.SelStart = s - IIf(s > 0, 1, 0) ' deplacement avec les fleche (gauche)
   
    Case 13:    ' touche enter  fait ce que tu veux c'est la sortie
    Case Else: KeyCode = 0
    End Select
End Sub

je regarde ce soir pour les maj/min ;)
 
Dernière édition:

Eric C

XLDnaute Barbatruc
Bonjour le forum
Bonjour le fil
Bonjour cathodique ;)

Il est vrai que j'aurais du ouvrir un nouveau sujet de discussion en y plaçant un lien vers ce fil. Mais, je me suis dit que ce fil avait été vu par de nombreuses personnes forcément intéressées et je savais pertinemment qu'il continuerai à l'être (je ne me suis pas trompé au vu des internautes qui l'on lu)). Ton problème avait été résolu à l'époque et je me suis inspiré du fichier de job75 (que je salue au passage) pour réaliser d'autres formats personnalisés. Toutefois ces formats restaient (et c'est qui me chagrinait) dans la saisie unique du numérique. J'aurais voulu pouvoir en disposer pour y créer des saisies alphanumériques mais personne n'a apporté sa solution. Notre ami Patricktoulon (que je salue également au passage) a recréer, à sa façon, un fichier qui incorpore un masque génial de saisie et qui se trouve être universel. Encore merci à Patrick.
Bonne soirée à toutes & à tous
@+ Eric c
 

Discussions similaires

Réponses
12
Affichages
282
Réponses
3
Affichages
310

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG