Formule somme.si.ens avec plusieurs plages nommées

Bonjour à tous,

Je dois utiliser dans une formule somme.si.ens 3 plages nommées (jours, centre et famille). Je ne sais pas pourquoi mais la formule ne me remonte pas le bon chiffre. Dans mon exemple en PJ il remonte 6 au lieu de 9...

Par avance merci pour votre aide.

35exemple.xlsx (8.95 Ko)

Bonjour,

A ma connaissance les critères ne peuvent pas être une plage de valeurs, il faut traiter individuellement chaque critère, l'inconvénient c'est que si ces plages de critères sont trop longues ou que les longueurs sont variables, il faudra réécrire la formule. Pour contourner cela, le mieux c'est de créer une fonction personnalisée qui s'adaptera aux différentes tailles des listes.

Voici votre fichier avec 3 propositions:

-Avec SOMME.SI.ENS

-Avec SOMMEPROD

-Avec une fonction personnalisée

Cdlt

Bonjour,

Merci de ton retour, si un critère peut être une plage de valeur je le fais tout le temps mais jamais avec 3 plages c'est là ou cela coince. Pour les deux méthodes que tu propose en somme.si.ens et sommeprod je connais mais je voulais l'éviter car les listes sont beaucoup plus longues que celles mises en exemple donc un peu "chiant" à écrire ^^.

Pour la fonction personnalisée je ne connais pas mais est-ce que cela fonctionne si les colonnes utilisées pour la formule ne sont pas collées les unes aux autres mais séparées par d'autres données ?

Bonjour,

Sinon, un TCD !

image
Pour la fonction personnalisée je ne connais pas mais est-ce que cela fonctionne si les colonnes utilisées pour la formule ne sont pas collées les unes aux autres mais séparées par d'autres données ?

La fonction fournie est établie en fonction du fichier déposé par vos soins. Pour une application plus spécifique, il faut modifier le code pour qu'il cherche les colonnes en question.
Il est vivement recommandé dans un premier temps de convertir votre tableau en tableau structuré, vous en tirerez tous les bénéfices.
Voici le fichier avec le tableau convertit en tableau structuré "Tableau1". Amusez-vous dans le tableau à insérer de nouvelles colonnes ou à en supprimer, la formule fonctionne toujours.

le fichier le code
Function Som(Tabl As Range, j As Date, C As Range, F As Range) As Long
    Dim DerLig_Tab As Long, DerCol_Tab As Long, DerLig_Dates As Long, DerLig_Centres As Long, DerLig_Familles As Long
    Dim Col_Date As Long, Col_Centre As Long, Col_Famille As Long, Col_Qte As Long
    Dim Col_List_Date As Long, Col_List_Centre As Long, Col_List_Famille As Long
    Dim i As Long, k As Long, l As Long, m As Long
    Dim Dt As Date, Ct As String, Fm As String
    Application.ScreenUpdating = False

    'Repérage des colonnes
    Col_Date = Application.WorksheetFunction.Match("Jours", Rows(1), 0)
    Col_Centre = Application.WorksheetFunction.Match("Centres", Rows(1), 0)
    Col_Famille = Application.WorksheetFunction.Match("Famille", Rows(1), 0)
    Col_Qte = Application.WorksheetFunction.Match("Qté", Rows(1), 0)
    Col_List_Date = Application.WorksheetFunction.Match("Liste des Critères", Rows(1), 0)
    Col_List_Centre = Col_List_Date + 1
    Col_List_Famille = Col_List_Date + 2

    DerLig_Tab = ActiveSheet.ListObjects("Tableau1").DataBodyRange.Rows.Count
    DerCol_Tab = ActiveSheet.ListObjects("Tableau1").DataBodyRange.Columns.Count
    'repérage de la longueur des listes
    DerLig_Dates = Cells(1, Col_List_Date).End(xlDown).Row
    DerLig_Centres = Cells(1, Col_List_Centre).End(xlDown).Row
    DerLig_Familles = Cells(1, Col_List_Famille).End(xlDown).Row
    For l = 2 To DerLig_Dates
        Dt = Cells(l, Col_List_Date)
        For k = 2 To DerLig_Centres
            Ct = Cells(k, Col_List_Centre)
            For m = 2 To DerLig_Familles
                Fm = Cells(m, Col_List_Famille)
                For i = 2 To DerLig_Tab
                    If Cells(i, Col_Date) = Dt And Cells(i, Col_Centre) = Left(Ct, 3) And Cells(i, Col_Famille) = Fm Then
                        Som = Som + Cells(i, Col_Qte)
                    End If
                Next i
            Next m
        Next k
    Next l
End Function

Merci de votre aide.

Rechercher des sujets similaires à "formule somme ens plages nommees"