Remplir une TextBox en fonction de 3 autres

Bonjour à tous,

Le titre doit certainement vous parler mais je vous assure que parmi les sujets que vous avez traités je n'ai pas trouvé la réponse... Cela fait presque deux jours que je bloque sur cette macro.

J'explique du mieux que je pourrai mais je ne vais pas pouvoir vous transmettre le fichier étant donné que les données sont classées confidentielles.

J'ai une grosse base de données regroupant diverses informations notamment un identifiant composé de 2 ou 3 lettres en fonction du NOM et Prénom de chacun et du Service occupé.

Ce que je souhaite faire : J'essaie de faire un formulaire qui me permet d'enregistrer un nouvel utilisateur dans la base de donnée. J'ai donc mes différents champs : 2 TextBox pour le NOM et Prénom et une ComboBox pour le Service

J'ai 3 Boutons de commande : 1 pour annuler et fermer le Userform

1 autre pour enregistrer les données dans la base de données (qui fonctionne)

1 dernier bouton pour créer l'identifiant ----> Qui ne fonctionne pas ! Excel tourne à l'infini et fini par planter et se fermer.

Concernant l'identifiant qui doit être attribué : Il doit être différent de ceux déjà présents dans la base de données en Colonne A et est donc créé de la même que les autres à l'aide du NOM, Prénom, et Service

Pour résumé :

  • - Formulaire
      TextBox qui se remplie après click sur un Bouton en fonction des TextBox NOM et Prénom et de la ComboBox Service
    • Indentifiant unique (en se basant sur ceux déjà présents dans la BD Colonne A

Je vous montre mon code afin que ça soit plus parlant

Pour que la TextBox se remplisse après click sur le bouton "Créer ID"

Private Sub CommandButton3_Click()
Call TextBox5_Change

Traitement de la TextBox "ID"

Private Sub TextBox5_Change()
Dim ID As String
    j = Range("A65536").End(xlUp).Row
    Set Dictio = CreateObject("Scripting.Dictionary")
    Set plage1 = Range("A6,A" & j)

    Dictio.Add ID, plage1
n = 1

Line1:
    Do
        If UserForm1.ComboBox1.Text Like "*Visage*" Or UserForm1.ComboBox1.Text Like "*Bébé*" Or _
           UserForm1.ComboBox1.Text Like "*Rincés*" Then
            ID = Mid((UserForm1.TextBox1.Value), 1, 1) & Mid((UserForm1.TextBox2.Value), n, 1)

        Else
            ID = Mid((UserForm1.TextBox1.Value), 1, 1) & Mid((UserForm1.TextBox2.Value), n, 1) & _
                   Right(UserForm1.TextBox2.Value, 1)

            If Dictio.exists(ID) Then
                GoTo Line2
            Else
                UserForm1.TextBox5.Value = ID
'                Dictio.Add ID, ""
            End If

            '************************************************************************************
            'rajouté par PHE pour stopper la boucle lorsque le dernier visa est en place
            'sinon il traite les lignes vides et ça mouline à l'infini
            '            If ActiveCell.Value = "" Then
            '                'Initialise le compteur Fin
            '                tmpFin = GetTickCount64 'rajouté par PHE
            '                Application.ScreenUpdating = True 'rajouté par PHE
            '                MsgBox ("durée ; " & (tmpFin - tmp) / 1000 & " secondes.") 'rajouté par PHE
            '                Exit Sub 'rajouté par PHE
            '            End If 'rajouté par PHE
            '************************************************************************************
            n = 1
            GoTo Line1
        End If
Line2:
        n = n + 1
    Loop Until Not Dictio.exists(ID)
    UserForm1.TextBox5.Text = ID
'    Dictio.Add ID, ""
    n = 1
    GoTo Line1

End Sub

Et enfin mon Bouton "Valider" pour enregistrer les informations saisies y compris l'ID créé dans la TextBox5

Sub Enregistrer()
'Déclaration variable
    Dim v As Range

    With UserForm1
        PRENOM = .TextBox1.Value
        NOM = .TextBox2.Value
        POLE = .ComboBox2.Value
        SERVICE = .ComboBox1.Value
        ENTREE = .TextBox3.Value
        SITE = .ComboBox3.Value
        STATUT = .ComboBox4.Value
        COMMENTAIRE = .TextBox4.Value
        SORTIE = .TextBox6.Value
        ID = .TextBox5.Value

    End With

    With Worksheets("LISTE")
        'Affectation d'une variable à la 1ère cellule vide
        Set v = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
    End With

    With v
        .Value = ""
        .Offset(0, 0).Value = ID
        .Offset(0, 1).Value = NOM
        .Offset(0, 2).Value = PRENOM
        .Offset(0, 3).Value = POLE
        .Offset(0, 4).Value = SERVICE
        .Offset(0, 5).Value = SITE
        .Offset(0, 6).Value = STATUT
        .Offset(0, 7).Value = COMMENTAIRE
        .Offset(0, 8).Value = ENTREE
        .Offset(0, 9).Value = SORTIE

    End With
    v.CurrentRegion.Borders.LineStyle = xlContinuous

    'Réinitialisation de la variable
    Set v = Nothing

End Sub

En espérant que j'ai réussi à être suffisamment clair et précis :/

Je vous remercie par avance pour votre aide.

Cordialement,

Liight

Je me réponds moi même car j'ai fini par trouver la réponse

Il fallait rajouter ce code

Sub CreationID()
    Dim ID As String, c As Range
    Dim n As Variant
    Set Dictio = CreateObject("Scripting.Dictionary")
    I = Range("A65536").End(xlUp).Row
    Set plage1 = Range("A6:A" & I)

  For Each c In plage1
        If Not Dictio.Exists(c.Value) Then
            Dictio.Add c.Value, c.Value
        End If
    Next c

Voilà, si quelqu'un à besoin de plus de détail, n'hésitez pas.

Cdt

Bonjour,

j'allais te poser comme question : comment construis-tu ton identifiant si tu as :

  • Jean-Claude Dus, service PerduDeLaVie
  • Jésus-Christ Dieu, service Paradis

A+

Rechercher des sujets similaires à "remplir textbox fonction"