Attribution de valeur à des cellules Excel depuis vba
roso_8332
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je cherche à attribuer des valeurs à ma feuille Excel "Réserves" depuis une boucle vba.
En gros j'aimerai que les résultats de chaque boucle de CumulAvoir soient attribué à une cellule Excel.
J'ai essayé comme ça :
Mais ça ne me retourne rien et ça me renvoie un message d'erreur #VALUE! à ma fonction...
Le code complet :
Les lignes qui nous intéressent sont de la ligne 122 à 126.
Je tiens à préciser que ce code marche et me renvoie 4 valeurs justes.
Je vous remercie par avance !
Je cherche à attribuer des valeurs à ma feuille Excel "Réserves" depuis une boucle vba.
For i = 1 To NmbMoisRetraite CumulAvoir = CumulAvoir * (1 + rend / 12) ^ (1 / 12) + AvoirAnnee(i) * (1 - FraisAvoir / 12) Next i
En gros j'aimerai que les résultats de chaque boucle de CumulAvoir soient attribué à une cellule Excel.
J'ai essayé comme ça :
For i = 1 To NmbMoisRetraite CumulAvoir = CumulAvoir * (1 + rend / 12) ^ (1 / 12) + AvoirAnnee(i) * (1 - FraisAvoir / 12) Worksheets("réserves").Cells("A" & i).Value = CumulAvoir Next i
Mais ça ne me retourne rien et ça me renvoie un message d'erreur #VALUE! à ma fonction...
Le code complet :
Option Explicit Public Function AvoirEpargne(Risk1 As String, Risk2 As String, Prime As Double, rend As Double, BirthDate As Date, gender As String, DateCalcul As Date, RiskAjout As String, _ AgeAjout As Double, RiskRetrait As String, ageRetrait As Double, AgeRetraitCap As Double) As Variant Dim PrimeRisk1() As Double Dim PrimeRisk2() As Double Dim PrimeRiskAjout() As Double Dim Retrait() As Double Dim CumulAvoir As Double Dim AvoirAnnee() As Double Dim vecteur(4) As Variant Dim CapitalAcquis As Double Dim AvoirPrev As Double Dim age As Double Dim NmbMoisRetraite As Integer Dim ArrayRisk1 As Range Dim ArrayRisk2 As Range Dim ArrayRiskAjout As Range Dim ArrayRetrait As Range Dim AgeRetraite As Integer Dim j As Integer Dim i As Integer Dim k As Integer Dim l As Integer Dim colonne As Integer 'Paramètres frais Dim FraisFixes As Double Dim FraisPrimes As Double Dim FraisAvoir As Double Dim AugmPrimeAnnee As Double FraisFixes = 100 FraisPrimes = 0.05 FraisAvoir = 0.004 AugmPrimeAnnee = 0.01 'Taux d'augmentation des primes par années If gender = "F" Then colonne = 2 Else colonne = 3 'Calcul de l'âge exact age = Year(DateCalcul) - Year(BirthDate) + Month(DateCalcul) / 12 - Month(BirthDate) / 12 'Age Retraite en fonction du genre If gender = "F" Then AgeRetraite = 64 Else AgeRetraite = 65 'Calcul du nombre de mois avant retraite NmbMoisRetraite = ((AgeRetraite - age) * 12) ReDim PrimeRisk1(NmbMoisRetraite) ReDim PrimeRisk2(NmbMoisRetraite) ReDim AvoirAnnee(NmbMoisRetraite) ReDim PrimeRiskAjout(NmbMoisRetraite) ReDim Retrait(NmbMoisRetraite) 'Definition des plages ou rechercher les primes de risque en fonction des offres chosie Set ArrayRisk1 = ThisWorkbook.Sheets(Risk1).Range("A1:C1300") Set ArrayRisk2 = ThisWorkbook.Sheets(Risk2).Range("A1:C1300") Set ArrayRiskAjout = ThisWorkbook.Sheets(RiskAjout).Range("A1:C1300") Set ArrayRetrait = ThisWorkbook.Sheets(RiskRetrait).Range("A1:C1300") ' Création Array pour les primes de risk 1 & 2 et pour l'avoir de chaque année For j = 1 To NmbMoisRetraite PrimeRisk1(j) = Application.WorksheetFunction.VLookup(Int(age + j / 12), ArrayRisk1, colonne, False) * (1 + AugmPrimeAnnee) ^ (j - j + j / 12.1) Next j For k = 1 To NmbMoisRetraite PrimeRisk2(k) = Application.WorksheetFunction.VLookup(Int(age + k / 12), ArrayRisk2, colonne, False) * (1 + AugmPrimeAnnee) ^ (k - k + k / 12.1) Next k 'Partie ajout en cours de route Dim NmbMoisSansAjout As Integer Dim m As Integer Dim n As Integer NmbMoisSansAjout = (AgeAjout - age) * 12 For m = 1 To NmbMoisSansAjout - 1 PrimeRiskAjout(m) = 0 Next m For n = NmbMoisSansAjout To NmbMoisRetraite PrimeRiskAjout(n) = Application.WorksheetFunction.VLookup(Int(age + n / 12), ArrayRiskAjout, colonne, False) * (1 + AugmPrimeAnnee) ^ (n - n + n / 12.1) Next n 'Partie retrait en cours de route Dim NmbMoisSansRetrait As Integer Dim a As Integer Dim b As Integer NmbMoisSansRetrait = (ageRetrait - age) * 12 For a = 1 To NmbMoisSansRetrait - 1 Retrait(a) = 0 Next a For b = NmbMoisSansRetrait To NmbMoisRetraite Retrait(b) = Application.WorksheetFunction.VLookup(Int(age + b / 12), ArrayRetrait, colonne, False) * (1 + AugmPrimeAnnee) ^ (b - b + b / 12.1) Next b ' Calcul avoit total mensuel For l = 1 To NmbMoisRetraite AvoirAnnee(l) = Prime + Retrait(l) - PrimeRisk1(l) - PrimeRisk2(l) - PrimeRiskAjout(l) - FraisPrimes * (PrimeRisk1(l) + PrimeRisk2(l) + PrimeRiskAjout(l) - Retrait(l)) - FraisFixes / 12 Next l 'Boucle Calcul de l'avoir à la retraite CumulAvoir = 0 For i = 1 To NmbMoisRetraite CumulAvoir = CumulAvoir * (1 + rend / 12) ^ (1 / 12) + AvoirAnnee(i) * (1 - FraisAvoir / 12) Worksheets("réserves").Cells("A" & i).Value = CumulAvoir Next i vecteur(0) = CumulAvoir 'Calcul du capital acquis Dim NmbMoisAvRetraitCap As Double Dim f As Integer NmbMoisAvRetraitCap = (AgeRetraitCap - age) * 12 For f = 1 To NmbMoisAvRetraitCap CapitalAcquis = CapitalAcquis * (1 + rend / 12) ^ (1 / 12) + AvoirAnnee(f) * (1 - FraisAvoir / 12) Next f vecteur(3) = CapitalAcquis 'Calcul du capital accumulé à l'age de la retraite dont on a besoin pour couvrir toutes les primes futures jusqu'à l'âge final choisi Dim AgeFinal As Integer Dim tEscompte As Double Dim t As Integer Dim u As Integer Dim v As Integer Dim s As Integer Dim o As Integer Dim g As Integer AgeFinal = 80 tEscompte = 0# Dim NmbMoisApresRetraite As Integer Dim PrimeRiskR1() As Double Dim PrimeRiskR2() As Double Dim PrimeRiskAjoutR() As Double Dim RetraitR() As Double Dim AvoirAnneeR() As Double Dim CapitalAcc As Double NmbMoisApresRetraite = (AgeFinal - AgeRetraite) * 12 ReDim PrimeRiskR1(NmbMoisApresRetraite) ReDim PrimeRiskR2(NmbMoisApresRetraite) ReDim PrimeRiskAjoutR(NmbMoisApresRetraite) ReDim AvoirAnneeR(NmbMoisApresRetraite) ReDim RetraitR(NmbMoisApresRetraite) For t = 1 To NmbMoisApresRetraite PrimeRiskR1(t) = Application.WorksheetFunction.VLookup(Int(AgeRetraite + t / 12), ArrayRisk1, colonne, False) * (1 + AugmPrimeAnnee) ^ (t - t + t / 12.1) Next t For u = 1 To NmbMoisApresRetraite PrimeRiskR2(u) = Application.WorksheetFunction.VLookup(Int(AgeRetraite + u / 12), ArrayRisk2, colonne, False) * (1 + AugmPrimeAnnee) ^ (u - u + u / 12.1) Next u For o = 1 To NmbMoisApresRetraite PrimeRiskAjoutR(o) = Application.WorksheetFunction.VLookup(Int(AgeRetraite + o / 12), ArrayRiskAjout, colonne, False) * (1 + AugmPrimeAnnee) ^ (o - o + o / 12.1) Next o For g = 1 To NmbMoisApresRetraite RetraitR(g) = Application.WorksheetFunction.VLookup(Int(AgeRetraite + g / 12), ArrayRetrait, colonne, False) * (1 + AugmPrimeAnnee) ^ (g - g + g / 12.1) Next g For v = 1 To NmbMoisApresRetraite AvoirAnneeR(v) = PrimeRiskR1(v) + PrimeRiskR2(v) Next v 'Boucle Calcul de l'avoir dont on a besoin à la retraite pour couvrir tous les couts futurs CapitalAcc = 0 Worksheets("réserves").Activate For s = 1 To NmbMoisApresRetraite CapitalAcc = CapitalAcc + (PrimeRiskR1(s) + PrimeRiskR2(s) + PrimeRiskAjout(s) - RetraitR(s)) * (1 / (1 + tEscompte)) ^ (s / 12) Next s vecteur(1) = CapitalAcc AvoirEpargne = vecteur 'épargne qui correcpond à celle qu'il faut pour rembourser l'écart de primes futures Dim CapitalAcc2 As Double Dim w As Integer CapitalAcc2 = 0 For w = 1 To NmbMoisApresRetraite CapitalAcc2 = CapitalAcc2 + (PrimeRiskR1(w) + PrimeRiskR2(w) + PrimeRiskAjout(w) - Prime - Retrait(w)) * (1 / (1 + tEscompte)) ^ (w / 12) Next w vecteur(2) = CapitalAcc2 AvoirEpargne = vecteur End Function
Les lignes qui nous intéressent sont de la ligne 122 à 126.
Je tiens à préciser que ce code marche et me renvoie 4 valeurs justes.
Je vous remercie par avance !
A voir également:
- Attribution de valeur à des cellules Excel depuis vba
- Verrouiller des cellules excel - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Excel compter cellule couleur sans vba - Guide
1 réponse
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
"ça ne me retourne rien et ça me renvoie un message d'erreur #VALUE! à ma fonction", peux-tu être plus précis?
qu'attends-tu comme "retour"?
où vois-tu "#VALUE!"?
"ce code marche et me renvoie 4 valeurs justes", peux-tu être plus précis? que vois-tu de juste et où?
Si tu souhaites partager ton fichier, nous pourrons mieux analyser.
"ça ne me retourne rien et ça me renvoie un message d'erreur #VALUE! à ma fonction", peux-tu être plus précis?
qu'attends-tu comme "retour"?
où vois-tu "#VALUE!"?
"ce code marche et me renvoie 4 valeurs justes", peux-tu être plus précis? que vois-tu de juste et où?
Si tu souhaites partager ton fichier, nous pourrons mieux analyser.