1 pièce(s) jointe(s)
Problème fonction vlookup
bonjour,
j'ai un problème avec la fonction vlookup. J'ai réalisé un userform, j'aimerais que lorsque je rentre une donnée dans la première textbox et que j'appuie sur un bouton les autres textbox de l'userform se remplissent grace a une "recherchev" dans une table. Le problème c'est que mon code ne marche et un message d'erreur s'affiche :
Pièce jointe 211617
voila mon code :
Code:
1 2 3 4 5
| Private Sub CommandButton2_Click()
UserForm2.TextBox2.Value = Application.VLookup(UserForm2.TextBox1.Value, Range("listepersonnel"), 4, True)
UserForm2.TextBox4.Value = Application.VLookup(UserForm2.TextBox1.Value, Range("listepersonnel"), 3, True)
UserForm2.TextBox5.Value = Application.VLookup(UserForm2.TextBox1.Value, Range("listepersonnel"), 2, True)
End Sub |
Solution avec la fonction MATCH
Bonjour,
Solution avec la fonction Match
Scénario
Dans l'exemple présenté ici
Un UserForm contenant
- 4 contrôles TextBox, nommés respectivement TextBox1, TextBox2, TextBox3 et TextBox4
- 1 contrôle Frame nommé Frame1 englobant les TextBox 2 à 4 et dont la propriété Enable est initialisée à False à l'activation du formulaire.
- 1 CommandButton pour fermer le UserForm.
La recherche de la valeur entrée dans TextBox1 et le remplissage des valeurs des TextBox2 à 4 se fait dès la validation de la valeur par la touche Enter.
Procédures
Activation du formulaire
Code:
1 2 3 4 5
| Private Sub UserForm_Activate()
With Me
.Frame1.Enabled = False ' Le Frame contient TextBox1, 2 & 3
End With
End Sub |
Validation de l'entrée de la valeur dans TextBox1
Code:
1 2 3 4 5 6 7 8
| Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With Me.TextBox1
' Si la valeur n'est pas trouvée, Focus sur TextBox1 et effacement de la valeur entrée
If ReadRecord(.Value, Range("db_Data")) = False Then
.Value = "": .SetFocus
End If
End With
End Sub |
Procédure de lecture de l'enregistrement cherché (Retourne False si pas trouvé)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Function ReadRecord(LookUpValue As String, AreaData As Range) As Boolean
' Procédure de recherche le LookUpValue dans la plage AreaData
' et affectation des valeurs aux TextBox2, 3 et 4
' La fonction renvoie True si la valeur cherchée a été trouvée
Dim fn As WorksheetFunction, RowNumber As Long
Set fn = Application.WorksheetFunction
On Error Resume Next
RowNumber = fn.Match(LookUpValue, AreaData.Resize(columnsize:=1), 0)
If Err.Number = 0 Then
On Error GoTo 0
With Me
.TextBox2.Value = AreaData(RowNumber, 2)
.TextBox3.Value = AreaData(RowNumber, 3)
.TextBox4.Value = AreaData(RowNumber, 4)
End With
ReadRecord = True
End If
Set fn = Nothing
End Function |
Procédure de fermeture du formulaire
Code:
1 2 3
| Private Sub CommandButton1_Click()
Unload Me ' Fermeture du formulaire
End Sub |