Gantt Excel qui plante ou ralenti fortement Excel
Bonjour,
j'ai 3 GANTTs imbriqués comme illustré ci-dessous
- GANTT 1 = date cible de livraison
- GANTT 2 = date projetée de livraison
- GANTT 3 = date réel
dans chacune des cases du gantt j'ai la formule suivant (il est donc répétée 314343 fois aujourd'hui)
=SIERREUR( LET(
nLancement;SUBSTITUE($E3;"* ";"");
nCdC;SUBSTITUE($F3;"* ";"");
nCslt;SUBSTITUE($G3;"* ";"");
nCFrns;SUBSTITUE($H3;"* ";"");
nEtd;SUBSTITUE($I3;"* ";"");
nFab;SUBSTITUE($J3;"* ";"");
nLvbDoc;SUBSTITUE($K3;"* ";"");
nEssai;SUBSTITUE($L3;"* ";"");
nLvC;SUBSTITUE($M3;"* ";"");
SI.CONDITIONS(
ET(CNUM(SI(NO.SEMAINE.ISO(nLancement)<10;DROITE(ANNEE(nLancement);2)&"0"&NO.SEMAINE.ISO(nLancement);DROITE(ANNEE(nLancement);2)&NO.SEMAINE.ISO(nLancement)))<=CNUM(AA$1);CNUM(SI(NO.SEMAINE.ISO(nCdC)<10;DROITE(ANNEE(nCdC);2)&"0"&NO.SEMAINE.ISO(nCdC);DROITE(ANNEE(nCdC);2)&NO.SEMAINE.ISO(nCdC)))>=CNUM(AA$1));$F$2;
ET(CNUM(SI(NO.SEMAINE.ISO(nCdC)<10;DROITE(ANNEE(nCdC);2)&"0"&NO.SEMAINE.ISO(nCdC);DROITE(ANNEE(nCdC);2)&NO.SEMAINE.ISO(nCdC)))<=CNUM(AA$1);CNUM(SI(NO.SEMAINE.ISO(nCslt)<10;DROITE(ANNEE(nCslt);2)&"0"&NO.SEMAINE.ISO(nCslt);DROITE(ANNEE(nCslt);2)&NO.SEMAINE.ISO(nCslt)))>=CNUM(AA$1));$G$2;
ET(CNUM(SI(NO.SEMAINE.ISO(nCslt)<10;DROITE(ANNEE(nCslt);2)&"0"&NO.SEMAINE.ISO(nCslt);DROITE(ANNEE(nCslt);2)&NO.SEMAINE.ISO(nCslt)))<=CNUM(AA$1);CNUM(SI(NO.SEMAINE.ISO(nCFrns)<10;DROITE(ANNEE(nCFrns);2)&"0"&NO.SEMAINE.ISO(nCFrns);DROITE(ANNEE(nCFrns);2)&NO.SEMAINE.ISO(nCFrns)))>=CNUM(AA$1));$H$2;
ET(CNUM(SI(NO.SEMAINE.ISO(nCFrns)<10;DROITE(ANNEE(nCFrns);2)&"0"&NO.SEMAINE.ISO(nCFrns);DROITE(ANNEE(nCFrns);2)&NO.SEMAINE.ISO(nCFrns)))<=CNUM(AA$1);CNUM(SI(NO.SEMAINE.ISO(nEtd)<10;DROITE(ANNEE(nEtd);2)&"0"&NO.SEMAINE.ISO(nEtd);DROITE(ANNEE(nEtd);2)&NO.SEMAINE.ISO(nEtd)))>=CNUM(AA$1));$I$2;
ET(CNUM(SI(NO.SEMAINE.ISO(nEtd)<10;DROITE(ANNEE(nEtd);2)&"0"&NO.SEMAINE.ISO(nEtd);DROITE(ANNEE(nEtd);2)&NO.SEMAINE.ISO(nEtd)))<=CNUM(AA$1);CNUM(SI(NO.SEMAINE.ISO(nFab)<10;DROITE(ANNEE(nFab);2)&"0"&NO.SEMAINE.ISO(nFab);DROITE(ANNEE(nFab);2)&NO.SEMAINE.ISO(nFab)))>=CNUM(AA$1));$J$2;
ET(CNUM(SI(NO.SEMAINE.ISO(nFab)<10;DROITE(ANNEE(nFab);2)&"0"&NO.SEMAINE.ISO(nFab);DROITE(ANNEE(nFab);2)&NO.SEMAINE.ISO(nFab)))<=CNUM(AA$1);CNUM(SI(NO.SEMAINE.ISO(nLvbDoc)<10;DROITE(ANNEE(nLvbDoc);2)&"0"&NO.SEMAINE.ISO(nLvbDoc);DROITE(ANNEE(nLvbDoc);2)&NO.SEMAINE.ISO(nLvbDoc)))>=CNUM(AA$1));$K$2;
ET(CNUM(SI(NO.SEMAINE.ISO(nLvbDoc)<10;DROITE(ANNEE(nLvbDoc);2)&"0"&NO.SEMAINE.ISO(nLvbDoc);DROITE(ANNEE(nLvbDoc);2)&NO.SEMAINE.ISO(nLvbDoc)))<=CNUM(AA$1);CNUM(SI(NO.SEMAINE.ISO(nEssai)<10;DROITE(ANNEE(nEssai);2)&"0"&NO.SEMAINE.ISO(nEssai);DROITE(ANNEE(nEssai);2)&NO.SEMAINE.ISO(nEssai)))>=CNUM(AA$1));$L$2;
ET(CNUM(SI(NO.SEMAINE.ISO(nEssai)<10;DROITE(ANNEE(nEssai);2)&"0"&NO.SEMAINE.ISO(nEssai);DROITE(ANNEE(nEssai);2)&NO.SEMAINE.ISO(nEssai)))<=CNUM(AA$1);CNUM(SI(NO.SEMAINE.ISO(nLvC)<10;DROITE(ANNEE(nLvC);2)&"0"&NO.SEMAINE.ISO(nLvC);DROITE(ANNEE(nLvC);2)&NO.SEMAINE.ISO(nLvC)))>=CNUM(AA$1));$M$2));"")ceci fait que le fichier met beaucoup de temps à ouvrir et plante au moins une fois par jour
il y a d'autres formules de présent mais :
- elles sont déjà réduits au max et optimisés aussi
- elles n'impactant pas l'utilisation du fichier
Le fonctionnement exact est comme suit :
- l'ensemble des dates sont prise dans un autre onglet (input) avec la mise en page suivante
- puis elle sont récupérés dans les colonnes A à M (aujourd'hui avec des formules par "lot de 3 lignes")
- la plage M à GC est une table (car elle est réutilisé dans un powerquery) donc les formules doivent être identique sur l'ensemble de chacune des colonne pour éviter qu'Excel s'y perds
- la plage M à Z et donc égale aux colonnes A à M
- la couler est fait par une mise en forme conditionnel
mes contraintes sont les suivantes :
- la mise en forme de l'onglet input ne peut pas être changé
- on veut une mise à en direct ou très minimaliste ... pas une mise à jour de l'ensemble de la feuille
- les cases du gantt doivent reprendre le trigram et la couleur
autres pistes/infos :
- le fichier est aujourd'hui au format .XLSM (.xlsb était pire)
- je ne suis pas fermé à faire une liaison avec MS project ... si ceci est possible je serait fortement intéressé !
Bonjour
votre formule avec DROITE+ANNEE et NO.SEMAINE.ISO renverra 2501 du 01/01/25 au 05/01/25 mais également du 29/12/25 au 31/12/25 ce qui est gênant me semble t-il
Il faut définir l'année en se basant sur le jeudi de la semaine par exemple =TEXTE(date-JOURSEM(date;2)+4;"AA")
ensuite la fonction =TEXTE(NO.SEMAINE.ISO(date);"00") évite le SI(n° semaine < 10; "0"&n°semaine; n° semaine)
Autre remarque, du fait de vos $E3, $F3,... toutes les formules d'une même ligne font les mêmes calculs.
je rajouterai donc des colonnes intermédiaires pour déterminer la clé AASS (année sur 2 caractères + semaine sur 2 caractères)
CNUM(TEXTE(date-JOURSEM(date;2)+4;"AA")&TEXTE(NO.SEMAINE.ISO(date);"00"))
de même toutes les formules d'une même colonne font le calcul =CNUM(AA$1) qui serait possible de ne faire qu'une seule fois
je complète mon message en indiquant qu'un fichier exemple avec quelques lignes anonymisées serait utile
EDIT
la clé AASS peut se simplifier en TEXTE(date-JOURSEM(date;2)+4;"AA")*100+NO.SEMAINE.ISO(date)
Stéphane
Hey,
Pour éviter de répéter le SI(NO.SEMAINE.ISO ainsi que la fonction SUBSTITUE... fait une fonction que tu appelles en fonction de chaque paramètre plutôt. En lisibilité ce sera mieux.
=SIERREUR(LET(
clean;LAMBDA(x;SUBSTITUE(x;"* ";""));
numSem;LAMBDA(d;CNUM(DROITE(ANNEE(d);2)&TEXTE(NO.SEMAINE.ISO(d);"00")));
nLancement;numSem(clean($E3));
nCdC;numSem(clean($F3));
nCslt;numSem(clean($G3));
nCFrns;numSem(clean($H3));
nEtd;numSem(clean($I3));
nFab;numSem(clean($J3));
nLvbDoc;numSem(clean($K3));
nEssai;numSem(clean($L3));
nLvC;numSem(clean($M3));
ref;CNUM(AA$1);
SI.CONDITIONS(
ET(nLancement<=ref;nCdC>=ref);$F$2;
ET(nCdC<=ref;nCslt>=ref);$G$2;
ET(nCslt<=ref;nCFrns>=ref);$H$2;
ET(nCFrns<=ref;nEtd>=ref);$I$2;
ET(nEtd<=ref;nFab>=ref);$J$2;
ET(nFab<=ref;nLvbDoc>=ref);$K$2;
ET(nLvbDoc<=ref;nEssai>=ref);$L$2;
ET(nEssai<=ref;nLvC>=ref);$M$2
)
);"")@+
