Performance et temps de calcul de la fonction Decaler vs Index equiv
Fermé
Barlouu
-
Modifié le 31 mars 2021 à 22:48
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 - 13 avril 2021 à 07:16
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 - 13 avril 2021 à 07:16
A voir également:
- Excel decaler equiv
- Liste déroulante excel - Guide
- Décaler colonne excel - Guide
- Si et excel - Guide
- Aller à la ligne excel - Guide
- Word et excel gratuit - Guide
4 réponses
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 239
Modifié le 1 avril 2021 à 00:16
Modifié le 1 avril 2021 à 00:16
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
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
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 239
1 avril 2021 à 11:40
1 avril 2021 à 11:40
Bonjour,
utiliser un nom éclairci la formule mais ne fait rien gagner (et rien perdre)
Pour le reste sans fichier...
eric
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 !
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 !
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 239
13 avril 2021 à 07:16
13 avril 2021 à 07:16
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
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
1 avril 2021 à 08:13
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 !