Bonjour,
Quelques remarques avant de s'attaquer au fond du problème :
- L'enregistreur de macros est un bon moyen de "mettre le pied à l'étrier" sur VBA, mais le code produit est à retravaillé et souvent pas du tout optimisé
- En lien avec la remarque précédente, les .Select ou .Activate sont inutiles, il suffit de bien préciser sur quoi on travaille (voir code retravaillé plus bas)
- Il est inutile de réécrire ton scénario à chaque fois (il ne change pas), il suffit juste de relancer son exécution après avoir modifié la valeur cible (en clair, une macro avec juste SolverSolve suffit).
Voilà tes 2 premières macros modifiées :
Sub reinitializ()
Dim Cel As Range
For Each Cel In Sheets(1).Range("S2:S74") 'Boucle sur les cellules de cette plage
Cel = 0 'Implicitement, il s'agit de la propriété .Value (la valeur) --> Cel.Value = 0
Next Cel
End Sub
Sub Macrotstsolv()
' Utilisation du Solver
With Worksheets("sheet1") 'Tout ce qui commence par un "." se rattache à cette feuille
.Range("U5") = .Range("T1")
SolverOk SetCell:="$T$1", MaxMinVal:=2, ValueOf:=0, ByChange:="$S$2:$S$74", Engine:=3, EngineDesc:="Evolutionary"
SolverSolve
End With
End Sub
Concernant ton problème, il ne s'agit pas d'un soucis lié à VBA, car le Solveur ne trouve pas de solution non plus en lançant manuellement l'optimisation. La raison est simple : tu n'as pas mis la bonne cellule objectif. Cette cellule doit contenir une formule dont le résultat évolue en fonction des valeurs testées par le Solveur. Dans ton cas, c'est la cellule U7.