Msgbox si cellule vide

Résolu
Landoltp Messages postés 68 Date d'inscription mercredi 1 août 2007 Statut Membre Dernière intervention 14 mars 2008 - 30 oct. 2007 à 10:35
antoine_ferard Messages postés 222 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 18 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
   
    Dim h As Currency
    Dim b As Currency
   
    h = Vh + ((Nominal * NbAnnées) / ((1 + Rendement) ^ NbAnnées))
    b = Vb + (Nominal / ((1 + Rendement) ^ NbAnnées))
       
    Sheets("MaturityGap").Range("k28") = (h / b)
   
End Sub

8 réponses

antoine_ferard Messages postés 222 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 18 février 2011 3
30 oct. 2007 à 11:52
If Sheets("maturitygap").Range("k20")= ""
 or Sheets("maturitygap").Range("k20")= "0"
Then



Valides ma réponse STP ;)



''***************************************************************************
...à votre service
Thanks & Peace
Tonio
3
antoine_ferard Messages postés 222 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 18 février 2011 3
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
3
antoine_ferard Messages postés 222 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 18 février 2011 3
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
0
Landoltp Messages postés 68 Date d'inscription mercredi 1 août 2007 Statut Membre Dernière intervention 14 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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
antoine_ferard Messages postés 222 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 18 février 2011 3
30 oct. 2007 à 11:38
...peut-être est-ce dû au fait que tu écris Sheets("MaturityGap").Range("k28") = (h / b)

ou alors, c'est parceque ta variable "b" a pour valeur "0", donc impossible de diviser. Dans ce cas, juste avant, fait le test "if b <> 0 then"

''***************************************************************************
...à votre service
Thanks & Peace
Tonio
0
Landoltp Messages postés 68 Date d'inscription mercredi 1 août 2007 Statut Membre Dernière intervention 14 mars 2008
30 oct. 2007 à 11:46
Nickel ça marche, merci beaucoup
0
Landoltp Messages postés 68 Date d'inscription mercredi 1 août 2007 Statut Membre Dernière intervention 14 mars 2008
30 oct. 2007 à 11:49
mais juste une autre question:


si la valeur ne peut pas non plus être 0, je dois le mettre où, j'ai essayé ça:

If Sheets("maturitygap").Range("k20")= "" or 0 Then

mais ça le prend pas en compte
0
Landoltp Messages postés 68 Date d'inscription mercredi 1 août 2007 Statut Membre Dernière intervention 14 mars 2008
30 oct. 2007 à 11:53
merci beaucoup
0
Rejoignez-nous