Format text box

Résolu
surplus Messages postés 673 Date d'inscription   Statut Membre Dernière intervention   -  
surplus Messages postés 673 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
j'aurais besoin de savoir si on peut enregistrer la valeur d'un textbox sous 2 formats différents
je m'explique c'est pour un textbox ou sera rentrée une immatriculation

1) les anciennes immat commencent par des chiffres ex: 0000 PLA 00 les lettres sont 2 ou 3

2)les nouvelles commencent par des lettres ex: "CV-875-LV" 2 lettres 3 chiffres 2 lettres

donc si je rentre des chiffres en premier formater en ex 1 si je rentre des lettres en 1er formater en ex 2
merci de votre aide
a bientôt

5 réponses

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    Voici une macro qui fait cela

    Cliquer dans le TextBox et mettre cette macro

    Option Explicit
    Dim num As Boolean

    Private Sub TextBox1_Change()
    If num = True Then '1er caractère
    Dim Valeur As Byte
    'ancien
    TextBox1.MaxLength = 11 'nb caracteres maxi dans textbox
    Valeur = Len(TextBox1)
    If Valeur = 4 Or Valeur = 8 Then TextBox1 = TextBox1 & " "
    Else
    'nouveau
    TextBox1.MaxLength = 9 'nb caracteres maxi dans textbox
    Valeur = Len(TextBox1)
    If Valeur = 2 Or Valeur = 6 Then TextBox1 = TextBox1 & "-"
    End If
    End Sub

    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If Not IsNumeric(Chr(KeyAscii)) And Not Chr(KeyAscii) = ":" Then
    num = False
    Else
    num = True
    End If
    End Sub
    0
  2. surplus Messages postés 673 Date d'inscription   Statut Membre Dernière intervention   4
     
    Bonjour
    c'est pas tout a fait ça
    on arrive pas a avoir 4 chiffres alignes ex 2550 MN 17
    et pour les lettres on obtient ml-1 25lm
    mon textbox est TextBox125 donc tout ce qui est TexBox1 j ai renommé en TextBox125
    a+++
    0
  3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    J'ai corrigé le code. Mais il restera un problème si dans les anciennes plaques tu as 3 chiffres ou 3 lettres et dans les nouvelles si tu as 2 chiffres.
    Option Explicit
    Dim num As Boolean
    Dim caract As String
    Private Sub TextBox1_Change()
    If num = True Then '1er caractère
    Dim Valeur As Byte
    'ancien
    TextBox1.MaxLength = 11 'nb caracteres maxi dans textbox
    Valeur = Len(TextBox1)
    If Valeur = 4 Or Valeur = 8 Then TextBox1 = TextBox1 & " "
    Else
    'nouveau
    TextBox1.MaxLength = 9 'nb caracteres maxi dans textbox
    Valeur = Len(TextBox1)
    If Valeur = 2 Or Valeur = 6 Then TextBox1 = TextBox1 & "-"
    End If
    End Sub

    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    caract = Left(TextBox1.Value, 1)
    If IsNumeric(caract) Then
    num = True
    Else
    num = False '
    End If
    End Sub

    Code valable pour 4 chiffres, 2 lettres et 2 chiffres (ancienne numérotation)
    2 lettres, 3 chiffres et 2 lettres (nouvelle numérotation)
    0
    1. surplus Messages postés 673 Date d'inscription   Statut Membre Dernière intervention   4
       
      bonsoir
      je relance ce post pour une question
      comment on peut affecter cette macro a la cellule C13 d'une feuille?
      merci
      0
  4. surplus Messages postés 673 Date d'inscription   Statut Membre Dernière intervention   4
     
    bonsoir
    merci pour ton aide je vais faire avec ça vu que mon département est avec 2 chiffres en anciennes plaques ça fera l'affaire
    merci
    bon week-end
    a bientôt
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Il faut mettre ce code dans la feuille où ce situe ta cellule:

    Option Explicit
    Dim num As Boolean
    Dim caract, Rep As String
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$C$13" Then
    Rep = Range("C13").Value
    caract = Left(Rep, 1)
    If IsNumeric(caract) Then
    num = True
    Else
    num = False
    End If
    If num = True Then '1er caractère
    Dim Valeur As Byte
    'ancien
    Rep = Range("C13").Value
    Valeur = Len(Rep)
    If Valeur > 10 Then Exit Sub 'si valeur exacte
    caract = Left(Rep, 3)
    Rep = Replace(Rep, caract, caract & " ") 'ajout espace à gauche
    caract = Right(Rep, 2)
    Rep = Replace(Rep, caract, " " & caract) 'ajout espace à droite
    Range("C13").Value = Rep
    Else
    'nouveau
    Rep = Range("C13").Value
    Valeur = Len(Rep)
    If Valeur > 8 Then Exit Sub 'si valeur exacte
    caract = Left(Rep, 2)
    Rep = Replace(Rep, caract, caract & "-") 'ajout - à gauche
    caract = Right(Rep, 2)
    Rep = Replace(Rep, caract, "-" & caract) 'ajout - à droite
    Range("C13").Value = Rep
    End If
    End If
    End Sub

    Code valable pour 4 chiffres, 2 lettres et 2 chiffres (ancienne numérotation)
    2 lettres, 3 chiffres et 2 lettres (nouvelle numérotation)

    Tu entres ton immatriculation sans espace ou tiret et ensuite tu cliques sur ta cellule, cela sera corrigé.
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      erreur

      Code valable pour 3 chiffres, 3 lettres et 2 chiffres (ancienne numérotation)

      à adapter
      0
    2. surplus Messages postés 673 Date d'inscription   Statut Membre Dernière intervention   4
       
      Bonjour
      ca marche bien ce que je voulais
      merci
      a bientot
      0