Le principe du Solveur est de tester plein de combinaisons qui répondent aux contraintes que tu lui impose. Le choix des meilleures combinaisons repose sur une fonction réponse, dont la valeur numérique évolue en fonction des combinaisons. Dans le cas présent, on lui indique que la valeur optimale recherchée consiste à minimiser le résultat de la formule.
Dans ton cas, la formule calcule d'une part l'écart, en valeur absolue (fonction ABS) entre la valeur cible (P4) et la somme des lignes retenues (SOMME.SI). D'autre part, on ajoute à cet écart la différence entre la date moyenne des lignes retenues (MOYENNE.SI) et la date minimale de ton jeu de données. Ainsi, le résultat de la fonction diminue lorsque les lignes retenues concernent les dates les plus anciennes.
Tu peux éventuellement affecter un coefficient à chacune des 2 composantes de la fonction réponse (proximité avec poids cible, et ancienneté des dates retenue) pour accentuer l'optimisation sur l'une ou l'autre.
Concernant la macro : j'ai ajouté la suppression du paramétrage précédent, et modifié la réécriture d'un nouveau scénario. Désormais, les plages indiquées dans le Solveur tiennent compte du nombre de lignes complétées dans ton fichier. La dernière ligne est déterminée ici sur la base de la colonne D.
Sous forme textuelle, cette instruction DerLig = Sheets(1).Range("D" & Rows.Count).End(xlUp).Row signifie : "on affecte à la variable DerLig le numéro de la première ligne non vide en colonne D, en remontant les lignes depuis la dernière du classeur." Tu peux mimer une partie de cette action en sélectionnant une cellule à la fin de ton classeur, et en appuyant simultanément sur CTRL + FLECHE HAUT.