Se connecter avec
S'enregistrer | Connectez-vous

Faire une boucle sur un échéancier

Dernière réponse : dans Programmation

Bonjour,
Je dois réaliser un programme (sous VBA Excel) qui me permette de faire une boucle afin de répéter une action (calcul d'un échéancier puis répartir les paiements selon les dates auxquels ils doivent être effectués) sur les clients d'une institution de microfinance, mais là je bloque complètement (c'est dans le cadre de mon travail de diplôme que je dois faire ça et je ne suis pas du tout doué en programmation).
Donc si quelqu'un pouvait m'aider je l'en remercie d'avance.

Autres pages sur : boucle echeancier

Lassé par la pub ? Créez un compte
Expert Programmation

Citation :
et je ne suis pas du tout doué en programmation
:/ Ici, c'est un site d'entraide pour programmeurs. Les novices sont acceptés avec bienveillance. Pas ceux qui veulent qu'on fasse le boulot à leur place. Fais donc attention à la façon avec laquelle tu présentes les choses.

Citation :
si quelqu'un pouvait m'aider
Bien sûr qu'on va t'aider. Mais comment ? Ce que tu décris reste si vague.

ok je ferais attention, merci.
j'ai déjà commencé le programme, le souci que j'ai c'est la boucle, j'arrive pas à la faire. Donc j'ai un programme qui me fait un échéancier puis qui me retransment les paiements dans des cellules en fonction de dates (là j'ai du faire ca en module à partir de SOMMEPROD parce que j'arrivais pas autrement), en C11 les paiements à venir dans 1 mois, C12 dans 1 à 3 mois, ... (jusqu'ici pas de problème) et maintenant la boucle devrait me faier cette opération sur tous les clients de la banque et c'est là que je sèche. donc si quelqu'un avait une idée je lui en serait reconnaissant.

Voici le code que j'ai fait:

  1. Private Sub CommandButton1_Click()
  2.  
  3. Const fdg As Double = 0.1
  4. Dim montant As Double
  5. Dim tau As Double
  6. Dim tau2 As Double
  7. Dim dur As Integer
  8. Dim dep As Date
  9. Dim differ As Single
  10. Dim maf As Worksheet
  11. Dim index As Long
  12. Dim rbt As Currency
  13. Dim jour As Date
  14.  
  15. Set maf = Sheets("feuil2")
  16. maf.Range("A18:F419").ClearContents
  17. montant = maf.Range("e2")
  18. tau = maf.Range("f2") * 12 * 100
  19. tau2 = maf.Range("f2")
  20. dur = maf.Range("i2")
  21. differ = maf.Range("k2")
  22. rbt = (montant * (-tau2) * (1 + tau2) ^ dur) / (1 - (1 + tau2) ^ dur)
  23. dep = maf.Range("d2")
  24. For index = 1 To differ + dur
  25. maf.Range("a" & index + 17) = index
  26. jour = DateSerial(Year(dep), Month(dep) + index, Day(dep))
  27. If Weekday(jour, 2) = 6 Then jour = jour - 1
  28. If Weekday(jour, 2) = 7 Then jour = jour + 1
  29.  
  30. maf.Range("b" & index + 17) = Format(jour, "dddd")
  31. maf.Range("c" & index + 17) = jour
  32. If index <= differ Then
  33. maf.Range("d" & index + 17) = montant * tau / 1200
  34. maf.Range("e" & index + 17) = montant * fdg / (dur + differ)
  35. maf.Range("f" & index + 17) = (montant * tau / 1200) + (montant * fdg / (dur + differ))
  36. Else
  37. maf.Range("d" & index + 17) = rbt
  38. maf.Range("e" & index + 17) = montant * fdg / (dur + differ)
  39. maf.Range("f" & index + 17) = rbt + (montant * fdg / (dur + differ))
  40. End If
  41. Next index
  42.  
  43. Range("C11").Select
  44. ActiveCell.FormulaR1C1 = _
  45. "=SUMPRODUCT((Feuil2!R[7]C:R[18]C>=TODAY())*(Feuil2!R[7]C:R[18]C<TODAY()+30)*(Feuil2!R[7]C[3]:R[18]C[3]))"
  46. Range("C12").Select
  47. ActiveCell.FormulaR1C1 = _
  48. "=SUMPRODUCT((Feuil2!R[6]C:R[17]C>=TODAY()+30)*(Feuil2!R[6]C:R[17]C<TODAY()+90)*(Feuil2!R[6]C[3]:R[17]C[3]))"
  49. Range("c13").Select
  50. ActiveCell.FormulaR1C1 = _
  51. "=SUMPRODUCT((Feuil2!R[5]C:R[16]C>=TODAY()+90)*(Feuil2!R[5]C:R[16]C<TODAY()+180)*(Feuil2!R[5]C[3]:R[16]C[3]))"
  52. Range("C14").Select
  53. ActiveCell.FormulaR1C1 = _
  54. "=SUMPRODUCT((Feuil2!R[4]C:R[15]C>=TODAY()+180)*(Feuil2!R[4]C:R[15]C<TODAY()+360)*(Feuil2!R[4]C[3]:R[15]C[3]))"
  55. Range("C15").Select
  56. ActiveCell.FormulaR1C1 = _
  57. "=SUMPRODUCT((Feuil2!R[3]C:R[14]C>=TODAY()+360)*(Feuil2!R[3]C:R[14]C<TODAY()+720)*(Feuil2!R[3]C[3]:R[14]C[3]))"
  58. Range("C16").Select
  59. ActiveCell.FormulaR1C1 = _
  60. "=SUMPRODUCT((Feuil2!R[2]C:R[13]C>=TODAY()+720)*(Feuil2!R[2]C:R[13]C<TODAY()+1080)*(Feuil2!R[2]C[3]:R[13]C[3]))"
  61. Range("C17").Select
  62.  
  63. End Sub

bonjour,
j'ai essayé de faire ça avec une boucle: For each i
mais je crois que j'arrive pas à identifier les clients (pour l'instant je travaille avec un échantillon de 99 clients) qui se trouvent dans la feuille 3 (cellules A2:A100) donc ça me fait 100 fois la même opération sur le premier client.
est-ce que quelqu'un aurait une suggestion svp? merci

Ai réussi à faire le boucle (avec de l'aide), voilà ce que ça donne:

  1. Set maf = Sheets("feuil2")
  2. Set maf2 = Sheets("feuil3")
  3. For client = 2 To maf2.Range("a65536").End(xlUp).Row
  4. maf.Range("A18:F419").ClearContents
  5. montant = maf2.Range("e" & client)


mais le problème maintenant c'est que ça écrase à chaque fois les données dans les cellules C11:C16 (feuil2) alors que ça devrait les aditionner... est-ce que quelqu'un aurait une idée de comment résoudre cela? merci d'avance
Expert Programmation

Ligne 3. Ca, c'est intelligent.
Ligne 4. Ca, ça l'est moins. Regarde, tu effaces systématiquement la plage A18:F419.

Et si tu découpais ton gros problème compliqué en petits problèmes simples ? Allez, ré-explique simplement ce que tu veux faire, indépendamment de ce que tu as déjà essayé.
Lassé par la pub ? Créez un compte