Recherche avec fonction "Find" de la cellule contenant le résultat de 1/7
Bonjour tout le monde,
Dans le classeur suivant, Feuille "Sheet4", je fais un Vlookup pour récupérer la valeur d'une cellule dans une variable, et ensuite je voudrais utiliser la valeur de cette variable pour effectuer une recherche "Find" dans mon tableau afin de colorier l'intérieur de la cellule.
Mon problème c'est que lorsque je recherche avec la fonction "Find" la cellule qui contient la valeur que j'ai récupéré avec mon Vlookup (en attribuant à VAR1 la valeur "euro" et à VAR2 la valeur "L"), ça ne fonctionne pas car la valeur de la cellule L2 est le résultat d'une division sans fin (=1/7), donc la valeur récupérée par mon Vlookup correspond à ce nombre sans fin, mais ma cellule L2 doit être formatée pour afficher une valeur avec 6 décimales seulement.
En fait, dans ma fonction "Find", je n'arrive pas à faire correspondre la valeur de mon Vlookup avec le chiffre formaté avec 6 décimales dans la cellule. Résultat, ma fonction "Find" ne trouve rien...
Ca fait deux heures que je suis dessus et je deviens fou :p Quelqu'un à la solution ? Merci d'avance...
Mon code est dans le module 3:
Salut,
Selon moi, tu as déjà une erreur d'écriture dans le nom de la fonction VLook1up : ce 1 me semble superflu ou incorrect.
Ensuite, peux-tu indiquer des exemples de valeurs qu'il faut introduire dans les deux InputBox qui s'ouvrent afin de pouvoir continuer logiquement. Si tu expliques carrément : "Si j'introduis xx dans le premier InputBox et yy dans le second, je voudrais qu'il me trouve ceci_cela car bla_bla_bla", ce serait encore mieux.
La solution doit consister à mettre en place des arrondis, soit sur ta feuille Excel, soit dans un calcul effectué dans ta macro, soit aux deux endroits.
A te relire.
Salut Yvouille, mon code est dans la "Sub Try1()" du Module 3 pas dans une fonction...
Le code est rattaché au tableau de la "Sheet4" du classeur. Dans la variable VAR1 je veux rentrer "Euro" et dans VAR2 "L", afin que mon Vlookup contenu dans la variable VAR3 me retourne la valeur contenu en L2. En L2 j'ai fait exprès de rentrer la valeur ="1/7" (division sans fin : 0,1428...) avec un formatage de la cellule qui ne fait apparaître que 6 décimales. Quand je fais tourner le programme en pas à pas, pour VAR3 VBA me retourne la valeur 0,142857142857143, ce qui est ok, mais le problème vient quand je fais une recherche "Find" en utilisant le résultat de mon Vlookup pour définir la valeur recherchée : ma fonction "Find" recherche donc la valeur 0,142857142857143, mais dans mon tableau la valeur est arrondie à 6 décimales, donc VBA ne trouve rien avec la fonction "Find".
J'ai essayé de chercher comment résoudre ce problème mais en vain, je ne trouve pas la solution (j'ai essayé en utlisant la fonction "Format", avec "Round", etc...).
Mais je sais qu'il y a longtemps j'avais réussi à résoudre ce pb, mais je n'arrive pas à me souvenir... :(
Est-ce que c'est plus clair avec cette petite explication ?
Désolé,
J'ai cherché un peu dans tous les sens, mais je ne suis arrivé à aucun résultat. De plus, je ne sais trop dans quel sens te conseiller de continuer à chercher
Même en essayant d'arrondir ta division 1/7 à 6 chiffres sur ta feuille Excel ainsi que ta variable VAR3 dans la macro***, ça ne passe pas. J'ai également tenté de modifier le type de la VAR3 (as String, as Double) et le format des nombres sur ta feuille , mais sans succès.
"Essayé, pas pu !".
*** Arrondi de la VAR3 dans la macro : VAR3 = Round(WorksheetFunction.VLookup(arg1:=VAR1, arg2:=Range(Cells(2, 10), Cells(2, 10).End(xlDown).End(xlToRight)), _
'arg3:=VAR2, arg4:=False), 6)
Pour ceux que ça intéresse, la solution consistait juste à arrondir la valeur correspondant au résultat du Vlookup avec le même nombre de décimales que la valeur affichée dans la cellule contenant la valeur du Vlookup : En cellule L2 j'ai le résultat de l'opération =1/7 arrondi à 6 décimales. Quand je fais le Vlookup avec les valeurs "Euro" et "L", le résultat de mon Vlookup est 0,142857142857142. Il faut donc arrondir le résultat du Vlookup à 6 décimales pour pouvoir l'utiliser ensuite dans une fonction "Find"... Voili voilou
Salut,
Il me semble que je t’ai vachement mis sur la bonne voie ; un p’tit merci aurait été apprécié.
J’ai l’impression que j’ai tenté la solution que tu indiques et ne comprends pas que ça n’a pas fonctionné chez moi. Peux-tu fournir un fichier Excel avec ta macro qui fonctionne, stp ?
Euh j'avais déjà pensé à utiliser "Round" avant de poster sur le forum...
En fait le bout de code que vous avez proposé fonctionne... On peut aussi faire le "Round" dans la fonction "Find" au lieu de le faire avec le Vlookup...
Sub Try1()
Dim VAR1 As Variant, VAR2 As Variant, VAR3 As Variant
Dim RNG As Range
Dim VAR4 As Double
Workbooks("Book12.xlsm").Worksheets("sheet4").Select
Range(Cells(2, 10), Cells(2, 10).End(xlDown).End(xlToRight)).Interior.Color = xlNone
VAR1 = Application.InputBox(prompt:="Type in the currency you want to investigate", Type:=2)
If VarType(VAR1) = vbBoolean Then Exit Sub
VAR2 = Asc(StrConv(Application.InputBox(prompt:="Type in the letter of the column you want to research.", Type:=2), vbUpperCase)) - 73
If VarType(VAR2) = vbBoolean Then Exit Sub
'Faire le "Round" ici
VAR3 = Round(WorksheetFunction.VLookup(arg1:=VAR1, arg2:=Range(Cells(2, 10), Cells(2, 10).End(xlDown).End(xlToRight)), _
arg3:=VAR2, arg4:=False),6)
'Ou faire le "Round" ici
Set RNG = Workbooks("Book12.xlsm").Worksheets("Sheet4").Range(Cells(2, 10), Cells(2, 10).End(xlDown).End(xlToRight)). _
Find(Round(VAR3, 6))
RNG.Interior.Color = rgbCoral
MsgBox prompt:=VAR3
End Sub
Merci quand même Yvouille !! : ) Je ne comprends pas pourquoi le code ne fonctionne pas chez vous...
On a apparemment pas effectuer exactement les mêmes essais, bien que l’idée de base soit identique.
Peux-tu fournir un fichier Excel avec ta macro qui fonctionne, stp ?
Bonjour,
Ou, peut-être, plus simplement, rechercher la formule directement :
Sub iFind()
Dim r As Range, strVar As String
strVar = "=1/7"
Set r = Workbooks("Book12.xlsm").Worksheets("Sheet4").Range(Cells(2, 10), Cells(2, 10).End(xlDown).End(xlToRight)).Find(strVar, LookIn:=xlFormulas)
MsgBox r.Address
End SubLe classeur est déjà posté dans le thread, et la Sub qui fonctionne c'est celle que j'ai copié/collé 4 messages plus haut...
@Pijaku: Oui ça aurait pu être une solution mais j'ai besoin de baser mon "Find" sur le résultat de la cellule qui contient =1/7 et non pas la formule car j'accède à cette donnée à partir d'autres données en utilisant un Vlookup. Je ne pense pas que l'on puisse récupérer la formule d'une cellule avec un Vlookup, si ?
Bonjour,
Je ne comprends pas trop la démarche.
Pourquoi ne pas chercher ta monnaie (ton "currency") directement avec un Find et décaler avec Offset?
Exemple :
Sub Try1()
Dim VAR1 As Variant, VAR2 As Variant
Dim RNG As Range
Workbooks("Book12.xlsm").Worksheets("sheet4").Select
Range(Cells(2, 10), Cells(2, 10).End(xlDown).End(xlToRight)).Interior.Color = xlNone
VAR1 = Application.InputBox(prompt:="Type in the currency you want to investigate", Type:=2)
If VarType(VAR1) = vbBoolean Then Exit Sub
VAR2 = Asc(StrConv(Application.InputBox(prompt:="Type in the letter of the column you want to research.", Type:=2), vbUpperCase)) - 73
If VarType(VAR2) = vbBoolean Then Exit Sub
Set RNG = Workbooks("Book12.xlsm").Worksheets("Sheet4").Range(Cells(2, 10), Cells(2, 10).End(xlDown).End(xlToRight)). _
Find(VAR1).Offset(0, VAR2)
RNG.Interior.Color = rgbCoral
End SubAbsolument ça serait beaucoup plus efficace, mais j'ai écris ce programme just for the sake of playing with code : ) Je voulais juste utiliser qqles fonctions pour me rafraichir la mémoire (Find, inputbox etc)...