La seul possibilité qui me vient quand je vois ton tableau c'est de suivre l'algorithme suivant :
- Calculer la taille de ton tableau : NB(A:A)
- Calculer le nombre de possibilité de rangement (factorielle): Fact(NB(A:A))
- Faire une boucle qui teste toutes les possibilités
- Changer l'ordre des tâches**, la durée et la date butoir, lancer le recalcul de tes colonnes calculées durée cumulée, date de fin estimé et nombre de retard
- Dès que le nombre de retard est inférieur à celui enregistrer
- Alors enregistré la combinaison des tâches
- Finir par mettre la dernière combinaison enregistrée avec toutes les colonnes qui vont bien
** Pour changer l'ordre du dois faire une boucle imbriqué dans l'autre afin de mettre la ligne Ln à chaque position et mettre les autres lignes dans l'ordre (si tu mets ta L1 en L3 ta L2 vient en 1 ta L3 en 2 donc Li devient Li-1)
Tu te rend très vite compte que ton programme va tester "8.8417619937397E+30" possibilité pour ton petit tableau de 29 lignes. Ce qui est énormément long même si tu l'optimises dans un variable tableau afin de gagner en vitesse.
Je t'avoue que j'avais commencé à écrire le code mais j'ai pas eu la foie de continuer trop de boucle imbriqué et différentes. C'est un bordel sans nom qui dépasse ma patience mais pas impossible ;)
Bonne chance