Format text box

Résolu
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. Contributeur
    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
    1. 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
      1. Contributeur
        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. bonsoir
          je relance ce post pour une question
          comment on peut affecter cette macro a la cellule C13 d'une feuille?
          merci
          0
      2. 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
        1. Contributeur
          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. Contributeur
            erreur

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

            à adapter
            0
          2. Bonjour
            ca marche bien ce que je voulais
            merci
            a bientot
            0