Nathou,
je ne connais évidemment pas ton fichier..
...mais soit, intègre dans les arguments de la fonction les noms de feuilles à éviter, soit fixe les index de feuilles à consulter.
Dans l'exemple ci-joint, je fais comme si tu choisissais cette seconde solution.
Ce qui est mis sous commentaire est inutile... normalement!
Pense aussi à indenter ton code : tu retrouveras beaucoup plus facilement les blocs logiques. (IF - ENDIF, FOR - NEXT, ...).
Function SommeSiColonnes(iIdx1%, iIdx2%, sColC$, Critere$, sColV$) As Double
'
Dim ws As Worksheet, somme As Double, derniereLigne As Long
'Dim xs As Worksheet, somme#, dernièreLigne&
'somme = 0 ' Initialisation de la somme
' Parcours de toutes les feuilles entre S1 et S6
For Each ws In ThisWorkbook.Worksheets
If ws.Index >= iIdx1 And ws.Index <= iIdx2 Then
With ws
'On Error Resume Next
' Trouver la dernière ligne utilisée dans la feuille actuelle
derniereLigne = .Cells(Rows.Count, sColC).End(xlUp).Row
'On Error GoTo 0
' Boucle sur les lignes pour vérifier le critère et additionner les valeurs correspondantes
For i = 1 To derniereLigne
If .Cells(i, sColC) = Critere Then somme = somme + .Cells(i, sColV)
Next
End With
End If
Next
' Retourne la somme calculée
SommeSiColonnes = somme
'
End Function
Bon travail!