Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Worksheetfunction et r éférence à une plage nommée

4 réponses
Avatar
J-Paul
Bonsoir,

Je galère avec un petit problème.
J'utilise application.Worksheetfunction pour faire appel à la fonction Excel
RechercheV.
Cette fonction recherche une valeur dans une plage nommée.

En Visual Basic, j'ai traduit cela en :

Résultat = Application.WorksheetFunction.VLookup(Hor, plageHor, 3, False)

où Hor est la valeur recherchée et PlageHor, une variable string
correspondant au nom de la plage nommée.
Or cela ne marche pas !

En sachant que plus haut, j'ai utilisé cette méthode d'une façon un peu
différente avec succès : la plage n'est pas nommée mais je fournis ses
coordonnées :

Set plagetps = Workbooks(1).Sheets("PARAMETRES").Range("E1:F2")

Résultat = Application.WorksheetFunction.VLookup(Tps, plagetps, 2)

Merci de votre avis sur la façon de faire référence à cette plage nommée
pour une fonction Excel dans VBA.
--
J-Paul Bérard

4 réponses

Avatar
Daniel
Bonsoir.
Comme le montre ton second exemple, la plage plageHor doit être de type
"range", pas "string".
Cordialement.
Daniel
"J-Paul" a écrit dans le message de
news: BFBFB393.126C6%
Bonsoir,

Je galère avec un petit problème.
J'utilise application.Worksheetfunction pour faire appel à la fonction
Excel
RechercheV.
Cette fonction recherche une valeur dans une plage nommée.

En Visual Basic, j'ai traduit cela en :

Résultat = Application.WorksheetFunction.VLookup(Hor, plageHor, 3, False)

où Hor est la valeur recherchée et PlageHor, une variable string
correspondant au nom de la plage nommée.
Or cela ne marche pas !

En sachant que plus haut, j'ai utilisé cette méthode d'une façon un peu
différente avec succès : la plage n'est pas nommée mais je fournis ses
coordonnées :

Set plagetps = Workbooks(1).Sheets("PARAMETRES").Range("E1:F2")

Résultat = Application.WorksheetFunction.VLookup(Tps, plagetps, 2)

Merci de votre avis sur la façon de faire référence à cette plage nommée
pour une fonction Excel dans VBA.
--
J-Paul Bérard



Avatar
JB
Bonjour,

x = Application.VLookup(hor, Range(plageHor), 3, False) si plageHor est
une variable

x = Application.VLookup(hor, Range("plageHor"),3, False) si plagehor
est un champ nommé

Cordialement JB
Avatar
JB
On peut également utiliser Evaluate
Sur l'exemple, 'produit' est le nom d'une table

Sub essai2()
x = Evaluate("VLOOKUP(A15,produit,2,FALSE)")
If IsError(x) Then
MsgBox "Erreur"
Else
MsgBox x
End If
End Sub
Avatar
J-Paul
Merci pour vos réponses et surtout JB pour son aide.

Il fallait effectivement ajouter Range au milieu de la fonction.
Mes 2 situations fonctionnent finalement ainsi :

- 1er cas : en faisant référence à la plage par ses coordonnées

Dim plagetps As Range

Set plagetps = Worksheets("PARAMETRES").Range("A1:B5")

nomplage = Application.WorksheetFunction.VLookup(Tps, plagetps, 2,
False)
où Tps est une variable string passée par la fonction

- 2e cas : pour chercher dans une plage nommée

Hth = Application.WorksheetFunction.VLookup(Hor, Range(nomplage), 2,
False)
où nomPlage est donc une variable string issue de la ligne précédente et
Hor une autre variable passée par la fonction.

Mais j'ai aussi beaucoup galéré pour une con... : il s'agit d'un planning et
la variable Tps est un temps de travail sous la forme "80%". Evidemment,
Excel m'avait automatiquement transformé cela en pourcentage si bien qu'au
lieu de "80%", je récupérais "0,8" en guise de valeur, et en plus cela ne
correspondait pas au type de variable déclaré. Piège pour un non-entraîné à
Excel.
Cordialement

--
J-Paul Bérard

dans l'article , JB à
a écrit le 9/12/05 22:46 :


x = Application.VLookup(hor, Range(plageHor), 3, False) si plageHor est
une variable

x = Application.VLookup(hor, Range("plageHor"),3, False) si plagehor
est un champ nommé