Salut ici,
Quelques années après ce post, pendant lesquelles j'ai largement utilisé le dit fichier, j'aimerais le moderniser en utilisant des fonctions (j'ai pour l'instant des classeurs couverts de dizaines de colonnes pour les calculs, c'est très fonctionnel, mais pas pratique pour plusieurs utilisations).
J'ai commencé mes devoirs, lu sur les sub/fonctions... mais je bloque évidemment rapidement.
=> Dans un premier temps, j'ai fais une macro qui fonctionne très bien, pour me faire la main. Les calculs sont exacts, pas de problème de ce côté.
Mais je ne veux pas d'une macro, mais plutôt d'une fonction que je peux ainsi adapter très facilement.
J'essaie pour l'instant d'entrer ma fonction avec une seule variable renseignée, les autres données étant "fixes" (ce ne sera pas le cas à terme, bien sur). Mais j'ai systèmatiquement une erreur "#valeur" .... et je ne parviens pas à comprendre pourquoi.
=> Je veux que la cellule me renvoie la valeur X.
Auriez vous une idée ??
Function CalculIntDéb(Base_Calcul As Currency) As Currency
Dim DateDeb As Date 'date début du calcul d'intérêt
Dim DateFin As Date 'date fin de calcul des intérêts
Dim numero_ligne As Integer 'numéro de ligne dans la base de données des intérêts
Sheets("Intérêts").Activate
numero_ligne = 7
DateDeb = Cells(69, 8)
DateFin = Cells(69, 9)
DebInt = Cells(numero_ligne, 1)
x = Range("H68")
'Nous allons chercher le premier trimestre ou le taux s'applique
Do Until Cells(numero_ligne + 1, 1) > DateDeb
numero_ligne = numero_ligne + 1
Loop
' A enlever juste pour les tests
Range("G59").Value = Cells(numero_ligne, 1)
'Lancement d'une boucle pour calculer les intérêts débiteurs
Do Until DateFin < Cells(numero_ligne, 1)
'On calcul taux d'intérêt sur ce trimestre
'Cas ou le calcul d'intérêt se termine dans ce trimestre
If DateFin < (Cells(numero_ligne + 1, 1)) Then
'1 - cas ou le calcul d'intérêt débute ET se termine dans ce même trimestre
If DateDeb > (Cells(numero_ligne, 1)) Then
x = x * (1 + (Cells(numero_ligne, 4))) ^ (DateFin - DateDeb) - Base_Calcul
'Le temps de la vérif :
Range("G49").Value = x
Else
'2 - cas ou le calcul d'intérêt se termine dans ce trimestre mais a débuté avant ce trimestre
x = x * (1 + (Cells(numero_ligne, 4))) ^ (DateFin - Cells(numero_ligne, 1)) - Base_Calcul
End If
Else
'3- Cas ou le calcul d'intérêt commence dans ce trimestre mais fini plus tard
If DateDeb > (Cells(numero_ligne, 1)) Then
x = x * (1 + (Cells(numero_ligne, 4))) ^ (Cells(numero_ligne + 1, 1) - DateDeb)
Else
'4- Si trimestre "complet" (le calcul ne débute ni ne termine dans ce trimeste) (a revoir, devrait être 1...) :
x = x * (1 + (Cells(numero_ligne, 4))) ^ (Cells(numero_ligne + 1, 1) - Cells(numero_ligne, 1))
End If
End If
'On continue à calculer dans le prochain trimestre, sauf si la date de fin de calcul se situe dans le trimestre en cours.
If DateFin > Cells(numero_ligne, 1) Then
numero_ligne = numero_ligne + 1
End If
Loop 'fin total du calcul d'intérêt débiteur
'Range("G63").Value = x ' A enlever juste pour les tests (inscris le montant total des intérêts)
CalculIntDéb = x
End Function