Comment augmenter la durée de traitement de la fonction RECHERCHEV ?

Bonjour à tous,

J'utilise régulièrement Excel avec des fonctions RECHERCHEV dans tous les sens.

Il s'agit en fait d'un tableau de 60.000 lignes qui fait références à d'autres tableaux de 30.000 lignes pour effectuer ma facturation.

Comme vous pouvez l'imaginer, ca peut parfois prendre du temps et il n'est pas rare que j'aille prendre une pause de 20mn une fois avoir appuyé sur le bouton "calculer".

Bref, je cherche une méthode me permettant d'optimiser cette fonction ou découvrir une autre fonction équivalent qui me permettrait de gagner du temps.

Des idées ?!

A+

Nicolas

Bonjour,

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()).

En outre, RechvM() fonctionne également lorsque la chaîne cherchée est >255 caractères.

http://boisgontierjacques.free.fr/pages_site/recherchev.htm#FonctionRechVM

Rappel

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")

Dans l'exemple ci dessous, la table de recherche a 200.000 lignes et 100.000 formules de recherche. Si la table n'est pas triée, le temps de tri de la table est de 1 seconde.

http://boisgontierjacques.free.fr/fichiers/Divers/RechercheVSurTableTriee.zip

Ceuzin

Bjr Nicolas,

Ajoute une colonne et utilise la fonction EQUIV > donnera la ligne où se trouve la "clé"

Appuie toi ensuite sur ce résultat pour aller chercher les infos avec INDEX

Bonjour

Passe aux macros !

Expose ton probleme, joins ton fichier avec un exemple de résultat attendu et on te proposera sûrement quelque chose.

Bye !

Bonjour

Passe aux macros !

Expose ton probleme, joins ton fichier avec un exemple de résultat attendu et on te proposera sûrement quelque chose.

Bye !

Bjr ceuzin & gmb

Avec un tri quicksort si nécessaire et une dichotomie cela peut être en effet extrêmement rapide !

Bonjour à tous

Avec un tri quicksort si nécessaire et une dichotomie

Là, tu m'intéresses, je ne connais pas ça !

J'espère que Nico fournira un fichier et que tu puisses proposer une telle solution !

Bye !

je n'ai rien en stock, mais je vais m'y mettre ce soir avant le fichier mystère

@steelson : Merci d'avance !

C'est pas gagné de mon côté

Voici une première approche d'une fonction dichotomie, pour le moment juste greffée sur des "ranges"

Function dichotomie(valeurcherchee As Variant) As Double
' donne la ligne de la valeur recherchée (0 si pas trouvé)
Dim ws As Worksheet
Dim deb, fin, milieu As Double
Dim valeurcourante As Variant
Application.Volatile

    dichotomie = 0
    deb = 2
    fin = ws.Range("A1").End(xlDown).Row
    Set ws = Sheets("data")
    While deb <> fin - 1
        milieu = Int((deb + fin) / 2)
        valeurcourante = ws.Range("A" & milieu)
        If valeurcourante = valeurcherchee Then
            dichotomie = milieu
            Exit Function
        Else
            If valeurcourante > valeurcherchee Then
                fin = milieu
            Else
                deb = milieu
            End If
        End If
    Wend

End Function

j'ai un quicksort par ailleurs !

et bien sûr, comme le suggère ceuzin, ceci n'aurait d'intérêt que si la base ne peut pas être triée sinon excel fait sans doute déjà de la recherche par dichotomie

mais il faudrait que j'importe dans un tableau les valeurs et les trier avant d'appliquer ce code

@Steelson : Merci !

Si la table est triée

  • Table avec 200.000 lignes
  • 100.000 formules Recherchev()

Le temps de calcul est immédiat.

http://boisgontierjacques.free.fr/fichiers/Divers/RechercheVSurTableTriee.zip

Ceuzin

Rechercher des sujets similaires à "comment augmenter duree traitement fonction recherchev"