Formule RECHERCHEV() transposé en VBA
Bonjour a tous,
Formule RECHERCHEV() transposé en VBA :calim2:
Après lecture et mise en pratique dans une feuille Excel, du tutoriel RECHERCHEV()
(vraiment très bien ce tutoriel) j’essaie de transposer cette fonction RECHERCHEV() en VBA.
Malgré mes nombreuses tentatives, je ne parviens pas à la faire fonctionner.
Je pense avoir une erreur de syntaxe.
Au final j’envisage d’utiliser cette fonction dans plusieurs TextBox sur une USF.
RECHERCHEV() sera imbriqué avec COLONNE(), dans le but de pallier au problème d’ajout – suppression de colonne dans la feuille Excel, qui me sert de base de données.
Je me suis complètement perdu avec la syntaxe, dans un premier temps j’aimerais faire fonctionner la fonction RECHERCHEV() uniquement dans sa plus simple expression.
Comme avec cette version :
C’est la variable NumCodeArticle qui fournit le numéro à chercher.
La variable RecupValeur récupère la « Désignation » qui correspond au « Code article » de l’élément cherché.
Code:
RecupValeur = Evaluate("VLOOKUP( " & NumCodeArticle & ",Feuil2!A1:AT9000,Feuil2!E1) ")
Les variables NumCodeArticle et RecupValeur sont de type Variant cars je n’ai pas su trouver le type exact à utiliser sans que cela génère une erreur (type incompatible)
Lorsque j’exécute cette Sub, la variable RecupValeur ne renvoie rien du tout. (Même pas un signe).
Si je modifie le type des variables par Long et String j’obtiens une erreur (erreur d’exécution 13, Incompatibilité de type). Et la variable RecupValeur renvoie : RecupValeur= ‘’ ‘’
Code:
1 2 3 4 5 6 7 8 9 10
| Sub FormuleDeRechercheFormatVBA()
Dim NumCodeArticle As Variant
Dim RecupValeur As Variant
NumCodeArticle = 9104299
RecupValeur = Evaluate("VLOOKUP( " & NumCodeArticle & ",Feuil2!A1:AT9000,Feuil2!E1) ")
End Sub |
Voilà au final ce que je cherche à faire fonctionner dans des TexBox.
C’est le contenu de la variable RecupValeur qui fournira la value des TexBox
( TexBox4.value= RecupValeur
Ici c’est RECHERCHEV() imbriquer avec COLUMN() et les données se trouve sur un classeur différent ( un autre classeur) que celui qui contient la USF.
Code:
1 2
|
RecupValeur = Evaluate("VLOOKUP(& NumCodeArticle & ,[DEVLSAPTRAV500.xls]DEVL.SAP.TRAV.S00!C1:C46,COLUMN([DEVLSAPTRAV500.xls]DEVL.SAP.TRAV.S00!R1C5))") |
Je crois qu’il y a des erreurs sur la syntaxe.
Merci a tous pour un coup de main. :oops:
Résultat de mes recherches
J’ai rajouté une variable « RecupValeur 2 » de type Range
Toutes les lignes fonctionnent. (Il faut les dé-comenté).
La variable « Recipiant » récupère la valeur.
Mon seul regret c’est que la ligne 5 ne remplit pas entièrement sa fonction comme je l’aurais souhaité.
En effet, lorsque je rajoute une ou plusieurs colonnes dans la feuille du classeur contenant toutes les données, la fonction COLUMN ne recalcule pas la nouvelle position de la colonne qui a été décalée.
Donc les données récupérées ne sont pas les bonnes.:cry:
Il faut encore se creuser la tête, je suis pas loin du but.:D
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| Sub FormuleDeRechercheFormatVBA()
Dim NumCodeArticle As Long
Dim RecupValeur As String
Dim Recipiant
Dim RecupValeur2 As Range
NumCodeArticle = 9113848
Set RecupValeur2 = Worksheets("Feuil2").Range("C10")
''' 1)Set RecupValeur2 = Application.Workbooks("DEVLSAPTRAV500.xls").Worksheets("CONSULTATION").Range("G4")
'''2) RecupValeur2 = WorksheetFunction.VLookup(NumCodeArticle, Worksheets("Feuil2").Range("A1:AT8294"), Worksheets("Feuil2").Range("E1"))
'''3) RecupValeur2 = Evaluate("VLOOKUP(" & NumCodeArticle & ",Feuil2!A1:AT8294,Feuil2!E1,FALSE)")
'''4) RecupValeur2 = Evaluate("VLOOKUP(" & NumCodeArticle & ",[DEVLSAPTRAV500.xls]DEVL.SAP.TRAV.S00!$A1:$AT12000,[DEVLSAPTRAV500.xls]DEVL.SAP.TRAV.S00!$F$1)")
'''5)
RecupValeur2 = Evaluate("VLOOKUP(" & NumCodeArticle & ",[DEVLSAPTRAV500.xls]DEVL.SAP.TRAV.S00!$A1:$AT12000,[DEVLSAPTRAV500.xls]DEVL.SAP.TRAV.S00!$F$1,COLUMN([DEVLSAPTRAV500.xls]DEVL.SAP.TRAV.S00!$A3))")
Recipiant = RecupValeur2
End Sub |