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 :

[XL - 2013] VBA fonction amortissement degressif


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 1
    Par défaut [XL - 2013] VBA fonction amortissement degressif
    Bonjour à tous

    J'ai un petit problème avec une fonction que j'essai de créer.

    C'est une fonction permettant de calculer un amortissement dégressif en fonction de 3 critères : la date d'acquisition, la durée de vie, et la valeur de l'immobilisation.

    Il est pas possible de calculer cet amortissement directement et c'est pourquoi je voulais passer par la création d'un tableau sous VBA pour pouvoir prendre les données souhaitées et les arranger.

    Voici mon code et je ne sais pas ou est l'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
    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    Option Explicit
     
    Function degressif(Dureedevie As Integer, dateAcquis As Date, valeur As Integer) As Integer
     
    'Création d'un tableau 
     
    Dim debut_count As Integer
    Dim nb_annees_amt As Integer
    Dim i As Integer
    Dim total As Double
    Dim duree_amt_deg As Double
     
     
     
    'on définit le nom des colonnes du tableau
    Cells(3, 4) = "Période Restante"
    Cells(4, 4) = Dureedevie
    Cells(3, 5) = "Années"
    Cells(3, 6) = "Base Amt"
    Cells(3, 7) = "Taux Linaire"
    Cells(3, 8) = "Taux degressif"
    Cells(3, 9) = "Annuité"
    Cells(3, 10) = "Valeur nette comptable"
     
    'Complète la valeur d'achat
     
    Cells(4, 5) = Year(dateAcquis)
     
    'Affiche les années d'amortisement restantes
     
    debut_count = 5
    nb_annees_amt = (debut_count + (Dureedevie - 2))
     
        For debut_count = 5 To nb_annees_amt
        Cells(debut_count, 5).Value = Cells(debut_count - 1, 5).Value + 1
        Next debut_count
     
    'Affiche les dotations restantes
     
        For debut_count = 5 To nb_annees_amt
        Cells(debut_count, 4).Value = Cells(debut_count - 1, 4).Value - 1
        Next debut_count
     
    'Affiche le taux linéaire
     
        For debut_count = 4 To nb_annees_amt
        Cells(debut_count, 7).Value = (1 / Cells(debut_count, 4).Value) * 100
        Next debut_count
     
    'Affiche le taux degressif avec prise en compte des taux en fonction de la durée de vie
     
        For debut_count = 4 To nb_annees_amt
     
            If Dureedevie <= 4 Then
            Cells(debut_count, 8).Value = ((1 / Dureedevie * 1.25) * 100)
     
            ElseIf Dureedevie <= 6 Then
            Cells(debut_count, 8).Value = ((1 / Dureedevie * 1.75) * 100)
     
            Else:
            Cells(debut_count, 8).Value = ((1 / Dureedevie * 2.25) * 100)
     
            End If
     
        Next debut_count
     
    'Affiche la base amortissable les annuités et VNC
     
    Cells(4, 6).Value = valeur
     
        For debut_count = 4 To nb_annees_amt
     
            If Cells(debut_count, 8).Value > Cells(debut_count, 7).Value Then
            Cells(debut_count, 9).Value = Cells(debut_count, 6).Value * Cells(debut_count, 8).Value / 100
            Cells(debut_count, 10).Value = Cells(debut_count, 6) - Cells(debut_count, 9)
     
            Else: Cells(debut_count, 9).Value = Cells(debut_count, 6).Value / 100 * Cells(debut_count, 7).Value
            Cells(debut_count, 10).Value = Cells(debut_count, 6) - Cells(debut_count, 9)
     
            End If
     
        Cells(debut_count + 1, 6).Value = Cells(debut_count, 10).Value
     
        Next debut_count
     
     
     
    'Trouve si l'année en cours est dans le tableau d'amortissement
     
     
    duree_amt_deg = Year(Now()) - Year(dateAcquis)
     
    For debut_count = 4 To nb_annees_amt
        If Year(Now()) = Cells(debut_count, 5) Then
     
     
    'Si on trouve l'année en cours dans le tableau alors on ajoute les annuités jusqu'à l'année en cours
     
            For i = 0 To duree_amt_deg
            total = total + Cells(4 + i, 9)
            Next i
     
    'Sinon on ajoute toutes les annuités
     
        Else
            For i = 0 To Dureedevie
            total = total + Cells(4 + i, 9)
            Next i
     
        End If
    Next debut_count
    'On insère le montant des amortissements en fin de périodes
     
    degressif = total
     
    End Function
    Je vous remercie de votre temps et de votre attention.

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 593
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 593
    Par défaut
    Bonjour

    Cela existe déjà il me semble dans Excel : voir les fonctions DB, DDB, VDB

Discussions similaires

  1. [VBA] fonction vba à l'ouverture d'un fichier access
    Par fabiolous dans le forum VBA Access
    Réponses: 3
    Dernier message: 18/05/2007, 17h27
  2. [VBA-E] Equivalent VBA :fonction " = Cellule"
    Par Xaphyr dans le forum Excel
    Réponses: 4
    Dernier message: 01/04/2007, 13h57
  3. [VBA]Fonction 'ajout' en vba sur une table
    Par rico63 dans le forum VBA Access
    Réponses: 15
    Dernier message: 28/03/2007, 17h56
  4. [VBA] Fonction non définie dans l'expression
    Par DREADY dans le forum VBA Access
    Réponses: 17
    Dernier message: 08/03/2007, 17h49
  5. [Excel VBA]fonction dans une cellule qui modifie une autre cellule
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/01/2007, 18h43

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