Recherchev & InputBox en VBA

Bonjour à tous,

Je rencontre un soucis sur l'utilisation de la fonction RECHERCHEV que j'ai intégré dans ma macro (fichier ci-joint).

En effet, j'ai un BDD avec des codes et des produits associés à chacun de ces codes. J'ai créé un InputBox demandant de rentrer un code produit. J'ai demandé ma macro de venir écrire le code saisie dans une cellule spécifique. J'aimerais que ma macro vienne automatique écrire le produit correspond juste à côté d'où l'objet de la fonction RECHERCHEV en VBA. Cependant, cette dernière me renvoie l'erreur N#A. Voici le code ci-dessous.

Petite précision : il ne s'agit pas du fichier original. Ce dernier est bien plus complexe d'où la nécessité du VBA

Les infos nécessaires sont résumées dans mon fichier ci-joint.

Function RECHERCHEV(Valeur_cherchee As Variant, Table_matrice As Range, No_index_col As Single, Valeur_proche As Boolean)

On Error GoTo RECHERCHEVerror
    RECHERCHEV = Application.VLookuo(Valeur_cherchee, Table_matrice, No_index_col, Valeur_proche)
    If IsError(RECHERCHEV) Then RECHERCHEV = "N#A1"
Exit Function
RECHERCHEVerror:
    RECHERCHEV = "N#A2"
End Function

Sub Bouton2_Cliquer()

Dim code As Variant

code = InputBox("Rentrer le code", "code")
If Not IsEmpty(code) Then
    Cells(7, "B") = code
End If

Dim valeurcodesaisie As Variant
Dim plage As Range
Dim numerocol As Single
Dim valeurpr As Boolean

valeurcodesaisie = code
Set plage = Sheets("BDD").Range("$B$5:$C$11")
numerocol = 2
valeurpr = False

Cells(7, "C") = RECHERCHEV(valeurcodesaisie, plage, numerocol, valeurpr)
End Sub

Quelqu'un a t-il des pistes/solutions pour mon problème ?

Cordialement,

Ludo.

Bonjour,

dans la Function RECHERCHEV, erreur de frappe sur le nom de la fonction VLookup (VLookuo)

dans la Sub Bouton2_Cliquer(), la variable code est un string, et dans la feuille BDD le code est numérique . VLookup ne trouve donc pas.

une solution consiste à convertir le code saisi en numérique :

valeurcodesaisie = CInt(code) ou valeurcodesaisie = Val(code)

A+

Merci beaucoup pour ta réponse !

Cela marche cependant il arrive que le code produit se présente sous la forme "4-1010101" (avec un "-") et dans ce cas là ta solution me renvoie l'erreur "N#A"

Que faut-il que je modifie/rajoute dans ce cas ?

Dans ce cas mieux vaut modifier toute la fonction RECHERCHEV

une possibilité

Function RECHERCHEV(Valeur_cherchee As Variant, Table_matrice As Range) 'modifier l'appel 
Dim Trouve As Range
    Set Trouve = Table_matrice.Find(Valeur_cherchee, LookAt:=xlWhole)
    If Not Trouve Is Nothing Then
        RECHERCHEV = Trouve.Offset(0, 1).Value
    Else
        RECHERCHEV = "N#A1"
    End If
End Function

Il faudra utiliser en l'état cette instruction :

valeurcodesaisie = code

et modifier l'appel à la fonction puisque deux arguments seulement seront nécessaires.( mais on peut adapter pour conserver les 4)

A+

VBA me signale une incompatibilité de type au niveau de la ligne "Set Trouve=Table_matrice.Find(Valeur_cherchee, LookAt = xlWhole)

Function RECHERCHEV(Valeur_cherchee As Variant, Table_matrice As Range)

Dim Trouve As Range
    Set Trouve = Table_matrice.Find(Valeur_cherchee, LookAt = xlWhole)
        If Not Trouve Is Nothing Then
            RECHERCHEV = Trouve.Offset(0, 1).Value
        Else
            RECHERCHEV = "N#A"
        End If
End Function

Sub Bouton2_Cliquer()

Dim code As Variant

code = InputBox("Rentrer le code", "code")
If Not IsEmpty(code) Then
    Cells(7, "B") = code
End If

Dim valeurcodesaisie As Variant
Dim plage As Range
Dim numerocol As Single
Dim valeurpr As Boolean

valeurcodesaisie = code
Set plage = Sheets("BDD").Range("$B$5:$C$11")
'numerocol = 2
'valeurpr = False

Cells(7, "C") = RECHERCHEV(valeurcodesaisie, plage)
End Sub

Tu peux expliquer ce :

Désolé, je ne lis jamais les réponses pour ne pas m'en inspirer.

Application.VLookuo

Application.Vlookup, il y a une erreur de frappe dans mon code

VBA me signale une incompatibilité de type au niveau de la ligne "Set Trouve=Table_matrice.Find(Valeur_cherchee, LookAt = xlWhole)

sans connaitre les données ni les saisies ni les éventuelles modifications du code, impossible de poser un diagnostic si ce n'est qu'il y a une incompatibilité de type.

Joignez le classeur

Ci-joint

Curieux ça fonctionnait sur mes essais ...

dans la Sub Bouton2_Cliquer(), supprimer la modif pour remettre comme à l'origine
Set plage = Sheets("BDD").Range("$B$5:$C$11") ' plage et non Valeur_cherchee qui provoque l'erreur 91

et dans la Function RECHERCHEV, modifier la ligne Set Trouve ... par :

Set Trouve = Table_matrice.Find(Valeur_cherchee, , , xlWhole)

Parfait! Cela fonctionne! Merci à toi ;)

Rechercher des sujets similaires à "recherchev inputbox vba"