Autres Somme des montants concernant des doublons

kaki31

XLDnaute Occasionnel
Bonjour;
Je voudrais afficher les montants de la colonne C dans la colonne D, et la somme des cellules dés qu'il y a doublons en tenant compte de de B et A. :rolleyes:
Merci.

:)
 

Pièces jointes

  • KAKI.xlsx
    9.5 KB · Affichages: 9

job75

XLDnaute Barbatruc
Bonsoir kaki31,

Voyez le fichier .xlsm joint et cette fonction VBA, à placer impérativement dans un module standard :
VB:
Function S(colonnes As Range)
Dim lig&, i&
lig = Application.Caller.Row
If colonnes(lig - 1, 1) = colonnes(lig, 1) Or colonnes(lig, 1) = "" Then S = "": Exit Function
i = lig
While colonnes(lig, 1) = colonnes(i, 1)
    If IsNumeric(colonnes(i, 2)) Then S = S + CDbl(colonnes(i, 2))
    i = i + 1
Wend
End Function
Elle est utilisée en colonne D avec la formule =S(B:C)

Bonne nuit.
 

Pièces jointes

  • KAKI(1).xlsm
    18.4 KB · Affichages: 5

eriiic

XLDnaute Barbatruc
Bonjour à tous,

par formule :
VB:
=SI(EQUIV(A2&B2;$A$1:$A$22&$B$1:$B$22;0)=LIGNE();SOMME.SI.ENS($D$2:$D$22;$B$2:$B$22;B2;$A$2:$A$22;A2);"")
Formule matricielle à valider avec Shift+Ctrl+Entrée
La formule doit s'entourer de { } si la validation est correcte.
eric
 

job75

XLDnaute Barbatruc
Bonjour kaki31, eriiiic, le forum,

Oui bien que plus lourde cette formule matricielle est meilleure car elle ne dépend pas de la manière dont le tableau est trié.

Edit : il y a juste une coquille, remplacer bien sûr $D$2:$D$22 par $C$2:$C$22.

Bonne journée.
 
Dernière édition:

job75

XLDnaute Barbatruc
Cette macro dans le code de la feuille de ce fichier (2) s'appuie sur les colonnes A et B :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim d As Object, tablo, i&, x$, v#, n&
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
With [A1].CurrentRegion.Resize(, 4)
    tablo = .Value 'matrice, plus rapide
    For i = 2 To UBound(tablo)
        x = tablo(i, 1) & Chr(1) & tablo(i, 2)
        v = Val(Replace(tablo(i, 3), ",", "."))
        If d.exists(x) Then
            tablo(i, 4) = ""
            n = d(x)
            tablo(n, 4) = tablo(n, 4) + v
        Else
            d(x) = i 'mémorise la ligne
            tablo(i, 4) = v
        End If
    Next
    Application.EnableEvents = False 'désactive les évènements
    .Columns(4) = Application.Index(tablo, , 4) 'restitution
    Application.EnableEvents = True 'réactive les évènements
End With
End Sub
Elle se déclenche quand on modifie ou valide une cellule quelconque.

Elle est très rapide car elle utilise un tableau VBA et le Dictionary.
 

Pièces jointes

  • KAKI(2).xlsm
    20.4 KB · Affichages: 4

Discussions similaires

Statistiques des forums

Discussions
312 097
Messages
2 085 257
Membres
102 840
dernier inscrit
blaise09