RechercheV sans tri

Résolu/Fermé
RachelMartel Messages postés 435 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 24 mars 2021 - 17 déc. 2013 à 17:05
RachelMartel Messages postés 435 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 24 mars 2021 - 17 déc. 2013 à 19:02
Bonjour,

Je suis intriguée par cette question. Lorsqu'on m'a enseigné la fonction RechercheV, on m'a dit que les données de la première colonne doivent être absolument triées. Aussi, j'ai vu quelques questions sur des forums qui disent qu'ils n'arrivent pas à utiliser la fonction sans que les valeurs soient triées.

Pourtant, si on indique "Faux" au dernier argument de la fonction, nul besoin de trier la liste. D'ailleurs, l'aide Excel le précise :

"Si l'argument valeur_proche est FAUX, il n'est pas indispensable que les valeurs de la première colonne de table_matrice soient triées."

Alors, j'aimerais savoir si je peux m'y fier et utiliser la fonction sans que ma liste soit triée. Avez-vous déjà eu des problèmes? Jusqu'à maintenant, je n'ai pas eu de problème, les valeurs affichées sont les bonnes. Par contre, je ne voudrais pas tomber sur un bug plus tard, surtout sur le fichier d'un de mes clients.

Merci de me rassurer :)


4 réponses

Salut.

J'utilise quotidiennement cette fonction avec l'argument faux sur des données non triées, et il n'y a jamais eu d'erreur.
2
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
17 déc. 2013 à 17:07
Bonjour,

Pour moi, les données ne doivent pas être triées.
Je pense que la question du tri s'impose si jamais ta valeur cherchée apparaît plusieurs fois.
Je l'ai déjà utilisé sur des listes non triées et elle fonctionne très bien.
0
Salut.
Si l'occurrence est multiple, recherchev ne renvoie de toute façon que la première trouvée.
Donc triées ou pas, les suivantes sont oubliées.
0
Boisgontierjacques Messages postés 175 Date d'inscription jeudi 19 septembre 2013 Statut Membre Dernière intervention 26 décembre 2018 64
17 déc. 2013 à 17:19
Bonjour,


RECHERCHEV(code;table;ColonneRésultat;Vrai ou faux)


Si la valeur cherchée est un code et si la table n'est PAS triée

Il faut spécifier le paramètre FAUX.
On récupère #N/A si le code n'existe pas.


Si la valeur cherchée est un code et si la table est TRIEE,
on peut spécifier le paramètre VRAI.
La recherche est alors faite par DICHOTOMIE et peut être x100 + RAPIDE puisqu'il suffit de quelques accés pour retrouver le code. C'est TRES IMPORTANT lorsque la table est de taille importante et que
la formule Recherchev() est recopiée x1000 fois (Avec FAUX , Excel consulte la table SEQUENTIELLEMENT).
Pour vérifier si le code existe (on ne récupère pas #N/A mais la valeur inférieure), il faut écrire:

=SI(RECHERCHEV(CodeCherché;Articles;1;VRAI)=
CodeCherché;RECHERCHEV(CodeCherché;Articles;2;VRAI);"Inconnu")

Si la table est triée par code et que le code exitse plusieurs fois, RechercheV(code;table;Col_Résultat;VRAI) positionnesur le dernier code.

Jacques Boisgontier
0
RachelMartel Messages postés 435 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 24 mars 2021 25
17 déc. 2013 à 17:28
Donc si je comprend bien, si j'utilise la RechercheV avec une table non triée avec plusieurs valeurs (genre 20 000), ça risque d'être lent?
0
Boisgontierjacques Messages postés 175 Date d'inscription jeudi 19 septembre 2013 Statut Membre Dernière intervention 26 décembre 2018 64
Modifié par Boisgontierjacques le 17/12/2013 à 19:08
>Donc si je comprend bien, si j'utilise la RechercheV avec une table non triée avec plusieurs valeurs (genre 20 000), ça risque d'être lent?

S'il y a seule formule RechercheV(), pas de problème.

Si en revanche, on recopie cette formule x1000 fois, il y aura un temps d'attente.

Dans ce cas, utiliser :

Fonction perso RechvM() matricielle plus rapide que Recherchev() classique

Si on modifie les 2.600 valeurs cherchées dans un tableau de 20.000 items,
le temps de recalcul n'est pas visuellement mesurable (5 sec pour recherchev())

-Sélectionner G2:G2673
=RechvM(F2:F2673;matable;2)
-Valider avec maj+ctrl+entrée

Dans un module
Alt+F11/Insertion module

Function RechvM(clé As Range, champ As Range, colResult)
Application.Volatile
Set d = CreateObject("Scripting.Dictionary")
a = champ.Value
b = clé.Value
For i = LBound(a) To UBound(a)
d(a(i, 1)) = a(i, colResult)
Next i
Dim temp()
ReDim temp(LBound(b) To UBound(b))
For i = LBound(b) To UBound(b)
temp(i) = d(b(i, 1))
Next i
RechvM = Application.Transpose(temp)
End Function

Jacques Boisgontier
0
RachelMartel Messages postés 435 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 24 mars 2021 25
17 déc. 2013 à 19:02
D'accord merci, je crois que je vais pouvoir en rester avec la RechercheV, car elle apparaît à une vingtaine de reprises à peine (une soumission)

Merci pour les infos!
0