Landoltp
Messages postés68Date d'inscriptionmercredi 1 août 2007StatutMembreDernière intervention14 mars 2008
-
30 oct. 2007 à 10:35
antoine_ferard
Messages postés222Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention18 février 2011
-
30 oct. 2007 à 11:55
Bonjour,
J'ai un code qui me permet de calculer la duration d'un actif, le problème c'est que j'aimerais qu'un message apparaisse si une case nécessaire au calcul est vide, pour l'instant j'ai fait ça, mais ça ne fonctionne pas:
If Sheets("maturitygap").Range("k20") Is Empty Then
variable = MsgBox("Veuillez remplir la case Nominal", vbCritical + vbOKOnly, "Nominal")
End If
Merci d'avance si quelqu'un pouvait m'aider.
Voici le code en entier s'il y en a besoin:
Private Sub CommandButton4_Click()
'Définition des variables
Dim Flux As Double
Dim Nominal As Double
Dim Intérêt As Double
Dim Rendement As Double
Dim NbAnnées As Integer
Dim ValeurActualisée() As Double
Dim Vb As Double
Dim Vh As Double
Dim i As Integer
'Initialisation des variables
Nominal = Sheets("MaturityGap").Range("k20")
Intérêt = Sheets("MaturityGap").Range("k22")
NbAnnées = Sheets("MaturityGap").Range("k24")
Rendement = Sheets("MaturityGap").Range("k26") / 100
Flux = Nominal * Intérêt
Vb = 0
Vh = 0
ReDim ValeurActualisée(NbAnnées, 1)
'
If Sheets("maturitygap").Range("k20") Is Empty Then
variable = MsgBox("Veuillez remplir la case Nominal", vbCritical + vbOKOnly, "Nominal")
End If
'
'Calcul des Valeurs actualisées au fur et à mesure de la boucle
For i = 1 To NbAnnées
'valeur actualisée, mais en pondérant chaque séquence par un coefficient multiplicateur correspondant au moment T de la séquence.
'Vh = Somme de 1 à T de (CouponT/(1+r)^T)*T
ValeurActualisée(i - 1, 0) = (Flux / ((1 + Rendement) ^ i)) * i
Vh = Vh + ((Flux / ((1 + Rendement) ^ i)) * i)
'Valeur actualisée d'une obligation au taux actuariel du marché
'Vb = Somme de 1 à T de CouponT/(1+r)^T
ValeurActualisée(i - 1, 1) = Flux / ((1 + Rendement) ^ i)
Vb = Vb + (Flux / ((1 + Rendement) ^ i))
Next i
antoine_ferard
Messages postés222Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention18 février 20113 30 oct. 2007 à 11:55
Tu peux aussi essayer en mettant "val", et sans les guillements au niveau du 0 (les guillemets définissent du "texte", sans les guillements c'est du numérique, et le "val" met la donnée en numérique, donc voilà):
IF val(Sheets("maturitygap").Range("k20"))= 0Then
''***************************************************************************
...à votre service
Thanks & Peace
Tonio
antoine_ferard
Messages postés222Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention18 février 20113 30 oct. 2007 à 11:08
Je pense, peut-être, qu'il faut retirer ta variable "variable", ainsi que le "="....
En gros tu écris juste : MsgBox("Veuillez remplir la case Nominal", vbCritical + vbOKOnly, "Nominal")
Autre chose : If Sheets("maturitygap").Range("k20")= ""Then
''***************************************************************************
...à votre service
Thanks & Peace
Tonio
Landoltp
Messages postés68Date d'inscriptionmercredi 1 août 2007StatutMembreDernière intervention14 mars 2008 30 oct. 2007 à 11:28
Ca marche avec ce code:
If Sheets("maturitygap").Range("k20") = "" Then
variable = MsgBox("Veuillez remplir la case Nominal", vbCritical + vbOKOnly, "Nominal")
Range("k20") = "1"
End If
mais un autre problème survient c'est qu'il me met "Erreur d'exécution '6': Dépassement de capacité"
pour cette ligne du code:
Sheets("MaturityGap").Range("k28") = (h / b)
Ce qui serait tout à fait normal si la valeur de K20 étant 0, mais là vu que j'attribue le chiffre 1 par défaut je comprends pas pourquoi ça me met ça...
Vous n’avez pas trouvé la réponse que vous recherchez ?