Effectivement Roland, tu as raison dans ce cas (à vrai dire je n'avais même pas regardé ce que faisait la fonction de Droopy), cette fonction doit se calculer à chaque changement d'un de ses paramètres.
Typiquement on ajoute Application.Volatile lorsqu'une fonction renvoie une valeur qui doit s'actualiser sans que ses paramètres changent, comme celle-ci par exemple (évidemment ici j'aurais pu prendre Alea() mais c'est pour l'exemple) :
Function Allea(Limite As Long) As Long
Application.Volatile
Randomize
Allea = Int(Rnd * Limite)
End Function
Volatile ou non ? Ca dépend : si je suis en train de faire des tests sur un tableau et que je veux me constituer un jeu de valeurs d'essai, je m'arrangerai pour que ces valeurs changent toutes seules, dès que j'appuie sur F9 par exemple, donc j'ajouterai Volatile.
Si je veux "figer" cette valeur aléatoire, je ne mettrai pas Volatile.
Pour Droopy, voici une façon d'améliorer un peu sa fonction
Function SommeCharge(SCompare As String, DDateDeb As Date, DDateFin As Date) As Long
Dim Cel As Range
Set Cel = Worksheets("CCP Commun").[C15]
Do While Cel <> ""
With Cel
If .Offset(0, 4) = SCompare Then
If .Offset(0, -2) >= DDateDeb And .Offset(0, -2) <= DDateFin Then
SommeCharge = SommeCharge + .Offset(0, 3)
End If
End If
End With
Set Cel = Cel.Offset(1, 0)
Loop
End Function