Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 RECHERCHEV/INDEX - Optimiser le temps de traitement pour la recherche dans un tableau à liste ?

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

loic.zambon

XLDnaute Nouveau
Bonjour,

J’essaie d'optimiser la formule INDEX que j'utilise pour éviter le temps de traitement.

Je vous pose la base de mon fichier Excel sur lequel je travaille

J'ai un onglet contenant un tableau. Ce tableau possède plusieurs colonne :
- Les plateformes sur lesquels travaillent les techniciens
- Les éléments de ces plateformes
- Les fonctions de chaque élément
- Urgence d’intervention requise

Dans un autre onglet j'ai un tableau avec les mêmes colonne. Le technicien qui intervient sur un élément ira remplir ce tableau via des listes déroulantes (fonction dépendant d'élément, lui-même dépendant de plateforme).

Je cherche à afficher automatiquement le niveau d'urgence lorsque le technicien a rempli les 3 listes.
Je cherche une solution via des forumes Excel car le document est utilisé sur la version Web via Teams donc le VB n'est pas supporté.
J'ai trouvé 2 moyens de parvenir à ce que je cherchais.


RECHERCHEV
J'ai ajouté une colonne à mon tableau avec toutes les colonnes désirée concaténées.
Je recherche la concaténation des listes remplis par le technicien dans le tableau pour sortir mon urgence.

Ca fonctionne bien et c'est plutôt rapide.
Par contre ça me force à créer cette colonne supplémentaire qui n'est pas désirée

INDEX
Avec l'aide d'EQUIV je cherche la concaténation des listes remplis par le technicien dans la concaténation du tableau.
Je ne maitrise que très peu ces 2 formules, c'est peut-être ça qui fait que ce n'est pas optimisé

Ca fonctionne bien.
Par contre chaque fois qu'un technicien touche à un des champs de la liste il faut du temps pour le traitement. Avec 1 ou 2 lignes c'est acceptable, mais nous avons généralement plus de 1000 intervention et ça devient désagréable à utiliser dans que j'arrive au 10 lignes.


Dans le fichier que j'ai joint à ce post vous trouverez un exemple miniature.
A gauche :
- le tableau qui représente les informations exhaustives (colonnes principales, degré d'urgence et concaténation pour RECHERCHEV)

A droite :
- Mon tableau à liste avec la formule INDEX
- Mon tableau à liste avec la formule RECHERCHEV

Les listes sont créées via les petits tableaux au sommet de la page.


La question ?

Est-ce qu'il y a un moyen d'optimiser ma formule INDEX pour ne pas arriver à plusieurs 10aine de secondes de traitement à chaque modification d'un champ analysé ?

Si ce n'est pas possible je ferais avec le RECHERCHEV en masquant la colonne.


D'avance merci.

Bonne journée,
Cordialement,
Loïc
 

Pièces jointes

Solution
Bonjour
Essayer
VB:
=SOMMEPROD((Tab_matrice[Plateforme]=Tableau2[@Plateforme])*(Tab_matrice[Element]=Tableau2[@Element])*(Tab_matrice[Fonction]=Tableau2[@Fonction]);Tab_matrice[Urgent])

Sous réserve de pas pas avoir de doublons ayant des urgences différentes (ce qui est aussi vrai pour les autres solutions)

Utiliser un format n'affichant pas les 0 (pour les cas absents)
Bonjour à tous,
Si vous avez la possibilité d'ajouter une colonne concatène avec (Plateform & Elément & Fonction) alors cela peut grandement améliorer la vitesse d’exécution.
Un essai en PJ
 

Pièces jointes

Bonjour à vous deux.

Merci pour la rapidité de la réponse.

@goube
Ce n'est pas ce que je cherchais à l'origine. Vu que les techniciens doivent entrer les infos sur ce qu'ils ont du dépanner et il y a plein d'autre champs qui ne sont pas utilisé pour les formules, comme la date ou la description du problème.

Par contre c'est hyper pratique pour la recherche. Je vais garder ça et le mettre en place quand j'aurais terminer mon document.

@sylvanu
Votre formule INDEX est bien moins compliquée que celle que j'utilise moi, par contre comme vous le mentionnez elle nécessite une nouvelle colonne comme la solution que j'avais trouvé avec RECHERCHEV.

J'ai appliqué votre formule à mon fichier car je peux effectivement ajouter une colonne


Mais est-ce qu'il n'y aurait pas une solution sans ajout de colonne qui ne soit pas aussi lourde que ma propre solution avec INDEX ?


Merci et bonne journée,
 
Re,
Ce n'est pas la fonction Index qui est pénalisante en temps, mais la formule matricielle, puissante mais lente.
D'où l'idée de pré digérer le calcul, ce qui évite la formule matricielle.
 
Bonjour
Essayer
VB:
=SOMMEPROD((Tab_matrice[Plateforme]=Tableau2[@Plateforme])*(Tab_matrice[Element]=Tableau2[@Element])*(Tab_matrice[Fonction]=Tableau2[@Fonction]);Tab_matrice[Urgent])

Sous réserve de pas pas avoir de doublons ayant des urgences différentes (ce qui est aussi vrai pour les autres solutions)

Utiliser un format n'affichant pas les 0 (pour les cas absents)
 
Dernière édition:
Il existe une toute autre piste: la solution query.

elle ressemble a la solution recherchev ... mais permet de retourner plusieurs info pour une question...
De plus elle ne penalise pas l'utilisateur si on recherche plusieurs reponces par ligne...

Et enfin, si on ne presente pas le tableau resultat a l'ecran, mais directement en TCD c'est infiniment plus rapide...
 

Pièces jointes

@chris
La solution que vous m'avez proposé fonctionne pour sortir de manière automatique les urgences.
Dans le fichier fonctionnel que j'utilise il y a une colonne supplémentaire avec des infos précises qui sont forcément unique. Donc j'obtiens bien le résultat attendu.

Par contre une fois que j'ai beaucoup de données entrée il y a de gros moment de latence pour chaque action que j'effectue sur le fichier.

@merinos
Il faut que je regarde votre solution. Je n'ai jamais utilisé Power Query.
 
Bonjour

Une autre possibilité en pièce jointe dans E14. Cf. les noms plageplateforme, plageelement et plagefonction dans le gestionnaire de noms.

Cette méthode ne donnera les bons résultats que si les données sont classées comme dans ton exemple.

Je ne sais par contre absolument pas si cela fonctionnera plus rapidement avec ces noms.

@ plus
 

Pièces jointes

Dernière édition:
Une derniere solution:
employer recherchev(quoi, ou, colonne, VRAI).
c'est solidement plus rapide.

Si toutes les recherches ne trouvent pas de reponces, il fau mettre:

= si(recherchev(quo;,ou ; 1 ; VRAI)=quoi ; recherchev(quoi; ou; colonne; vrai) ; FAUX )

cela fonctionne aussi, mais ce ne sera pas aussi net qu'un query.

Merinos
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
17
Affichages
411
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…