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

Microsoft 365 Somme sous conditions

  • Initiateur de la discussion Initiateur de la discussion momo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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))"))...
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?
 
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 +
 
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 +
 
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
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
180
Réponses
2
Affichages
135
  • Question Question
XL 2019 fonction
Réponses
2
Affichages
133
Réponses
17
Affichages
583
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…