IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

VBA: Calcul emprunt,annuités, intérêts


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2
    Par défaut VBA: Calcul emprunt,annuités, intérêts
    Bonjour,

    Je suis novice en VBA et j'ai un petit souci sur ma programmation.
    Je souhaite en effet que l'utilisateur entre le montant du capital emprunté, son taux d'intérêt, le nombre d'années de l'emprunt ainsi que le coût de son assurance pour pouvoir calculé le coût total de son emprunt.

    Je pense que l'algorithme est bon mais en fait j'ai un problème de déclaration de variables je crois pour a(), i(), c()...
    Il ne voit pas ce que c'est...

    Comment dois-je faire?
    Je vous envoie toute ma programmation car je ne suis pas non plus certaine que l'erreur vienne de ça:

    Voici la programmation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    Sub CommandButton1_Click()
     
    'Aquisition des informations
    Dim ca As Integer, n As Integer, tx As Integer
     
    ca = Val(TextBox1) 'Capital emprunté (Euros)
    n = Val(TextBox2) 'Nombre de périodes (en mois)
    tx = Val(TextBox3) 'Taux fixe d'emprunt (%)
    If tx = 0 Then tx = 0.0000001
    txm = tx / 100 / 12
     
    'Amortissement le 1er mois
    a(1) = ca * txm / ((1 + txm) ^ n - 1)
     
    'Intérêt 1er mois
    i(1) = ca * txm
     
    'somme prélevée mensuelle
    pr = i(1) + a(1)
     
    'Début de la boucle du tableau d'amortissement
    'Le tableaux c() contiendra le capital restant dû période après période (mois après mois) en euros.
    'Le tableaux i() contiendra les intérets filés à la banque sur chaque période, en euros
    'Le tableaux a() contiendra le capital remboursé sur chaque période, en euros.
    c(1) = ca
    totalint = 0
     
    For xx = 2 To n
    c(xx) = c(xx - 1) - a(xx - 1)
    i(xx) = c(xx) * txm
    a(xx) = pr - i(xx)
    totalint = totalint + i(xx)
    Next xx
     
    derr = a(n) - c(n)
    a(n) = c(n)
    i(n) = i(n) + derr
     
    If tx = 0.000001 Then
    i(1) = 0
    For xx = 2 To n
    a(xx) = c(1) / n
    i(xx) = 0
    c(xx) = c(xx - 1) - a(xx)
    Next xx
    totalint = 0
    derr = 0
    a(n) = c(n)
    End If
     
    totalint = totalint + i(1) + derr
     
     
    'Affichage du résultat
    Label6 = Int(totalint * 100 + 0.5) / 100 'Total des intérets
     
     
     
    'Création de deux OptionBox : Option1 et Option2
    'On ne testera que Option1 qui cochée permet d'indiquer au programme
    'le prix de l'assurance par période (Euros/mois) si l'on coche Option1
    'le prix de l'assurance en % du capital si l'on coche l'Option2
     
    If OptionButton1.Value = True Then
    TextBox5 = Int((Val(TextBox4) * 100 / Val(TextBox1)) * 100) / 100
    'On a donné le prix de l'assurance par période
    'Affichage pour information en % du capital
    Else
    TextBox4 = Int((Val(TextBox5) / 100 * Val(TextBox1)) * 100) / 100
    'On a donné le prix de l'assurance en % du capital
    'Affichage pour informationpar de ce prix par période
    End If
     
    'Affichage des résultats
    Label10 = Val(TextBox4) * Val(TextBox2) 'Assurance totale à payer
    Label13 = Int((pr + Val(TextBox4)) * 100 + 0.5) / 100 'Echéance mensuelle
     
    Label15 = Val(Label10) + Val(Label6) 'Cout total du crédit, assurance et intérets compris.
     
     
    End Sub
    Je sais qu'il y'a des personnes supers balaises sur ce forum donc ... je vous serais très reconnaissante d'y jeter un oeil ou deux!! Merci bcp d'avance!

    A très bientôt
    Elo

  2. #2
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bonjour,

    je ne vois en effet aucune déclaration de tableaux

    si tu connais la dimension, tu les déclare par exemplecomme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim x(12) as integer
    dim y(1 to 12)
    respectivement un tableau de 13 valeurs ( de 0 à 12 ) et de 12 valeurs ( de 1 à 12 )

    dans le cas de tableaux variables, c'est un peu plus complexe
    mais le principe est de déclarer un tableau vide puis de le redimenssioner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dim x() as integer
    ...
    ...
     
    redim x(1 to 12, 1 to 6)
    redim y(1 to 12)
    ..
    a noter que redimensionner un tableau le réinitialise

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Vous pouvez modifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub CommandButton1_Click()
     
    'Aquisition des informations
    Dim ca As Integer, n As Integer, tx As Integer
     
    ca = Val(TextBox1) 'Capital emprunté (Euros)
    n = Val(TextBox2) 'Nombre de périodes (en mois)
    tx = Val(TextBox3) 'Taux fixe d'emprunt (%)
     
    Dim a(), i(), c()
    ReDim a(n)
    ReDim i(n)
    ReDim c(n)

  4. #4
    Membre chevronné Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 352
    Par défaut
    Bonjour,

    Je suis tombé sur ce message de Elo... et comme le code était faux, j'ai entrepris de le corriger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    Sub simulateur_credit()
    '------------------------------------------------------------------------------'
    'Ceci est un simulateur de crédit à taux d'intérêts constants et niveau de
    'remboursements constants
    'Ce code est écrit en Langage VBA - compatible Excel
    '------------------------------------------------------------------------------'
     
    'Le tableaux c() contiendra le capital restant dû période après période (mois après mois) en euros.
    'Le tableaux i() contiendra les intérets dus à la banque sur chaque période, en euros.
    'Le tableaux a() contiendra le capital amorti/remboursé sur chaque période, en euros.
    Dim a(), i(), c(), mensualite, txm, capital, txassurances, totalintetass, coutassurances As Double
    Dim assurances As Byte
    Dim n, xx As Integer
     
    'saisie des données : capital emprunté, durée et taux
    'Capital emprunté (en Euros)
     
    capital = CDbl(InputBox("AVERTISSEMENT : Ceci est un simulateur de crédit à taux d'intérêts et remboursements constants - avec un paiement en fin de période" & Chr(10) & Chr(10) _
            & "4 ou 5 questions vont se succéder" & Chr(10) & Chr(10) _
            & "1. Combien voulez-vous emprunter en Euros ?", "Simulateur financier 1/5"))
     
    'Nombre de périodes (en mois)
    n = CDbl(InputBox("2. Durée du prêt (en mois) ? ", "Simulateur financier 2/5"))
    'Taux fixe d'emprunt (en %)
    txm = CDbl(InputBox("3. Quel est le taux d'intérêt annuel en pourcentage ?", "Simulateur financier 3/5"))
    If txm = 0 Then txm = 0.0000001
    txm = txm / 100 / 12
     
    assurances = CDbl(MsgBox("4. Le prêt est-il assuré ?", vbYesNo, "Simulateur financier 4/5"))
    Select Case assurances
        Case vbYes
            'Taux fixe de l'assurance du prêt (%)
            txassurances = CDbl(InputBox("5. Quel est le taux de prime d'assurances en pourcentage ? (sur capital initial et avec une couverture à 100 % sur une tête) "))
            txassurances = txassurances / 100 / 12
            coutassurances = capital * txassurances
        Case vbNo
            coutassurances = 0
    End Select
     
    ReDim a(1), i(1), c(1)
    'Amortissement le 1er mois
    a(0) = capital * txm / ((1 + txm) ^ n - 1)
    'Intérêt 1er mois
    i(0) = capital * txm
     
    'somme prélevée mensuelle
    mensualite = i(0) + a(0)
     
    'Début de la boucle du tableau d'amortissement
    c(0) = capital
    totalint = i(0)
     
    For xx = 1 To n
        ReDim Preserve a(xx), i(xx), c(xx)
        c(xx) = c(xx - 1) - a(xx - 1)
        i(xx) = c(xx) * txm
        a(xx) = pr - i(xx)
        totalintetass = totalintetass + i(xx)
    Next xx
     
    'Affichage des résultats
    MsgBox "Echéance mensuelle = " & Format(mensualite + coutassurances, "###,###,##0.00 €") & Chr(10) _
            & "Cout de l'assurances sur la durée = " & Format(coutassurances * n, "###,###,##0.00 €") & Chr(10) _
            & "Coût total du crédit, en intérêts et assurances le cas échéant = " & Format(totalintetass + coutassurances, "###,###,##0.00 €"), vbQuestion, "Simulateur financier 5/5"
     
    End Sub
    On ne sait jamais, si ça peut servir à quelqu'un.

    Au passage et en question subsidiaire, est ce que quelqu'un sait sortir proprement d'une macro en utilisant le bouton "Annuler" de l'InputBox ?

    Bertrand

  5. #5
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, voir dans la FAQ ou via [F1] . Annuler revoyant une chaine vide, il suffit de traiter cela en conséquence.

  6. #6
    Membre chevronné Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 352
    Par défaut
    Bonjour à tous les deux,

    Je pense avoir compris.
    Je voulais gérer l'inputbox comme le msgbox. C'est pourtant différent (notamment le msgbox gère les boutons en arguments).

    Il me faut utiliser l'application.Inputbox au lieu de la fonction Inputbox et déclarer comme variant mon résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim capital As Variant
     
    'saisie des données : capital emprunté, durée et taux
    'Capital emprunté (en Euros)
    capital = Application.InputBox("AVERTISSEMENT : Ceci est un simulateur de crédit à taux d'intérêts et remboursements constants - avec un paiement en fin de période" & Chr(10) & Chr(10) _
            & "4 ou 5 questions vont se succéder" & Chr(10) & Chr(10) _
            & "1. Combien voulez-vous emprunter en Euros ?", "Simulateur financier 1/5")
     
    If capital = False Or capital = "" Or capital <= 0 Then
        MsgBox "erreur de saisie - merci de recommencer l'opération du début"
        Exit Sub
    End If
    C'est pas mon sujet, sinon j'aurai mis résolu
    Merci

    Bertrand

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 107
    Par défaut
    Le bouton annuler d'une InputBox renvoi vbNullString

    Après il suffit d'en prendre compte dans ta procédure

    Du genre If Resultat = vbnullstring then .....

    Par contre, comme tes variables sont déclarés double, le vbNullString génère une erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    ---
    Dim Assurances as variant
    ---
    assurances = CDbl(MsgBox("4. Le prêt est-il assuré ?", vbYesNo, "Simulateur financier 4/5"))
    Select Case assurances
        Case vbYes
            'Taux fixe de l'assurance du prêt (%)
            Do
                txassurances = Replace(InputBox("5. Quel est le taux de prime d'assurances en pourcentage ? (sur capital initial et avec une couverture à 100 % sur une tête) "), ".", ",")
                If txassurances = vbNullString Then Exit Sub
            Loop Until IsNumeric(txassurances)
            txassurances = CDbl(txassurances) / 100 / 12
            coutassurances = capital * txassurances
        Case vbNo
            coutassurances = 0
    End Select

Discussions similaires

  1. [VBA] Calcul d'une durée dans un formulaire
    Par Platon93 dans le forum Access
    Réponses: 2
    Dernier message: 16/12/2006, 17h53
  2. [VBA] Calculer la différence entre deux dates
    Par T'chab dans le forum Access
    Réponses: 13
    Dernier message: 11/05/2006, 16h12
  3. [VBA] Calcul pour insérer dans une textebox
    Par Yanmeunier dans le forum IHM
    Réponses: 13
    Dernier message: 15/03/2006, 17h38
  4. Réponses: 3
    Dernier message: 23/01/2006, 11h10
  5. [VBA] Calcul du PGDC --> Problème de résultat
    Par snoopy69 dans le forum Access
    Réponses: 16
    Dernier message: 25/08/2005, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo