Report de données selon date

[Résolu]
Signaler
Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008
-
Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008
-
bonjour,
j'ai un code VBA (sur Excel) qui me calcule un échéancier, une fois l'échéancier fait, je voudrais que le code aille me prendre les valeurs de la colonne F (dans Feuil1) et qu'il me retransmette la somme de ces valeurs en fonction de la date de paiement (colonne C, Feuil1) dans les cellules C4 à C9 (Feuil2).

Dans ce cas, les valeurs seraient (pour la Feuil2):

C4 : les paiements à venir dans un mois
C5 : paiements pour la période de 1 à 3 mois
C6 : paiements pour la période de 3 à 6 mois
C7 : de 6 à 12 mois
C8 : de 1 à 2 ans
C9 : de 2 à 3 ans

Les paiements qui auraient déjà été effectués à une date passée ne seraient pas à prendre en compte.
J'ai essayé de faire ça par une formule "somme.si" et de l'enregistrer en module, mais ca ne marche pas, donc si quelqu'un aurait une idée de comment procéder, merci d'avance.
et si vous avez besoin de plus d'explication, n'hésitez pas.

Voici le code de mon échéancier:

Private Sub CommandButton1_Click()


Const fdg As Double = 0.1
Dim montant As Double
Dim tau As Double
Dim tau2 As Double
Dim dur As Integer
Dim dep As Date
Dim differ As Single
Dim maf As Worksheet
Dim index As Long
Dim rbt As Currency
Dim jour As Date


    Set maf = Sheets("feuil2")
    maf.Range("A18:F419").ClearContents
    montant = maf.Range("e2")
    tau = maf.Range("f2") * 12 * 100
    tau2 = maf.Range("f2")
    dur = maf.Range("i2")
    differ = maf.Range("k2")
    rbt = (montant * (-tau2) * (1 + tau2) ^ dur) / (1 - (1 + tau2) ^ dur)
    dep = maf.Range("d2")
    For index = 1 To differ + dur
    maf.Range("a" & index + 17) = index
    jour = DateSerial(Year(dep), Month(dep) + index, Day(dep))    If Weekday(jour, 2) 6 Then jour jour - 1    If Weekday(jour, 2) 7 Then jour jour + 1


    maf.Range("b" & index + 17) = Format(jour, "dddd")
    maf.Range("c" & index + 17) = jour
        If index <= differ Then
        maf.Range("d" & index + 17) = montant * tau / 1200
        maf.Range("e" & index + 17) = montant * fdg / (dur + differ)
        maf.Range("f" & index + 17) = (montant * tau / 1200) + (montant * fdg / (dur + differ))
        Else
        maf.Range("d" & index + 17) = rbt
        maf.Range("e" & index + 17) = montant * fdg / (dur + differ)
        maf.Range("f" & index + 17) = rbt + (montant * fdg / (dur + differ))
        End If
        Next index


End Sub

4 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
J'ai mis des dates en colonnes C et des montants dans la colonne F de la feuille 1
J'ai utilisé C2:C12 et F2:F12   (à toi de modifier dans les formules)
Les conditions ne prennent pas en compte le nombre de jour de chaque mois, mais elle pourrait être modifiée au besoin en la complexifiant quelque peu... Mais le principe demeure celui auquel je pensais, soit l'utilisation de SOMMEPROD à plusieurs conditions.

Donc, ce que l'on voit entre parenthèses dans SOMMEPROD sont les conditions, sauf la dernière qui est la plage dont on veut la somme.

ex:
C4 : les paiements à venir dans un mois (dans les 30 prochains jours)
SOMMEPROD((Feuil1!C2:C12>AUJOURDHUI())*(Feuil1!C2:C12=AUJOURDHUI()+30)*(Feuil1!C2:C12Note: les plages qui constituent la formule (ici, lignes 2 à 12) doivent toujours être identiques (constantes) dans chaque condition. La colonne n'est pas importante, mais les lignes le sont.

MPi²
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
J'ai de la difficulté à comprendre le problème, mais bon... la journée a été dure

Pourquoi le SOMME.SI ne fonctionne-t-il pas ? parce que tu as plusieurs conditions ?
si oui, tu pourrais opter pour SOMMEPROD qui peut prendre plusieurs conditions.

Peut-être que plus d'explications aiderait (?)

MPi²
Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008

Je ne sais pas exactement pourquoi le SOMME.SI ne fonctionne pas, peut-être parceque les conditions sont des dates (ou si c'est possible de le faire je ne sais pas comment) et peut-être aussi parce que j'ai plusieurs conditions.

Par exemple, pour la cellule C4 (Feuil2), les conditions sont : - la date du paiement doit être >= à aujourd'hui
                                                                                             - la date du paiement doit être au maximum dans un mois
pour la cellule C5: - date > à 1 mois
                            - date <= à 3 mois

Ai essayé de faire ca par des formules Excel, car j'avais aucune idée de comment m'y prendre en VBA, mais l'idéal serait de le faire par un programme si c'est possible.
Mais merci déjà pour la piste du SOMMEPROD.
Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008

Merci beaucoup, ca me fait exactement ce que je voulais.