That works and it surprises me, Aladin

I just changed my test sheet to =(SUMPRODUCT((MONTH('F02-Silage-Milkers'!$G$12:$G$206)=$M12)*(YEAR('F02-Silage-Milkers'!$G$12:$G$206)=$J12),('F02-Silage-Milkers'!$S$12:$S$206))/1000) and it removed the #Value when I had deliberately put text into S12:S206 range

SumProduct, just like Sum, ignores text in the sum range, if its native syntax is followed. That is:

[0] SumProduct(Term, Term, Term, ...)

[1] SumProduct(SumTerm, CoditionalTerm, ConditionalTerm, ...)

[2] SumProduct(SumTerm, CoditionalTerm*ConditionalTerm* ...)

[3] SumProduct(SumTerm*CoditionalTerm*ConditionalTerm* ...)

The OP uses [3] which is the most at variance with [0].

Note that the conditional terms in [1] requires coercion like --(ConditionalTerm) or (ConditionalTerm)+0. Note also that there is notothing to be gained with [3] (or even [2]), 0+(ConditionalTerm), (ConditionalTerm)*1, etc.