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
image

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 :

  1. l'ensemble des dates sont prise dans un autre onglet (input) avec la mise en page suivante
    image
  2. puis elle sont récupérés dans les colonnes A à M (aujourd'hui avec des formules par "lot de 3 lignes")
    image
  3. 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
  4. la plage M à Z et donc égale aux colonnes A à M
  5. la couler est fait par une mise en forme conditionnel

mes contraintes sont les suivantes :

  1. la mise en forme de l'onglet input ne peut pas être changé
  2. on veut une mise à en direct ou très minimaliste ... pas une mise à jour de l'ensemble de la feuille
  3. 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
)

);"")

@+

Avec un RECHERCHEX sur un exemple simplifié

image
=RECHERCHEX(
  CNUM(G$1);
  TEXTE($A3:$E3-JOURSEM($A3:$E3;2)+4;"AA")*100+NO.SEMAINE.ISO($A3:$E3);
  $A$2:$E$2;
  "";
  1)

en A2 ="" afin d'avoir une cellule vide avant le début

Stéphane

Rechercher des sujets similaires à "gantt qui plante ralenti fortement"