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 :

Problème application fonction [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Par défaut Problème application fonction
    Bonjour,

    J'ai créé une fonction me permettant de calculer les soldes restants dus :

    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
     
     
    Function SRD(ByVal Capital As Double, ByVal taux_banque As Double, ByVal per As Integer, ByVal Duree As Integer, ByRef St As Variant)
     
     
        Dim Bs(999) 'Initialisation de la matrice des soldes restant du
        'Indice de calcul
        Dim i As Integer, j As Integer
     
        'Calcul du taux périodique
        tx_p = (1 + taux_banque) ^ (1 / per) - 1
     
        Bs(0) = Capital
     
        'Calcul des soldes restants dûs périodiques
        For i = 1 To per * Duree
            Bs(i) = Bs(i - 1) - (Capital * tx_p / (1 - (1 + tx_p) ^ (-Duree * per)) - tx_p * Bs(i - 1))
        Next
        '// Fin du calcul
     
     
        'Calcul du solde restant dû annuel
        For i = 0 To Duree - 1
     
            For j = i * per To per * (i + 1) - 1
     
                St(i) = St(i) + Bs(j) / per
     
            Next
     
        Next
        '// Fin du calcul
     
    End Function
    J'ai un problème quand j'essaye de l'appliquer comme suit :

    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
     
     
    Sub essai()
     
    Dim P(100)
     
    For i = 2 To 100
        P(i) = SRD(12500000, 0.035, 12, 3, 1000000)
     
        MsgBox P(i)
    Next i
     
    End sUB
     
    Incompatiblité de type ! 
     
    La fonction est bien correcte mais je crois que je m'y prends mal à l'application, merci d'avance pour votre aide
     
    Cordialement

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    J'ai un problème quand j'essaye de l'appliquer comme suit :
    Oui, quel problème ?

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    l'argument St, typé Variant, étant utilisé en tant que tableau dans ta fonction, c'est normal que ton appel provoque une erreur d'incompatibilité, puisque ton St dans l'appel est chiffre valant 1000000 et pas un tableau

    si tu veux que la fonction te retourne un tableau sur le même modèle que St alors un exemple :

    on écrit en colonne A l'ensemble des soldes restants dûs annuels

    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
    Sub test()
    Dim Tabl()
    Tabl = SRD(12500000, 0.035, 12, 3)
    Cells(1, 1).Resize(UBound(Tabl) + 1, 1).Value = Application.Transpose(Tabl)
    End Sub
     
    Function SRD(ByVal Capital As Double, ByVal taux_banque As Double, ByVal per As Integer, ByVal Duree As Integer) As Variant
    Dim Bs(999)
    Dim i As Integer, j As Integer
    Dim St()
     
        tx_p = (1 + taux_banque) ^ (1 / per) - 1
        Bs(0) = Capital
     
        For i = 1 To per * Duree
            Bs(i) = Bs(i - 1) - (Capital * tx_p / (1 - (1 + tx_p) ^ (-Duree * per)) - tx_p * Bs(i - 1))
        Next
     
        For i = 0 To Duree - 1
            ReDim Preserve St(i)
     
            For j = i * per To per * (i + 1) - 1
                St(i) = St(i) + Bs(j) / per
            Next
        Next
     
        SRD = St
    End Function

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. C++ Problème de fonctions et pointeurs
    Par zmatz dans le forum C++
    Réponses: 3
    Dernier message: 01/10/2005, 16h20
  2. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  3. Problème de fonction
    Par Anduriel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/05/2005, 20h30
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

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