Mettre des zéros devant un nombre de moins de 8 chiffres

Bonjour à tous,

Je suis nouvelle sur le forum et débute en VBA et j'aimerais avoir de l'aide pour un développement pour mon travail.

Mon supérieur a créer un UserForm de concordance en VBA que je dois améliorer.

Celui-ci fait la concordance entre 2 logiciels. un client du logiciel A doit correspondre au dossier client du logiciel B en sachant que dans le logiciel B le dossier possède jusqu'à 5 membres. Le numéro de dossier de mon logiciel B est composé de 6 chiffres auquel on ajoute les 2 chiffres du membre soit 8 chiffres (ex:0023502)

Un contrôle est fait que pour valider la concordance le champs doit comporter 8 chiffres. Mais lorsque j'ajoute 1 au membre, mon numéro de dossier affiche 23503 au lieu de 0023503.

J'ai fait des essais avec la fonction LEN mais rien n'y fait.

Pourriez-vous m'aider, s'il vous plait, pour que dans mon champs qui se nomme "TB_Num_CO" les zéros devant le N° de dossier reste ?

Avec tous mes remerciements.

Cordialement,

Bonjour Isalou,

Bienvenue parmi nous!

La réponse est d'utiliser 'FORMAT' mais un fichier serait le bienvenu que nous sachions où et comment l'appliquer, la notion utilisée, 'Champ', étant assez vague.

A+

Bonjour Curulis57,

Je te remercie de ta réponse.

Voici le code de l'UserForm.

Les modifications que j'ai apporté sont entre les lignes de commentaire "début/fin de modification par Isalou".

Le champs est une zone de texte.

Merci pour l'aide apportée.

Private Sub CB_Num_WA_Click()
    TB_Num_WA = Coller()
    Activ_Valider
End Sub
Private Sub CB_Num_CO_Click()
    TB_Num_CO = Coller()
    Activ_Valider
End Sub

' début de modification par Isalou
Private Sub CB_Membre_Moins_Click()
    If TB_Num_CO Then
        TB_Num_CO = TB_Num_CO - 1
        Else: TB_Num_CO = TB_Num_CO
    End If
End Sub
Private Sub CB_Membre_Plus_Click()
    If TB_Num_CO Then
        TB_Num_CO = TB_Num_CO + 1
        Else: TB_Num_CO = TB_Num_CO
    End If
End Sub
'Fin de modification par Isalou

Public Sub UserForm_Initialize()
    F_Saisie.Caption = "Transcodage - " & Version
    OB_NUMDOS.Value = True
    TB_Commande.Value = "NUMDOS"
    TB_Num_WA.Value = ""
    TB_Num_CO.Value = ""
    CB_Num_CO.Caption = "Coller" & vbCr & "Numéro dossier Colibri"
    CB_Valider.Enabled = False
    If Test Then
        L_Test.Visible = True
    Else
        L_Test.Visible = False
    End If
End Sub
Private Sub OB_NUMDOS_Click()
    TB_Commande.Value = "NUMDOS"
    CB_Num_CO.Caption = "Coller" & vbCr & "Numéro dossier Colibri"
    Activ_Valider
End Sub
Private Sub OB_CODSAL_Click()
    TB_Commande.Value = "CODSAL"
    CB_Num_CO.Caption = "Coller" & vbCr & "Code salarié Colibri"
    Activ_Valider
End Sub

Private Sub CB_Valider_Click()
    Ajout_Ligne
End Sub
Private Sub CB_Annuler_Click()
    Unload Me
End Sub
Function Test_Chiffres(champ As String) As Boolean
    'Vérification que les champs sont bien uniquement constitués de chiffres
    Dim i As Byte
    On Error Resume Next
    Test_Chiffres = True
    If champ = "" Or Len(champ) > 8 Then
        Test_Chiffres = False
        Exit Function
    End If
    For i = 1 To Len(champ)
        If InStr("1234567890", (Mid(champ, i, 1))) = 0 Then
            Test_Chiffres = False
        End If
    Next
End Function
Sub Activ_Valider()
    'Tests d'activation du bouton Valider
    CB_Valider.Enabled = False
    If Test_Chiffres(TB_Num_WA.Value) And Test_Chiffres(TB_Num_CO.Value) Then
        If OB_NUMDOS.Value = True Then
            If Len(TB_Num_WA.Value) < Nb_car_WA And Len(TB_Num_CO.Value) = Nb_car_CO_NUMDOS Then
                CB_Valider.Enabled = True
            End If
        ElseIf OB_CODSAL.Value = True Then
            If Len(TB_Num_WA.Value) < Nb_car_WA And Len(TB_Num_CO.Value) = Nb_car_CO_CODSAL Then
                CB_Valider.Enabled = True
            End If
        End If
    End If
End Sub

Function Coller() As String
      Dim MyData As DataObject
      Set MyData = New DataObject
      'On Error GoTo NotText
      On Error Resume Next
      ' Get data from the clipboard.
      MyData.GetFromClipboard
      ' Assign clipboard contents to string variable.
      Coller = MyData.GetText(1)
'NotText:
      'If Err <> 0 Then
         'MsgBox "L'élément collé n'est pas du texte."
      'End If
End Function

Bonjour, Salut Curulis !

Juste pour dire que sans le fichier, on ne pourra pas se pencher efficacement sur le problème...

Ce dernier ne se situe pas à mon avis au niveau de VBA, mais dans la propension d'Excel à convertir en nombre des textes numériques, il faudra donc forcer le passage en texte en vérifiant que la méthode est sans incidences sur la suite...

NB- Ton code est plutôt bien écrit, à quelques détails près, les principaux que je te signales sont :

1) Une procédure d'évènement est par définition privée, et elle ne fonctionnera que dans le module d'objet auquel l'évènement est attaché, déclarer Public une procédure Initialize sera donc soit sans effet, soit empêchera la procédure de s'exécuter, je conseille donc de la rétablir en Private, et de s'assurer qu'elle se déclenche bien au chargement du Userform (par une MsgBox par exemple, que l'on éliminera une fois la chose assurée).

Note que les procédures VBA sont toujours publiques par défaut (à l'inverse des variables), si elles ne sont pas déclarées Private, elles sont donc publiques, sans que l'on ait à utiliser le mot-clé Public, sauf pour les procédures d'évènement qui font exception...

2) Par convention, et aussi par efficacité, on place toujours les procédures Function en tête de module. S'agissant d'un module privé (tel le Module de Userform), on devrait trouver dans l'ordre : les déclarations de niveau module (s'il y en a), les procédures Function, les procédures Sub autres que procédures d'évènements (tout cela dans la zone dite "General" du module), puis les procédures d'évènements (qui seront classées par ordre alpha si on laisse VBA faire...) Je conseille de respecter ces conventions, elle ont fait leur preuve et l'expérience montre que l'on s'y retrouve plus rapidement lorsqu'on travaille sur le code.

Cordialement.

Salut Isalou,

Bien le bonjour MFerrand,

tu devrais déjà bien te débrouiller avec ceci...

Private Sub TB_Num_CO_Change()
    If TB_Num_CO.Text <> "" Then TB_Num_CO.Text = Format(TB_Num_CO.Text, "00000000")
End Sub

Private Sub XXX_Click()
    TB_Num_CO.Text = CStr(Val(TB_Num_CO.Text) + 1)
End Sub

A+

Je te remercie beaucoup Curulis57, tu m’ôtes une sacrée épine du pied.

Je vais pouvoir continuer mon travail.

Je mets ce message en résolu.

Bon après-midi.

Cordialement,

Rechercher des sujets similaires à "mettre zeros devant nombre chiffres"