Feuil1:Feuil4!E6 n'a pas de sens.
[B][COLOR="DarkSlateGray"]=MOYENNE(Feuil1:Feuil4!E6)[/COLOR][/B]
Bonsoir à tousPas d'accord avec vous, job75.ROGER2327fonctionne parfaitement dès lors que la formule n'est pas inscrite dans l'une des quatre cellules concernées.Code:[B][COLOR="DarkSlateGray"]=MOYENNE(Feuil1:Feuil4!E6)[/COLOR][/B]
Ce qui coince ici est la partie Feuil1:Feuil4!E6<>0.
Sauf à laisser la cellule vide au lieu d'y mettre 0, je ne vois pas de solution évidente pour ce point.
#2536
=SOMME(Feuil1:Feuil4!E6)/((Feuil1!E6<>0)+(Feuil2!E6<>0)+(Feuil3!E6<>0)+(Feuil4!E6<>0))
Re,
Il y a cette solution, pas très élégante :
Code:=SOMME(Feuil1:Feuil4!E6)/((Feuil1!E6<>0)+(Feuil2!E6<>0)+(Feuil3!E6<>0)+(Feuil4!E6<>0))
Edit : bien sûr le résultat ne sera pas correct si des cellules contiennent du texte, il faudrait alors compliquer la formule.
Bonne nuit.
=SOMME(Feuil1:Feuil4!E6)/((Feuil1!E6>0)+(Feuil2!E6>0)+(Feuil3!E6>0)+(Feuil4!E6>0))
Ca me donne 2,75 au lieu de 3,666.
Re,
Je ne comprends pas, voir le fichier joint.
Rebonne nuit.
Je vais chercher une formule plus courte car je vais avoir toutes les semaines de l'année.
Function MOY(ref As Variant) As Double
Dim ws As Worksheet, v As Variant, s As Double, n As Integer
Application.Volatile
ref = ref.Address [COLOR="Red"]'l'argument doit être une référence[/COLOR]
For Each ws In Worksheets
If ws.Name <> "Moyenne" Then
v = ws.Range(ref)
If IsNumeric(v) And v <> 0 Then s = s + v: n = n + 1
End If
Next
MOY = s / n
End Function
Function MOY(plage As Variant, ref As Variant) As Double [COLOR="Red"]'le 1er argument pour forcer le recalcul[/COLOR]
Dim ws As Worksheet, v As Variant, s As Double, n As Integer
ref = ref.Address [COLOR="red"]'le 2ème argument doit être une référence[/COLOR]
For Each ws In Worksheets
If ws.Name <> "Moyenne" Then
v = ws.Range(ref)
If IsNumeric(v) And v <> 0 Then s = s + v: n = n + 1
End If
Next
MOY = s / n
End Function
=SOMME(Feuil1:Feuil4!E6)/SOMMEPROD(SIGNE(N(INDIRECT("Feuil"&LIGNE(1:4)&"!E6"))))