Formule Excel ou VBA Rapidité dans le calcul

bibbip35

XLDnaute Occasionnel
Bonjour à tous

J'utilise actuellement un fichier avec plusieurs formules relativement longues
Combinaison de Recherche V et SI ERREUR
Exemple ci dessous:
=SI(ESTERREUR(RECHERCHEV(([@[NUMERO_OFDA]]&"-"&'Centre de Charge'!$A$2);Tableau_Lancer_la_requête_à_partir_de_excalibur315[[concaténer]:[CLOTURE]];10;FAUX));-1;SI((RECHERCHEV(([@[NUMERO_OFDA]]&"-"&'Centre de Charge'!$A$2);Tableau_Lancer_la_requête_à_partir_de_excalibur315[[concaténer]:[CLOTURE]];10;FAUX)=1);1;SI(RECHERCHEV(([@[NUMERO_OFDA]]&"-"&'Centre de Charge'!$A$2);Tableau_Lancer_la_requête_à_partir_de_excalibur315[[concaténer]:[CLOTURE]];10;FAUX)=0;((RECHERCHEV(([@[NUMERO_OFDA]]&"-"&'Centre de Charge'!$A$2);Tableau_Lancer_la_requête_à_partir_de_excalibur315[[concaténer]:[CLOTURE]];9;FAUX))/(RECHERCHEV(([@[NUMERO_OFDA]]&"-"&'Centre de Charge'!$A$2);Tableau_Lancer_la_requête_à_partir_de_excalibur315[[concaténer]:[CLOTURE]];8;FAUX)));)))

ET cela sur une dizaine de colonne sur un peu plus de 3500 lignes avec en Plus MFC complexes

Je ne vous cache pas que le fichier est très lent dans ces phases de calcul et de Mise à jour
Malgré une taille du fichier correct ( 3mo)

Je me posais donc la question , si le codage en VBA me permettrait il d'optimiser le calcul
Est-ce que le VBA est plus Rapide ?
Faut-il privilégier de longue Formules ou plusieurs petites Formules ?

Je cherche vraiment a Optimiser mon fichier , mais je ne sais pas vers quel méthode dois-je m'orienter ?

Avez-vous des idée ou suggestions ?

Merci à Tous pour votre Aide

BibBip
 

bibbip35

XLDnaute Occasionnel
Bonsoir à tous
Je me permets de remonter ce sujet , car j'ai un fichier Excel qui est très lourds lors de son actualisation
du je pense a beaucoup de formules et je ne sais pas si il ne faudrait pas que je passe
par du codage VBA …???

Votre Avis ?

Merci à tous

Bibbip35
 

eriiiic

XLDnaute Barbatruc
Bonjour,

quand on a de nombreuses formules il faut chercher à les optimiser dans un premier temps.
Dans celle-ci tu as 3 fois :
Code:
RECHERCHEV(([@[NUMERO_OFDA]]&"-"&'Centre de Charge'!$A$2);Tableau_Lancer_la_requête_à_partir_de_excalibur315[[concaténer]:[CLOTURE]];10;FAUX)
qui s'applique en plus à des matrices de 3500 lignes.
Ressort cette partie dans une colonne, elle ne sera calculée qu'une fois par ligne au lieu de 3.
En plus tu gagneras en lisibilité.
Et pour peu que ce soit présent dans d'autres colonnes, tu peux réutiliser le résultat. Ca sera encore du gain, gratuit celui-là.
Faire pareil si tu détectes d'autre éléments répétés dans plusieurs colonnes. Calculer x fois la même chose c'est du temps perdu, et les colonnes ne manquent pas.
Et pour tester une des cause supprime toutes tes MFC, c'est très gourmand ces choses là. Si ça devient supportable tu peux te contenter de remplacer les MFC par un code que tu lanceras à la demande ou sur un événement.
Après tout ça il sera temps que tu réfléchisses si tu veux tenter de voir ce que ça donne en vba.

pour revenir à ta formule, sa forme est :
Code:
=SI(ESTERREUR(a);-1;SI((a=1);1;SI(a=0;((b)/(c));)))
Déjà on voit qu'il manque un cas, qui n'arrive sans doute jamais mais bon...
En conclusion j'ai bien l'impression que tu peux l'écrire sous cette forme :
Code:
=sierreur(si(a=1;1;(b)/(c));-1)
Si a n'est pas égal à 1, il est alors =0 ou en erreur. Pas la peine de retester x fois
Là aussi plus qu'un seul Recherchev() au lieu des 3.
eric
 

Discussions similaires


Haut Bas