Msgbox si cellule vide

[Résolu]
Signaler
Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008
-
Messages postés
222
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
18 février 2011
-
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

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



Valides ma réponse STP ;)



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

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...
Messages postés
222
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
18 février 2011
3
...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
Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008

Nickel ça marche, merci beaucoup
Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008

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
Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008

merci beaucoup