Bonjour à toutes et à tous.

J'ai enrichi SOMME.SI.ENS avec une fonction VBA pour permettre de faire l'addition de plusieurs colonnes mais avec des zones de critères avec une seule colonne.
En standard SOMME.Si.ENS retourne .#VALEUR# dans ce cas.

Ici le code de ma fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Function Mon_Somme_Si_Ens( _
                    prmZoneSomme As Range, prmZoneCritere01 As Range, prmCritere01 As Variant, _
                    Optional prmZoneCritere02 As Variant, Optional prmCritere02 As Variant, Optional prmZoneCritere03 As Variant, Optional prmCritere03 As Variant, Optional prmZoneCritere04 As Variant, Optional prmCritere04 As Variant, Optional prmZoneCritere05 As Variant, Optional prmCritere05 As Variant, Optional prmZoneCritere06 As Variant, Optional prmCritere06 As Variant, _
                    Optional prmZoneCritere07 As Variant, Optional prmCritere07 As Variant, Optional prmZoneCritere08 As Variant, Optional prmCritere08 As Variant, Optional prmZoneCritere09 As Variant, Optional prmCritere09 As Variant, Optional prmZoneCritere10 As Variant, Optional prmCritere10 As Variant, Optional prmZoneCritere11 As Variant, Optional prmCritere11 As Variant, _
                    Optional prmZoneCritere12 As Variant, Optional prmCritere12 As Variant, Optional prmZoneCritere13 As Variant, Optional prmCritere13 As Variant, Optional prmZoneCritere14 As Variant, Optional prmCritere14 As Variant) As Double
    'Fait un somme.si.ens sur plusieurs colonnes avec un test sur une seule colonne
    Dim result As Double: result = 0
 
    Dim ligne As Range
    Dim colonne As Range
 
    For Each colonne In prmZoneSomme.Columns
        result = result + Application.WorksheetFunction.SumIfs( _
                                colonne, prmZoneCritere01, prmCritere01, _
                                prmZoneCritere02, prmCritere02, prmZoneCritere03, prmCritere03, prmZoneCritere04, prmCritere04, prmZoneCritere05, prmCritere05, prmZoneCritere06, prmCritere06, _
                                prmZoneCritere07, prmCritere07, prmZoneCritere08, prmCritere08, prmZoneCritere09, prmCritere09, prmZoneCritere10, prmCritere10, prmZoneCritere11, prmCritere11, _
                                prmZoneCritere12, prmCritere12, prmZoneCritere13, prmCritere13, prmZoneCritere14, prmCritere14)
    Next colonne
 
    Mon_Somme_Si_Ens = result
End Function
C'est simple wrappeur sur SumIfs.

Mon problème vient de ce que l'un de mes critères est "=VRAI" or quand on passe par VBA il faut mettre "=TRUE" à la place :-( ce qui n'est pas évident pour un utilisateur ordinaire.
De plus, je soupçonne que si j'avais utilisé une fonction de calcul, il aurait aussi fallu lui mettre son non anglais.

Existe-t-il un moyen simple de dire à Excel d'utiliser la langue courante comme la propriété .FormulaLocal des Ranges ?

A+