J'essaie de développer un formulaire pour suivre les factures lorsqu'elles arrivent. Le formulaire aura une zone de liste déroulante où je pourrai cliquer et sélectionner un numéro de fournisseur. Je souhaite que la zone de texte se remplisse automatiquement en fonction du numéro de fournisseur sélectionné dans la zone de liste déroulante. Voici ce que j'ai jusqu'à présent:
Private Sub ComboBox1_Change()
'Vlookup when ComboBox1 is filled
Me.TextBox1.Value = Application.WorksheetFunction.VLookup( _
Me.ComboBox1.Value, Worksheets("Sheet3").Range("Names"), 2, False)
End Sub
La feuille de travail 3 est à partir de laquelle les informations sont tirées (le numéro et le nom du fournisseur).
Lorsque je reviens au formulaire pour tester le code, j'obtiens l'erreur suivante:
Erreur d'exécution '1004': impossible d'obtenir la propriété VLookup de la classe WorksheetFunction
Comment puis-je réparer ça?
Essayez le code ci-dessous
Je recommanderai d'utiliser le gestionnaire d'erreurs lors de l'utilisation de vlookup, car une erreur peut se produire lorsque la valeur de recherche n'est pas trouvée.
Private Sub ComboBox1_Change()
On Error Resume Next
Ret = Application.WorksheetFunction.VLookup(Me.ComboBox1.Value, Worksheets("Sheet3").Range("Names"), 2, False)
On Error GoTo 0
If Ret <> "" Then MsgBox Ret
End Sub
OR
On Error Resume Next
Result = Application.VLookup(Me.ComboBox1.Value, Worksheets("Sheet3").Range("Names"), 2, False)
If Result = "Error 2042" Then
'nothing found
ElseIf cell <> Result Then
MsgBox cell.Value
End If
On Error GoTo 0
J'avais le même problème. Il semble que passer Me.ComboBox1.Value
Comme argument pour la fonction Vlookup
soit à l'origine du problème. Ce que j'ai fait, c'est attribuer cette valeur à un double, puis la mettre dans la fonction Vlookup.
Dim x As Double
x = Me.ComboBox1.Value
Me.TextBox1.Value = Application.WorksheetFunction.VLookup(x, Worksheets("Sheet3").Range("Names"), 2, False)
Ou, pour une méthode plus courte, vous pouvez simplement convertir le type dans la fonction Vlookup en utilisant Cdbl(<Value>)
.
Donc ça finirait par être
Me.TextBox1.Value = Application.WorksheetFunction.VLookup(Cdbl(Me.ComboBox1.Value), Worksheets("Sheet3").Range("Names"), 2, False)
Aussi étrange que cela puisse paraître, cela fonctionne pour moi.
J'espère que cela t'aides.
J'avais juste ce problème avec mon propre programme. Il s'est avéré que la valeur que je cherchais n'était pas dans ma table de référence. J'ai corrigé ma table de référence, puis l'erreur a disparu.