Performance et temps de calcul de la fonction Decaler vs Index equiv

Signaler
-
Messages postés
23997
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
13 avril 2021
-
Bonjour à tous

Je suis actuellement en cours de travail sur des gros tableaux de recherche de données.
Je me suis naturellement tourné vers la fonction index equiv permettant de trouver une seule donnée parmi une centaine de colonne et de même pour les lignes(lignes qui correspondent aux jours de l'année).
Je duplique cette formule 7 fois pour obtenir un échantillon Hebdomadaire.
( Je fais ce process un sacre paquet de fois sur ce meme tableaux, et ai quelques soucis de lenteur...)

Je peux obtenir le même résultat en utilisant decaler permettant via une formule matricielle pour faire le process une seule fois sur 7 cases, je n'ai pas essayé cette dernière solution pour vérifier une amélioration (ou non)

J'ai essayé de me documenter sur la performance des calculs et ai trouvé que la fonction Decaler est volatile....

Pensez vous que dans ce cas précis, index equiv reste tout de même une option préférable en terme de performance de calcul ?

Merci d'avance pour vos éclairages et pour votre temps précieux...

Configuration: Android / Chrome 89.0.4389.105

4 réponses

Messages postés
23997
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
13 avril 2021
6 725
Bonjour,

oui, decaler() est volatile, mais si tu ne fais pas d'autres calculs dans ton classeur, pas dit que tu y perdes. Le fait que tu la mettes matricielle risque d'être pénalisant par contre, parfois fortement.
Difficile de répondre sans mesurer.
Une façon d’alléger est de ressortir dans une colonne intermédiaires les éléments calculés utilisés plusieurs fois. Par exemple si un même equiv() est réutilisé, ressors-le. Il sera évalué une seule fois au lieu de 7 ou plus.
Si tu veux qu'on regarde il faut déposer un fichier anonymisé réduit.
eric

En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Bonjour Eric,
Merci beaucoup pour cette réponse,
J'essayerai de déposer un exemple en debut de semaine prochaine quand j'aurais accès au dit fichier, en faisant les quelques modifications pour l'anonymiser.

En attendant : le fait de passer par un nom qui contient le "tableau" et la formule decaler fait il gagner en temps?
Dans ce cas est ce qu'utiliser index pour renvoyer chaque valeur plutôt que la formule matricielle est il plus efficace ?

Encore merci !
Messages postés
23997
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
13 avril 2021
6 725
Bonjour,

utiliser un nom éclairci la formule mais ne fait rien gagner (et rien perdre)
Pour le reste sans fichier...
eric
Bonjour,

Tardivement mais voici le fichier anonymisé !

https://www.cjoint.com/c/KDmj0XOhWO4

=> L'onglet DATA est ma requête de données
=> dans l'onglet résultat je viens récupérer mes datas selon la date choisie dans la case jaune.
=> Les colonnes C et D représente les deux méthodes possible (index eqvui et décaler en matriciel)

j'ai fais l'exemple pour une seule colonne récupérée mais je récupère bien plus de colonnes dans le fichier,
Finalement le fichier contient pas mal d'autre calcul et d'après tes réponses précédentes j'imagine que le plus optimal est de rester en index equiv...

merci beaucoup !
Messages postés
23997
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
13 avril 2021
6 725
Bonjour,

Franchement, ça se vaut.
Pour 500 colonnes ça met environ 5.5 s.
L'écart max est de quelques 1/10 s. Même en ressortant des calculs (il n'y en a pas de vraiment pénalisants), dans le 1er cas ça fait même perdre.

Je te met quand même ma feuille si tu as d'autres idées à tester. Tu as une macro de chronométrage dans module1.

Il faudrait voir en vba.
Mais sur 8 colonnes simultanées (autant que tu as de threads en fait)
Les formules sur feuille utilisent tous les trheads, vba un seul. Ce qui peut amener une perte plutôt qu'un gain que tu aurais observé sur une seule.
https://www.cjoint.com/c/KDnfifZxd2D
eric