Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 somme de plusieurs champs, dans plusieurs feuilles en fonction d'un critère

Virgin999

XLDnaute Nouveau
Bonjour,
Je m'explique :
j'ai une feuille par jour pour de la facturation. Sur chacune de ces feuilles, figure le nom d'un titulaire (B2) et la somme calculée qui lui est dû (AB2).
Ex : Feuille J1 : titulaire A - Somme dû 10€
Feuille J2 : titulaire A - Somme dû 15€
Feuille J3 : titulaire B - Somme dû 10€
Feuille J4 : titulaire C - Somme dû 5€
Feuille J5 : titulaire B - Somme dû 10€

En feuille TOTAL : je souhaiterais faire la somme de tout ce qui est dû par titulaire, (en, recherchant dans toutes les feuilles qui est le titulaire et en cumulant les sommes qui lui sont dues)
Titulaire A Somme due : (10+15) 25€
Titulaire B Somme due : (10+10) 20€
Titulaire C : Somme due 5€

je précise que ce ne sont pas des tableaux..., mais sur chaque feuille, le titulaire et somme due sont tjrs dans les mêmes cellules.
la somme totale de toutes les feuilles, ca j'arrive à faire, mais c'est le cumul par titulaire que je n'arrive pas...je ne sais pas quelle(s )formule(s) utiliser.
est ce que c'est faisable sans passer par une Marco? quelle formule ?
merci de votre aide
 

Pièces jointes

  • Essai-Facturation_mensuelle.xlsx
    76.4 KB · Affichages: 12
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Virgin999, bienvenue sur XLD,

Sans macro on peut utiliser Power Query mais il faut connaître...

En VBA voyez le fichier joint et cette macro dans le code de la feuille "Total" :
VB:
Private Sub Worksheet_Activate()
Dim d As Object, w As Worksheet, x$
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
For Each w In Worksheets
    If LCase(w.Name) <> "total" Then
        x = Trim(w.Range("B2"))
        If x <> "" Then d(x) = d(x) + Val(Replace(w.Range("AB2"), ",", "."))
    End If
Next
'---restitution---
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [B2] '1ère cellule de destination, à adapter
    If d.Count Then
        .Resize(d.Count) = Application.Transpose(d.keys) 'Transpose est limitée à 65536 lignes
        .Offset(, 1).Resize(d.Count) = Application.Transpose(d.items)
    End If
    .Offset(d.Count).Resize(Rows.Count - d.Count - .Row + 1, 2).ClearContents 'RAZ en dessous
End With
End Sub
Elle se déclenche quand on active la feuille.

A+
 

Pièces jointes

  • Consolider(1).xlsm
    25.5 KB · Affichages: 14

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…