VBA Complexe : Additionner suivant une période mobile

Bonjour,

Je suis confronté à un problème simple pourtant mais depuis j'ai l'impression que c'est impossible. Voila :

Je voudrais que dans l'onglet (1), dans les cellules correspondantes à chaque mois se retrouve la somme des montants de l'onglet (2) avec la condition Year To Date. C'est à dire que l'on fait la somme entre deux dates : du 01 à jour j (01 à 31). Supposons que nous sommes le 27 Juillet alors on somme sur chaque mois les montants de chaque mois du 1er au 27.

Fichier ci-joint.

Merci d'avance.

132019k.zip (605.60 Ko)

Bonjour,

ça ne va pas être pratique car tes dates sont au format texte au lieu de format date.

Si quelqu'un pouvait m'aider svp. Merci

Bonjour,

Insister, c'est bien ... mais répondre à Raja aurait été plus efficace (et plus courtois )

Si tu transformes les valeurs de la colonne C en véritables dates, que tu ne veux sommer que les quittances de 2019 et que j'ai compris la demande, essaie, en C13:

=SOMMEPROD((ANNEE(operation_Quit_01!$C$2:$C$24874)=2019)*(MOIS(operation_Quit_01!$C$2:$C$24874)=MOIS(1&C$12))*(JOUR(operation_Quit_01!$C$2:$C$24874)<=JOUR(AUJOURDHUI())))

... à recopier à droite

Merci Milité.

Je vais tester.

Raja, toute ma gratitude.

Sinon, pour plus de clarté, je joinds le code VBA et le FIchier. J'avoue que je ne comprends pas pourquoi j'ai des 0 à la place alors que les dates sont au format "date".

L'objectif : faire la somme des montant compris pour chaque mois entre le 1er (debut) et la date du jour (fin).

A noter qu'on aura un problème pour Frévrier qui s’arrête à 28 ou 29.

Le code :

Sub ADD()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Dim Fich As String, Chemin As String, Wb As Workbook
Dim c As Range, Teste As Variant, Plage As Range, Ligne As Long, Period As String
Dim Col As Integer, debut As Integer, fin As Integer, n As Currency, dernligne As Integer

    Set ws = ThisWorkbook

        debut = 1
        fin = Day(Date)

        m = ws.Sheets("operation_Quit_01").Range("A65536").End(xlUp).Row
            With ws.Sheets("operation_Quit_01")
             dernligne = ws.Sheets("operation_Quit_01").Range("A" & .Rows.Count).End(xlUp).Row
             Set MaplageRECH = ws.Sheets("operation_Quit_01").Range("C2:C" & dernligne)
             Set MaplageADD = ws.Sheets("operation_Quit_01").Range("G2:G" & dernligne)

                 ws.Sheets("Resultat").Range("C11") = Format(Application.WorksheetFunction.SumIfs(MaplageADD, MaplageRECH, ">=" & debut & "/01/2019", MaplageRECH, fin & "/01/2019"), "#,##0")
                 ws.Sheets("Resultat").Range("D11") = Format(Application.WorksheetFunction.SumIfs(MaplageADD, MaplageRECH, ">=" & debut & "/02/2019", MaplageRECH, fin & "/02/2019"), "#,##0") '"fin" ne doit pas dépasser le 28 ou le 29...mais comment faire ?
                 ws.Sheets("Resultat").Range("E11") = Format(Application.WorksheetFunction.SumIfs(MaplageADD, MaplageRECH, ">=" & debut & "/03/2019", MaplageRECH, fin & "/03/2019"), "#,##0")
                 ws.Sheets("Resultat").Range("F11") = Format(Application.WorksheetFunction.SumIfs(MaplageADD, MaplageRECH, ">=" & debut & "/04/2019", MaplageRECH, fin & "/04/2019"), "#,##0")
                 ws.Sheets("Resultat").Range("G11") = Format(Application.WorksheetFunction.SumIfs(MaplageADD, MaplageRECH, ">=" & debut & "/05/2019", MaplageRECH, fin & "/05/2019"), "#,##0")
                 ws.Sheets("Resultat").Range("H11") = Format(Application.WorksheetFunction.SumIfs(MaplageADD, MaplageRECH, ">=" & debut & "/06/2019", MaplageRECH, fin & "/06/2019"), "#,##0")
                 ws.Sheets("Resultat").Range("I11") = Format(Application.WorksheetFunction.SumIfs(MaplageADD, MaplageRECH, ">=" & debut & "/07/2019", MaplageRECH, fin & "/07/2019"), "#,##0")
                 ws.Sheets("Resultat").Range("J11") = Format(Application.WorksheetFunction.SumIfs(MaplageADD, MaplageRECH, ">=" & debut & "/08/2019", MaplageRECH, fin & "/08/2019"), "#,##0")
                 ws.Sheets("Resultat").Range("K11") = Format(Application.WorksheetFunction.SumIfs(MaplageADD, MaplageRECH, ">=" & debut & "/09/2019", MaplageRECH, fin & "/09/2019"), "#,##0")
                 ws.Sheets("Resultat").Range("L11") = Format(Application.WorksheetFunction.SumIfs(MaplageADD, MaplageRECH, ">=" & debut & "/10/2019", MaplageRECH, fin & "/10/2019"), "#,##0")
                 ws.Sheets("Resultat").Range("M11") = Format(Application.WorksheetFunction.SumIfs(MaplageADD, MaplageRECH, ">=" & debut & "/11/2019", MaplageRECH, fin & "/11/2019"), "#,##0")
                 ws.Sheets("Resultat").Range("N11") = Format(Application.WorksheetFunction.SumIfs(MaplageADD, MaplageRECH, ">=" & debut & "/12/2019", MaplageRECH, fin & "/12/2019"), "#,##0")

            End With

Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub
112019k.zip (636.68 Ko)

