Landoltp
Messages postés68Date d'inscriptionmercredi 1 août 2007StatutMembreDernière intervention14 mars 2008
-
12 oct. 2007 à 15:16
Landoltp
Messages postés68Date d'inscriptionmercredi 1 août 2007StatutMembreDernière intervention14 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
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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.
Landoltp
Messages postés68Date d'inscriptionmercredi 1 août 2007StatutMembreDernière intervention14 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.