web-dev-qa-db-fra.com

Erreur "Impossible d'obtenir la propriété VLookup de la classe WorksheetFunction"

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?

16
user2864307

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
14
Santosh

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.

4
Omar Khan

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.

2
mjpowers0903