RechercheV sans tri
Résolu
RachelMartel
Messages postés
435
Date d'inscription
Statut
Membre
Dernière intervention
-
RachelMartel Messages postés 435 Date d'inscription Statut Membre Dernière intervention -
RachelMartel Messages postés 435 Date d'inscription Statut Membre Dernière intervention -
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 :)
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 :)
A voir également:
- RechercheV sans tri
- Comment faire un tri personnalisé sur excel - Guide
- Logiciel tri photo - Guide
- Recherchev texte ✓ - Forum Excel
- Recherchev ne renvoie pas la bonne valeur ✓ - Forum Excel
- Peut on récupérer un colis au centre de tri chronopost - Forum Mobile
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.
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.
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.
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.
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
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
>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
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