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
Je me dis que en formule il devrait s'agir d'une formule matricielle a utiliser mais je ne sais pas laquelle. Et à la limite elle n'est une option préférable vu que ces formules sont très consommatrices.

La logique c'est d'identifier la plus récente des dates de la colonne E qui correspond à la même clé (Colonne A) et de reporter tous les montants à partir de cette ligne
 

momo

XLDnaute Occasionnel
Dans mon fichier j'ai mis la formule max en e1.
Après il était pas question de clé ou quoi, pour le coup ça n'a plus rien à voir il faut refaire la formule ou VBA selon les préférences.
Je test quand je pourrai
A +
Ah my bad pour les clés. Mais oui effectivement c'est pour une même clé qu'il faut renvoyer les valeurs. Une formule serait pas mal mais VBA aussi est parfait
 

Wayki

XLDnaute Impliqué
Bonjour,
Une première solution en formule, à essayer
Edit : en feuille 2, avec un TCD
Edit : Avec un code VBA :
VB:
Sub test()
Dim cellule As Range, max1 As Date, clé As String, ws As Worksheet
Set ws = Worksheets("feuil1")
max1 = Application.Max(ws.Range("Tableau1[Dates sorties]"))
clé = ws.Range("Tableau1[Dates sorties]").Find(max1).Offset(0, -4)

For Each cellule In ws.Range("Tableau1[Dates entrées]")

    Debug.Print cellule.Address
    If cellule >= max1 And cellule.Offset(0, -2) = clé And cellule.Offset(0, 2) = "" Then
    cellule.Offset(0, 11).Copy
    cellule.Offset(0, 13).PasteSpecial (xlPasteValues)
    Else
        If cellule.Offset(, 2) = max1 And cellule.Offset(, -2) = clé Then
        cellule.Offset(, 11).Copy
        cellule.Offset(, 13).PasteSpecial Paste:=xlValues
        End If
    End If
    
Next cellule
End Sub
A +
 

Pièces jointes

  • Somme sous condition.xlsx
    268 KB · Affichages: 4
Dernière édition:

momo

XLDnaute Occasionnel
Bonjour,
Une première solution en formule, à essayer
Edit : en feuille 2, avec un TCD
Edit : Avec un code VBA :
VB:
Sub test()
Dim cellule As Range, max1 As Date, clé As String, ws As Worksheet
Set ws = Worksheets("feuil1")
max1 = Application.Max(ws.Range("Tableau1[Dates sorties]"))
clé = ws.Range("Tableau1[Dates sorties]").Find(max1).Offset(0, -4)

For Each cellule In ws.Range("Tableau1[Dates entrées]")

    Debug.Print cellule.Address
    If cellule >= max1 And cellule.Offset(0, -2) = clé And cellule.Off
[QUOTE="Wayki, post: 20472342, member: 344292"]
max1 = Application.Max(ws.Range("Tableau1[Dates sorties]"))
[/QUOTE]

set(0, 2) = "" Then
    cellule.Offset(0, 11).Copy
    cellule.Offset(0, 13).PasteSpecial (xlPasteValues)
    Else
        If cellule.Offset(, 2) = max1 And cellule.Offset(, -2) = clé Then
        cellule.Offset(, 11).Copy
        cellule.Offset(, 13).PasteSpecial Paste:=xlValues
        End If
    End If
  
Next cellule
End Sub
A +
Bonjour Wayki,
Merci pour tous ces retours. Je crois qu'on est sur le chemin.
max1 = Application.Max(ws.Range("Tableau1[Dates sorties]"))
Bonjour Wayki

Je vous remercie pour ce retour. La solution macro semble être la plus adaptée.
Par contre, la formule du "Max" doit se calculer en fonction de chaque clé .

Fichier exemple joints
 

Pièces jointes

  • Somme sous condition V3.xlsm
    274.7 KB · Affichages: 2

Wayki

XLDnaute Impliqué
Bonjour,
A essayer, c'est peut-être pas le chemin le plus rapide mais ça fonctionne bien, toujours fonction de la clé dans la ligne paramètres :
VB:
Option Base 1
Sub test()
Dim cellule As Range, max1, clé As String, ws As Worksheet, Der_Ligne%
Set ws = Worksheets("feuil1")
clé = ws.Range("O1")
Der_Ligne = ws.Range("A" & Rows.Count).End(xlUp).Row
compteur = 0
Dim Tablo()
For Each cellule In Range("A1:A" & Der_Ligne)
    If cellule = clé Then
        If IsDate(cellule.Offset(0, 4)) Then
        compteur = compteur + 1
        ReDim Preserve Tablo(compteur)
        Tablo(compteur) = CLng(cellule.Offset(0, 4))
        End If
    End If
Next cellule

max1 = Application.Max(Tablo())

For i = 1 To Der_Ligne
    If Cells(i, 5) = CDate(max1) Then Cells(i, 16).Value2 = Cells(i, 14)
    If Cells(i, 3) >= max1 And Cells(i, 1) = clé Then
    Cells(i, 16).Value2 = Cells(i, 14)
    End If
Next i
   

End Sub
 

momo

XLDnaute Occasionnel
clé = ws.Range("O1")
Bonjour Wayki

Franchement merci pour la solution! Elle marche vraiment bien. Mais comme vous le dites, il faudra définir manuellement la clé pour chaque calcul

Mon fichier qui comporte 33 000 lignes de clés différente sera bien difficile à remplir. Mais c'est un début qui va bcp m'aider surtout pour les clés ciblées

Ps: J'ai essayé de redéfinir la ligne O1 en plage A1:A500 par exemple, mais évidemment ca à beugué
 

Statistiques des forums

Discussions
312 111
Messages
2 085 391
Membres
102 882
dernier inscrit
Sultan94