Bonjour,

Pas regardé à ton code, mais sélectionne toutes tes dates et applique un format standard ... tu devrais constater que le format ne s'applique qu'aux 6 premières. Même si tu as appliqué un format Date, Excel ne les interprète que comme du texte (tes données sont importées depuis un autre logiciel ?)

OUI, les données sont importées d'un autre logiciel. Cependant, je viens de tout convertir au format date mais rien n'y fait.

Ci-joint le fichier.

112019k.zip (708.18 Ko)

Re-bonjour,

Essaie:

Sub tot()
With Sheets("operation_quit_01")
Dim tabResult(11)
tablo = .Range("C2:G" & .Cells(Rows.Count, 3).End(xlUp).Row)
For i = 1 To UBound(tablo)
    If Year(tablo(i, 1)) = 2019 And Day(tablo(i, 1) < Day(Date)) Then _
        tabResult(Month(tablo(i, 1)) - 1) = tabResult(Month(tablo(i, 1)) - 1) + tablo(i, 5)
Next i
End With
Sheets("Resultat").Range("C11:N11") = tabResult
End Sub

... chez moi, ça fonctionne

Bonjour à tous,

Sinon, formule qui marche à priori (et qui s'adaptera pour 2020) :

=SOMME.SI.ENS(operation_Quit_01!$G$2:$G$1048576;operation_Quit_01!$C$2:$C$1048576;">"&DATE(DROITE($B$11;4);EQUIV(C$12;$C$12:$N$12;0);1);operation_Quit_01!$C$2:$C$1048576;"<="&DATE(DROITE($B$11;4);EQUIV(C$12;$C$12:$N$12;0);JOUR(AUJOURDHUI())))

Eh bravo à JoyeuxNoel et Milité pour votre expertise. J'en suis bluffé et fier d'être un premium... very proud !

Ne nous enflammons, ma formule n'affiche pas les bons résultats ...

Rechercher des sujets similaires à "vba complexe additionner suivant periode mobile"