Je penserai bien à quelque chose comme ceci, mais malheureusement la syntaxe est fausse :
.Range("B2") = Application.WorksheetFunction.Max(Range(s.Cells(2, 1), s.Cells(dl, 1))) = " =MAX(Variations!A2:A10)"
Il faut distinguer 2 propriétés d'une cellule :
Range("B2")
correspond implicitement à Range("B2").Value
, ce qui désigne la valeur stockée dans la cellule. Avec la syntaxe initialement proposée, on écrit juste le résultat de la fonction en dur dans la cellule (ce qui économise les ressources), mais le résultat ne s'actualise pas si les valeurs de la plage sur laquelle se base la formule changent.
Autre possibilité : écrire une formule Excel, tel qu'on le fait habituellement dans la barre de formule. Dans ce cas, on écrit dans la propriété Range("B2").Formula
(ou .FormulaR1C1
ou .FormulaLocal
, chacune ayant des spécificités propres). A tester :
Range("B2").Formula = "=MAX(Variations!A2:A10)"
A noter, c'est soit l'une soit l'autre, mais pas les 2 écritures simultanément.
Personnellement, je ne vois pour l'instant pas du tout l'intérêt de VBA dans l'histoire, puisqu'on écrit une formule que l'on pourrait très facilement faire directement dans Excel.