Fonction Find

Bonjour à tous,

Lorsque je fais une recherche avec find dans une plage de cellule contenant des valeurs obtenus avec des formules la fonction find ne trouve pas l'élément.

Je sais pas si je suis très clair.

Merci

Bonjour,

Avec un classeur pour exemple ce serait sûrement plus clair

A+

Vous êtes très clair!

Je vous confirme que la fonction range.find EST INCAPABLE DE TROUVER une valeur lorsqu'on le format ne correspond pas précisément.

Par exemple si vous cherchez les cellules dont la formule retourne la valeur 3,14, vous ne trouverez aucune de ces cellules en recherchant 3,140 par exemple. Encore moins, si la cellule est formatée avec "0,0" alors il faudra chercher "3,1", mais surtout pas "3,14" bien que ce en soit la juste "valeur". La raison est que le 4 n'est pas affiché, ce qui ne devrait normalement pas être pris en compte.

Ceci est valable pour la fonction interactive aussi bien que pour range.find de VBA.

D'après moi c'est un bug, mais rares sont ceux qui sont d'accord avec moi, sans qu'on sache la raison de leur indulgence...

Bonjour,

Quel est ton code ?

Il n'y a pas de code.

Il s'agit de la fonction Find ou control-F.

Essayez de rentrer =a1+b1 dans c1, 1540 dans a1, 20 dans b1 et de fomater c1 avec "#'##0".

Ensuite ctrl-F, 1560 et recherche par valeur et appuyez sur Ok. Il ne trouve rien! CQFD

Dans VBA, Range.find se comporte de la même manière.

Il est vrai que... mieux vaut utiliser un autre mode de recherche dans un cas pareil, mais on peut aboutir :

Sub test()
    Dim c As Range, v
    v = Format(1560, "#'##0")
    Set c = ActiveSheet.Columns("C").Find(Val(v), , xlValues, xlPart)
    If Not c Is Nothing Then
        MsgBox c.Address
    Else
        MsgBox "non trouvé"
    End If
End Sub

Cordialement.

Bonjour,

c'est magique! Ca marche! Comprends pas comment, mais ça marche!

Néanmoins la fonction "manuelle" ne marche pas comme vous pouvez le voir ci-dessous:

Merci!

untitled

Je dois avouer que ce qui m'a surpris, ce n'est pas le contournement consistant à reconvertir en nombre le nombre transformé en chaîne formatée au format de cellule, mais le fait que cela fonctionne avec xlPart et bloque avec xlWhole ! Là je ne comprends pas bien...

Cordialement.

Nb- je ne sais pas comment faire l'équivalent en manuel, et pas le temps de chercher...

j'ai regardé en détail et en lisant la doc j'ai compris que VAL() s'arrête à interpreter les chaines de caractères dès qu'elle trouve autre chose qu'un nombre ou un point. Donc dans votre code, VAL("1'560") retourne le nombre 1 et c'est ce qu'il va rechercher avec FIND().

Ainsi il va bien sûr trouver la cellule contenant 1560, vu que vous cherchez partiellement (xlPart).

Néanmoins mon exemple d'utilisation ci-dessous démontre qu'elle trouve aussi toute autre cellule contenant 1, ce qui n'est pas mon objectif.

Pour finir j'ai utilisé WORKSHEETFUNCTION.COUNTIF > 0 pour déterminer si un nombre est présent dans une feuille ou pas, par valeur (et non pas par formule). Ceci me permet de constater la présence ou l'absence d'un client dans une liste, lorsque les codes clients résultent d'une série de formules VLOOKUP par exemple.

Mon opinion reste que RANGE.FIND ne remplit pas ses promesses et que COUNTIF et autres fonctions similaires sont plus conformes aux attentes les plus légitimes! (c-à-d rechercher les cellules qui contiennent une certaine valeur, sans tenir compte du format d'affichage).

A mon avis FIND() est même trompeur, car vous pourriez conclure à l'absence d'une certaine transaction dans un relevé bancaire lorsque vous la recherchez par montant, juste parce que vous n'avez pas su épeler le montant en spécifiant le format exactement comme dans le relevé!

untitled val

Effectivement, j'avais zappé le fait que ton séparateur de milliers n'est pas l'espace !

Mais pour les paramètres FR, c'est l'espace, et Val renvoie bien 1560. Seulement, en le formatant comme je l'ai fait en VBA, cela renvoie effectivement 1... Il faudra donc que je recommence mes tests !

Ceci dit, quand il s'agit de nombre, je préfère en général éviter Find au profit de Match ou d'une boucle en VBA (quii dans le cas général n'est pas plus lente).

Oui moi aussi, pour ce qui concerne la programmation.

Mais pour ce qui concerne l'interactif, la solution n'est pas aussi évidente que ça!

Merci pour votre aide!

ok, vous apportez une solution pour ce qui concerne la programmation en VBA (utiliser MATCH).

Mais concernant la recherche manuelle (control-F), voyez-vous une solution à ce problème? Moi pas...

Merci et salutations.

Manuellement, aucune idée !

Cordialement.

Merci de confirmer mon opinion & salutations.

Rechercher des sujets similaires à "fonction find"