Remplacer INDIRECT

Bonjour,

On dit, qu'indirect est lent et je le constate dans mon chiffrier.

J'ai lu des méthodes pour remplacer INDIRECT avec INDEX et MATCH mais je n'y arrive pas.

Voici, j'ai un onglet avec l'information "Données" et un autre onglet "SAC" qui traite les données.

Comme l'information dans "Données" ne débute pas et ne termine pas toujours à la même ligne, mais est situé dans la même colonne, je fais une recherche sur une étiquette dans la colonne afin de déterminer début et fin (il en va ainsi pour d'autres calculs semblable sur les informations dans "Données", lignes 1 à 10'000, etc. et le calcul est lent) :

Début de l'information=(EQUIV("agent",Données!$B$1:$B$200,0)) , le résultat est dans l'onglet "SAC" en A2

Fin de l'Information ==(EQUIV("type",Données!$B$1:$B$200,0)) , le résultat est dans l'onglet "SAC" en A3

J'utilise cette formule qui fonctionne bien dans l'onglet "SAC" et utilise les valeurs en A2 et A3 comme numéro de ligne dans le calcul des données pour colonne B et E dans le cas ci-présent:

SOMME.SI((INDIRECT("données!b"&$A$2)):(INDIRECT("données!b"&$A$3)),"=sac*",(INDIRECT("données!e"&$A$2)):(INDIRECT("données!e"&$A$3)))

Comment puis-je remplacer INDIRECT ?

Merci

Bonjour,

Pourrais-tu joindre un fichier illustratif ... ?

Bonsoir,

vous pouvez également simplifier votre formule :

=SOMME.SI((INDIRECT("données!b"&$A$2&":b"&$A$3));"=sac*";(INDIRECT("données!e"&$A$2&":e"&$A$3)))

Ca fait 2 INDIRECT de moins

@ bientôt

LouReeD

Bonjour,

Est-ce-que pour un vrai Hussard .... Simplifier ... est équivalent à .. ... Remplacer ...???

Merci LouReed, est-ce vraiment un indirect de moins ou une façon plus simple d'écrire l'expression ?


James007, d'accord je fais un fichier simple et l'envoie en exemple, merci.

Le but est d'accélérer le traitement, INDIRECT est une fonction volatile dit-on.

Re,

Merci pour ta réponse ...

Je garde à l'esprit que, dans ton vrai fichier, tu travailles avec plus de 10'000 lignes ... car il s'agit d'une contrainte qui a son importance sur la performance de calcul ...

Bonsoir,

un essai avec la fonction DECALER avec comme "obligation" que les cellule données!$B$1 et données!$E$1 soient des cellule d'entête de colonne... Sinon il faudra remplacer le "-1" par 0...

=SOMME.SI(DECALER(données!$B$1;$A$2-1;;$A$3-$A$2+1);"=sac*";DECALER(données!$E$1;$A$2-1;;$A$3-$A$2+1;))

Reste à savoir si DECALER et plus "léger" que INDIRECT...

@ bientôt

LouReeD

Bonjour,

Pour 10'00 lignes et plus .... probablement qu'une UDF va s'imposer ...

Bonjour,

UDF ?

pardonnez moi mon ignorance....

@ bientôt

LouReeD

Bonjour le fil

@LouReed

UDF => User Defined Function (In Shakespeare Language)

Dans la langue de Molière "Fonction Définie par l'Utilisateur"

@James007

10.000 => UDF + Tableau

Ha ! OK... je connais un peu alors...

Sauf le coté "volatil" qu'on aperçois quelque fois dans ce genre de fonction personnel....

@ bientôt

LouReeD

(..)

Volatile, c'est (à mon avis très dangereux) à utiliser... il arrive qu'avec plusieurs Classeurs ouverts en même temps Excel donne la priorité aux fonctions "volatiles" et donc utilise des ressources qui ne sont pas normalement affectées au classeur en cours et donc ralentit considérablement

Quant à son utilité, elle permet de rendre la fonction "recalculée" à chaque "calcul automatique" ou demandé (par F9)

@ NCC

@James007

10'000 => UDF + Tableau

Effectivement ... c'est bien ce que je pressens pour Hussard .... UDF & Array ...

(..)

Yes, but we are still waiting for an example ! so long... for an exemple to come into my life

(Foreigner 4)

Il est clair qu'il faut que je me mette en tête qu'un tableau énorme en VBA sera toujours plus rapide qu'un petit avec accès incessant sur la feuille...

Comme dit un autre jour, pour mon travail, je suis passé de 1h20 de procédure à 20 secondes, en transférant "la feuille" dans un tableau VBA et après en réinjectant le résultat dans la feuille...

@ bientôt (les 3000 !)

LouReeD

Bonjour le fil

Bougies LouReed

Bonjour,

vous devriez avoir un message sous peu... Hôtel, cela vous dit quelque chose ?

Mon projet avance, mais il est vrai que je "galère", manque d'expérience et de connaissances, et je n'ai pas une vision d'ensemble du programme... Mais il avance tout de même..

@ bientôt

LouReeD

Bonjour

merci LouRead, je vais essayer avec DECALER

James007, effectivement il peut y avoir plus de 10000 lignes.

Voici le fichier réduit pour l'exemple, les INDIRECT sont dans la zone bleu.

Hussard

23uby-vtest.xlsm (272.91 Ko)

Bonjour Hussard, LouReed, James

Je viens de regarder ton fichier. A mon avis en plus de INDIRECT qui certes est relativement lent, il y aussi les formules matricielles qui elles sont très lentes

Je pense qu'il faut passer par une fonction personnalisée...

Cependant j'aurais besoin que tu expliques comment est utilisé ton tableau

Mode de saisie, fréquence de saisie...

Pour savoir comment élaborer la solution : Bouton ou Fonction Volatile

Hello LouReid,

L'onglet donné est tout simplement importé d'un fichier CSV avec une MACRO, puis les calculs se font.

Sauf que j'importe avec Calcul en "Manuel", ensuite je mets sur Calcul "Automatique", et la j'attends le temps qu'il faut

J'ai lu beaucoup suggestion de remplacement d’INDIRECT par EQUIV et INDEX ensemble, mais je n'y arrive pas.

Hussard

Rechercher des sujets similaires à "remplacer indirect"