Microsoft 365 Somme sous conditions

momo

XLDnaute Occasionnel
Bonjour à tous

je voudrais une formule ou une macro (peu importe) qui ramène les chiffres de la colonne N (Colonne Calcul 1) à la condition de les prendre à partir de la dernière date la plus récente indiquée à la colonne E (Date sorties).

J'y ai joint un fichier illustratif

Merci d'avance à tous

Momo
 

Pièces jointes

  • Somme sous condition.xlsx
    14.8 KB · Affichages: 6
Solution
WayyyKi

Vous êtes génial!!! Waoooh merci pour tout ca marche Impec!!! En plus vous avez du faire des recherches et tout.. Je suis vraiment impressed.. Merci vraiment pour votre aide. On y est arrivé!
Merci
Nickel, le même code épuré des déclarations inutiles :
VB:
Option Base 1
Sub test()
Dim cellule As Range, ind%, ws As Worksheet, Der_Ligne%, D As Object
Set ws = Worksheets("feuil1")
Der_Ligne = ws.Range("A" & Rows.Count).End(xlUp).Row
Dim Tablo
Tablo = ws.Range("A1").CurrentRegion
Set D = CreateObject("Scripting.dictionary")

    For i = 3 To UBound(Tablo)
        ind = CLng(Evaluate("=INDEX(Tableau1[Dates sorties],LARGE(IF(((Tableau1[Clé]=""" & Tablo(i, 1) & """)*(Tableau1[Dates sorties]<>"""")),ROW(Tableau1[Clé])-2),1))"))...

momo

XLDnaute Occasionnel
Bon Djidji

très bizarrement, la formule dans le Post 15 est identique à celle que vous aviez donné dans le Post 13. Et quand bien même je la valide matricielle elle ne marche pas et pourtant celle-ci marche.

Par contre, il y a t-il moyen de faire la formule en tenant compte des clés se trouvant dan la colonne A . pour plusieurs clés différentes, la date en colonne E sera différente. (voir à partir de Post 6).

Aussi est-ce que sur 3000 lignes la formule matricielle ne va pas ramer?
 

Wayki

XLDnaute Impliqué
J'ai beaucoup ramé, fait des recherches etc etc,
Mais j'ai réussi à obtenir quelque chose de sympa je pense.
VB:
Option Base 1
Sub test()
Dim cellule As Range, max1, clé As String, ws As Worksheet, Der_Ligne%, D As Object
Set ws = Worksheets("feuil1")
Der_Ligne = ws.Range("A" & Rows.Count).End(xlUp).Row
compteur = 0
Dim Tablo
Tablo = ws.Range("A1").CurrentRegion
Set D = CreateObject("Scripting.dictionary")

    For i = 3 To UBound(Tablo)
        ind = CLng(Evaluate("=INDEX(Tableau1[Dates sorties],LARGE(IF(((Tableau1[Clé]=""" & Tablo(i, 1) & """)*(Tableau1[Dates sorties]<>"""")),ROW(Tableau1[Clé])-2),1))"))
        If Not D.exists(Tablo(i, 1)) Then D.Add Tablo(i, 1), ind
    Next i
    Set i = Nothing
Dim tablo2()
ReDim tablo2(D.Count, 1 To 2)
tablo2 = Application.Transpose(Array(D.keys, D.Items))
For Each cellule In ws.Range("C3:C" & Der_Ligne)
    For t = 1 To UBound(tablo2)
    If CLng(cellule.Offset(0, 2)) = tablo2(t, 2) Then cellule.Offset(0, 12) = cellule.Offset(0, 11).Value2
    If CLng(cellule) >= tablo2(t, 2) And cellule.Offset(0, -2) = tablo2(t, 1) Then
    cellule.Offset(0, 12) = cellule.Offset(0, 11).Value2
    End If
    Next t
Next cellule
 
End Sub
J'ai essayé ce code sur le dernier fichier renseigné et ça a marché 💪
A +
 

Wayki

XLDnaute Impliqué
WayyyKi

Vous êtes génial!!! Waoooh merci pour tout ca marche Impec!!! En plus vous avez du faire des recherches et tout.. Je suis vraiment impressed.. Merci vraiment pour votre aide. On y est arrivé!
Merci
Nickel, le même code épuré des déclarations inutiles :
VB:
Option Base 1
Sub test()
Dim cellule As Range, ind%, ws As Worksheet, Der_Ligne%, D As Object
Set ws = Worksheets("feuil1")
Der_Ligne = ws.Range("A" & Rows.Count).End(xlUp).Row
Dim Tablo
Tablo = ws.Range("A1").CurrentRegion
Set D = CreateObject("Scripting.dictionary")

    For i = 3 To UBound(Tablo)
        ind = CLng(Evaluate("=INDEX(Tableau1[Dates sorties],LARGE(IF(((Tableau1[Clé]=""" & Tablo(i, 1) & """)*(Tableau1[Dates sorties]<>"""")),ROW(Tableau1[Clé])-2),1))"))
        If Not D.exists(Tablo(i, 1)) Then D.Add Tablo(i, 1), ind
    Next i
    Set i = Nothing
Dim tablo2()
ReDim tablo2(D.Count, 1 To 2)
tablo2 = Application.Transpose(Array(D.keys, D.Items))
For Each cellule In ws.Range("C3:C" & Der_Ligne)
    For t = 1 To UBound(tablo2)
    If CLng(cellule.Offset(0, 2)) = tablo2(t, 2) Then cellule.Offset(0, 12) = cellule.Offset(0, 11).Value2
    If CLng(cellule) >= tablo2(t, 2) And cellule.Offset(0, -2) = tablo2(t, 1) Then
    cellule.Offset(0, 12) = cellule.Offset(0, 11).Value2
    End If
    Next t
Next cellule
    
End Sub
A +
 

momo

XLDnaute Occasionnel
et je continue en formules (et pas matricielles)
Wooooww Le bonheur n'arrive jamais seul dit-on..

Toutes les solutions m'arrivent presque simultanment, à un moment où je desespérais et je pensais avoir saoulé Wayki et commercer à vous souler aussi.
Merci bcp la solution par formule marche aussi impec

Merci Djidji.

Ps: Apparemment je ne peux pas définir deux post comme étant la solution
 

momo

XLDnaute Occasionnel
et je continue en formules (et pas matricielles)
Bonjour Djidji

Je me permet de revenir vers vous avec la mise en pratique de la formule et un cas de figure qui présente la même date Max sur 02 clés différentes.

La formule fonctionne sur le premier cas mais beugue sur le 2e.

J'ai mis en Pj un fichier

PS: Le résultat est le même également sur la macro de Wayki
 

Pièces jointes

  • Somme sous condition V4.xlsx
    13.8 KB · Affichages: 2

Statistiques des forums

Discussions
312 305
Messages
2 087 089
Membres
103 464
dernier inscrit
Inconnu2