Transfert code avec zéro au début

Bonsoir ,

Je voudrais alimenter une petite bd (code et désignation) via un userform. Mais je suis confronté à une difficulté.

le code est numérique de 13 chiffres pouvant avoir des zéros au début. or lors du transfert sur la feuille, excel le traduit en numérique.

Comment résoudre cette difficulté? De plus on ne doit pouvoir ajouter un code en double.

Private Sub CommandButton2_Click()
   Dim dl As Long, c As Range, Chaine As String, plage As Range
   dl = Feuil1.Range("A" & Rows.Count).End(xlUp).Row + 1
   Chaine = Me.TextBox1.Value
   Set plage = Feuil1.Range("A2:B" & dl)

   If Me.TextBox1.TextLength < 13 Then MsgBox "Saisissez un code valide (13 chiffres)": Exit Sub
   If Me.TextBox2.Value = "" Then MsgBox "Complétez la désignation": Exit Sub

   Set c = plage.Columns(1).Find(what:=Chaine, lookat:=xlWhole)
   If Not c Is Nothing Then
      MsgBox Chaine & " existe déjà!"
      Me.TextBox1 = "": Me.TextBox2 = "": Me.TextBox1.SetFocus
      Exit Sub
   Else
      Feuil1.Cells(dl, 1).Value = Me.TextBox1.Value
      Feuil1.Cells(dl, 2).Value = Me.TextBox2.Value
   End If
End Sub

En vous remerciant.

Bonne soirée.

13classeur1.xlsm (24.25 Ko)

Bonsoir CP4,

Je réponds ici à ta 1ère question : je te propose d'utiliser cette instruction VBA :

Feuil1.Cells(dl, 1).NumberFormat = Format(Me.TextBox1.Value, String$(13, "0"))

dhany

Bonjour,

Essaie ceci :

With Feuil1.Cells(dl, 1)
            .NumberFormat = "@"
            .Value = Me.TextBox1.Value
        End With

Bonsoir CP4,

Je réponds ici à ta 1ère question : je te propose d'utiliser cette instruction VBA :

Feuil1.Cells(dl, 1).NumberFormat = Format(Me.TextBox1.Value, String$(13, "0"))

dhany

Merci beaucoup, mais ne fonctionne pas parfaitement. Le ou les (0) du début ne sont pas reportés et en plus la série de chiffres est dupliquée. exemple, je saisis 0123456789000 dans la textbox sur la feuille 123456789000123456789000.

Merci quand même d'avoir essayé.

Bonne soirée.

Bonjour,

Essaie ceci :

With Feuil1.Cells(dl, 1)
            .NumberFormat = "@"
            .Value = Me.TextBox1.Value
        End With

Jean-Eric , merci beaucoup, c'est parfait exactement le résultat escompté.

Encore merci.

Bonne soirée.

Bonjour CP4,

Tu as écrit que mon instruction VBA ne fonctionnait pas, et tu as tout à fait raison ! je me suis trompé, car au lieu d'une seule instruction, j'aurais dû l'écrire en plusieurs lignes :

With Feuil1.Cells(dl, 1)
  .NumberFormat = String$(13, "0")
  .Value = Me.TextBox1.Value
End With

désolé pour mon erreur ! heureusement, Jean-Eric t'a proposé une solution avec le format "@" (format "Texte") qui a bien marché ; et si tu as bien eu des zéros au début, c'est qu'ils devaient déjà être dans la TextBox.

dhany

Bonjour CP4,

Tu as écrit que mon instruction VBA ne fonctionnait pas, et tu as tout à fait raison ! je me suis trompé, car au lieu d'une seule instruction, j'aurais dû l'écrire en plusieurs lignes :

With Feuil1.Cells(dl, 1)
  .NumberFormat = String$(13, "0")
  .Value = Me.TextBox1.Value
End With

désolé pour mon erreur ! heureusement, Jean-Eric t'a proposé une solution avec le format "@" (format "Texte") qui a bien marché ; et si tu as bien eu des zéros au début, c'est qu'ils devaient déjà être dans la TextBox.

dhany

Bonjour Dhany ,

Merci d'avoir corrigé ton code initial.

Pourrais-tu m'expliquer la ligne de code ci-dessous:

.NumberFormat = String$(13, "0")

ou plutôt "String$(13,"0"), 13 est le nombre de chiffres, c'est le String$ que je n'ai pas compris.

Merci.

Bonne journée.

ps: ce code fonctionne.

En VBA, tu connais déjà String qui permet de déclarer une chaîne de caractères : Dim Nom As String ; c'est aussi une fonction qui retourne une chaîne de caractères de n fois le caractère spécifié.

Ainsi, String$(13, "0") retourne une chaîne de caractères de 13 zéros ; c'est donc comme si tu écrivais :

.NumberFormat = "0000000000000"


Équivalent de String$(13, "0") sur une feuille de calcul : =REPT("0";13) ; attention, les arguments sont inversés :

c'est d'abord le caractère, puis le nombre de fois.


REPT() est plus puissant que String$() car String$(3, "ABC") retourne 3 fois le 1er caractère "A" ➯ "AAA"

alors que =REPT("ABC";3) retourne 3 fois "ABC" ➯ "ABCABCABC" ; pour faire la même chose en VBA :

Sub Essai()
  [B2] = WorksheetFunction.Rept("ABC", 3)
End Sub

OU

Sub Essai()
  [B2] = Evaluate("=REPT(""ABC"", 3)")
End Sub

dhany

Merci infiniment Dhany ,

C'est très très gentil de ta part. Un petit cours fort instructif. En effet, je connais String pour déclarer une variable mais j'avoue que je ne savais pas que c'est aussi une fonction.

Toute ma gratitude.

Bonne fin d'après-midi.

Rechercher des sujets similaires à "transfert code zero debut"