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_ChangeTraitement 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 SubEt 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 SubEn 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 cVoilà, 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+