Vlookup VBA donne une erreur

Bonjour le forum,

J'ai trouvé sur internet une explication pour integrer la fonction vlookup dans mon code (https://vbalabs.fr/article/top-astuce/recherchev-vba-userform/)

Je pense avoir tout bien fait mais cela ne fonctionne pas :

- la "reference" est cochée

- voici le bout de code :

'Municipalité
For I = 2 To Sheets("Drop list").Range("O65536").End(xlUp).Row
ComboBox211 = Sheets("Drop list").Range("O" & I)
If ComboBox211.ListIndex = -1 Then ComboBox211.AddItem Sheets("Drop list").Range("O" & I)
Next I
Me.ComboBox211 = ""

'Province
Dim myRangePr As Range
Dim resultPr As Variant

Set myRangePr = Sheets("Drop list").Range("O2:Q582")
resultPr = Application.WorksheetFunction.VLookup(ComboBox211.Value, myRangePr, 2, False)
If IsError(resultPr) Then
    MsgBox " Province not found"
Else
    TextBox29.Value = resultPr
End If

et le message d'erreur me dit :

Run-time error '1004'

Unable to get he Vlookup property of the WorksheetFunction class

Pouvez-vous me dire ou je me trompe svp

Merci

bonjour,

Tu peux recevoir ce message si l'élément recherché n'est pas trouvé.

Pour faciliter la recherche de la cause du problème que tu mentionnes.

Bonjour Heavy_B ,

Essayez en remplaçant

resultPr = Application.WorksheetFunction.VLookup(ComboBox211, 2, False)

par

resultPr = Application.VLookup(ComboBox211, myRangePr, 2, False)

La principale différence est la gestion des erreurs générées par la fonction invoquée (ici VLookup).
Si la fonction VLookup ne trouve pas la valeur cherchée alors une erreur est renvoyée (#N/A).

- Avec la version utilisant WorksheetFunction, l'erreur provoque le passage de VBA en mode débogage
- Avec la version n'utilisant pas WorksheetFunction, l'erreur est simplement retournée au niveau VBA et il n'y a pas de passage en mode débogage.
...

Re-bonjour à vous deux,

j'ai compris mon erreur : en effet la case est vide à l'ouverture du formulaire et donc le code ne sais pas trouver la valeur.

Par contre aucune idée de comment faire pour changer en cascade dans le formulaire :

Pour le fonctionnement de base je voudrait :

- ouvrir le formulaire avec la municipalité vide

- lorsqu'on selectionne la municipalité, la province et l'arrondissement changent

Le principe du Vlookup en excel, aucun soucis avec, mais pas en VBA.

Est-il possible d'insérer une formule vlookup dans une case excel via une commande vba?

Je vais faire un extrait de mon fichier et le mettre ici...

Re,

Heavy_B a écrit
j'ai compris mon erreur : en effet la case est vide à l'ouverture du formulaire et donc le code ne sais pas trouver la valeur.

Ce n'est pas cela qui provoque l'erreur AVEC le passage en mode débogage. Voir mon précédent message.

Ce que vous citez est une erreur de logique dans la conception de votre code.

Mais si, dans votre code, vous supprimez juste le terme ".WorksheetFunction", votre code fonctionnera correctement et il vous signalera qu'il n'a pas trouvé la commune vide "".

en effet, mes excuses...

Re ,

Nul besoin de vous excuser (on est entre nous sur ce forum). Je précisais seulement...

Bonjour le Forum,

me revoici avec une version simplifiée et vidée des infos personnelles de mon fichier.

Ce que j'aimerais : j'ai 1 combobox et 2 textbox (dans Userform3) dans lesquels je place la municipalité (combobox211) et que dans les textbox29 et textbox291 viennent respectivement se mettre la province et l'arrondissement automatiquement.

J'ai essayé de mettre un simple Vlookup dans l'insertion des valeurs des cellules (du genre

ws3.Cells(Ligne, 1).Formula = "Vlookup......."

, mais cela ne fonctionne pas) -> j'ai vu trop simple je crois...

Les données sont situées dans le sheet "Drop list" dans les colonnes O à Q

A l'ouverture du fichier il donne une erreur car j'ai supprimé la "page d'acceuil"

Pourriez-vous me dire comment faire svp

Au cas ou j'aurais oublié de supprimer 1 mot de passe, c'est "1234"

Bonjour Heavy_B ,

Voir le code suivant :

Private Sub ComboBox211_Change()
Dim LigneMunicipalite As Long
   With Me
      .TextBox29 = ""
      .TextBox291 = ""
      If .ComboBox211.ListIndex = -1 Then Exit Sub
      ' recherche de la ligne de la municipalité dans "Drop list"
      LigneMunicipalite = Application.Match(.ComboBox211, Sheets("Drop list").Range("o1:o9999"), 0)
      If Not LigneMunicipalite = 0 Then
         .TextBox29 = Sheets("Drop list").Cells(LigneMunicipalite, "p")     ' Province
         .TextBox291 = Sheets("Drop list").Cells(LigneMunicipalite, "q")     ' Arrondissement
      End If
   End With
End Sub

...

Bonjour mafraise,

merci beaucoup pour le code,

j'ai examiné le fichier que tu joint mais je ne trouve pas ou tu as mis le code.

Je suppose qu'il devrais se trouver dans le userform3?

Laisse tomber, trouvé...

merci bcp

Re,

Heavy_B a écrit :

j'ai examiné le fichier que tu joint mais je ne trouve pas ou tu as mis le code. Je suppose qu'il devrais se trouver dans le userform3?

Le code est dans le module de Userform3. C'est la première procédure à partir du "haut" du code.

edit : Trop tard pour moi !

Rechercher des sujets similaires à "vlookup vba donne erreur"