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 Ifet 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 "".
Re
Nul besoin de vous excuser (on est entre nous sur ce forum
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?
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