Report de données selon date

Résolu
Landoltp Messages postés 68 Date d'inscription mercredi 1 août 2007 Statut Membre Dernière intervention 14 mars 2008 - 12 oct. 2007 à 15:16
Landoltp Messages postés 68 Date d'inscription mercredi 1 août 2007 Statut Membre Dernière intervention 14 mars 2008 - 13 oct. 2007 à 16:50
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

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
13 oct. 2007 à 13:27
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²
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
12 oct. 2007 à 23:58
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²
0
Landoltp Messages postés 68 Date d'inscription mercredi 1 août 2007 Statut Membre Dernière intervention 14 mars 2008
13 oct. 2007 à 11:33
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.
0
Landoltp Messages postés 68 Date d'inscription mercredi 1 août 2007 Statut Membre Dernière intervention 14 mars 2008
13 oct. 2007 à 16:50
Merci beaucoup, ca me fait exactement ce que je voulais.
0