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 :

Tableau d'amortissement VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 48
    Par défaut Tableau d'amortissement VBA
    Bonjour à tous,

    Je souhaite créer un tableau d'amortissement en VBA (type actuariel, c'est-à-dire que l'amortissement doit être recalculé à la fin de chaque mois) et je me retrouve avec le code suivant (et une erreur de syntaxe avec la ligne en gras) :

    avec C11 : date de valeur (début de l'amortissement)
    C12 : date d'échéance (fin de l'amortissement)

    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
    Sub Amortissement()
    i = 0
    
    With Sheets("liste des opérations")
    
    
    Set plage_amort = Range(.[A8], .[A8].End(xlDown))
    
    'demander à lutilisateur le numéro dopération à amortir
    operation = InputBox("Veuillez entrer le numéro d'opération à amortir", "Amortissements")
    
    'vérification de lexistence du numéro dans la liste des opérations disponibles
    For Each cell In plage_amort
            If cell.FormulaR1C1 = operation Then i = i + 1
    Next cell
    
            If i = 0 Then MsgBox ("Cette opération n'existe pas")
    
            If i <> 0 Then
            Sheets("tableau d'amortissement").Select
            Range("C5").Select
            ActiveCell.FormulaR1C1 = operation
    
        With Sheets("tableau d'amortissement")
        .[B16].FormulaR1C1 = .[C11]
    
        'calculer le nombre de mois entre la date déchéance et la date de valeur
        compteur = (.[C12] - .[C11])/30
    
        'commencer léchéancier à la cellule B17 jusqua echeance
        For j = 17 To compteur
        .[B&j] = [date(year(B&(j-1)),month(B&(j-1))+1,Day(B&(j-1))]
        Next j
        End With
        
    End If
    
    End With
    
    End Sub

    J'obtiens une erreur type 424, il n'est pas possible d'employer une variable j dans ce type de formule ?

    Par ailleurs, ma seconde question est de savoir s'il est possible de faire en sorte de distinguer les mois à 31 et 30 jours; car mon code ne fait qu'incrémenter d'un mois la date d'arrêté d'amortissement (la formule de calcul est dans une autre cellule et n'entre pas dans le code VBA) mais ne prend pas en compte les jours exacts et ne prend pas en compte non plus que la date d'échéance puisse être un jour du mois quelconque (le code s'arrête à la fin du mois en question).
    Je vous laisse le fichier en pièce jointe.

    D'avance merci à tous !
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 48
    Par défaut Exemple
    Re-bonjour à tous,

    Je vous laisse un exemple, je me rends compte que je n'ai peut-être pas été assez clair sur ce qui me bloque.

    Imaginons un emprunt à amortir sur une période : de la date de valeur (15/03/2012) à la date d'échéance (21/07/2012), nous obtenons donc l'échéancier suivant (qui s'arrête à chaque fin de mois) :
    - 31/03/2012
    - 30/04/2012
    - 31/05/2012
    - 30/06/2012
    - 21/07/2012
    Le calcul de l'amortissement est lui relativement simple et inutile d'intégrer au code.

    Est-il possible de faire une macro qui suive rigoureusement l'échéancier ? (qui commence à la fin du mois de la date de valeur, qui s'arrête à la date d'échéance et qui distingue les mois à 30 et 31 jours voire le mois de février aussi si ce dernier est concerné) ?

    Ma ligne de code suivante comporte une erreur "424 objet requis" (et ne prend bien évidemment pas en compte l'échéancier, je ne fais qu'incrémenter d'un mois à chaque fois en partant de la cellule B17) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        For j = 17 To compteur
        .[B&j] = [date(year(B&(j-1)),month(B&(j-1))+1,Day(B&(j-1))]
        Next j
    Quelqu'un aurait-il une idée pour m'aider ? Merci à vous

  3. #3
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,

    tu ne peu pas utiliser ta syntaxe à base de crochets "[" ... ainsi ...

    utilise plutôt un object .Cells(Ligne,Colonne)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    .Cells(j,2) =  ...
    ' B = Colonne 2 ..
    pour le reste du code je comprends pas bien ce que tu fais avec tous ces crochets...

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    As-tu absolument besoin de passer par du code VBA ?
    Il existe des formules natives dans excel qui font cela très bien et qui permettent d'obtenir le résultat en quelques secondes.
    Voir du côté des fonctions de la catégorie des fonctions financières.
    Liste de quelques unes.
    AMORLIN Calcule l’amortissement linéaire d’un bien pour une période donnée.
    AMORLINC Renvoie l’amortissement linéaire complet d’un bien à la fin d’une période fiscale donnée. Cette fonction est destinée à prendre en compte les règles comptables françaises. Si une immobilisation est acquise en cours de période comptable, la règle du prorata temporis s’applique au calcul de l’amortissement.
    AMORDEGRC Renvoie l’amortissement correspondant à chaque période comptable. Cette fonction est destinée à prendre en compte les règles comptables françaises. Si un bien est acquis en cours de période comptable, la règle du prorata temporis s’applique au calcul de l’amortissement. Cette fonction est similaire à la fonction AMORLINC, à ceci près qu’un coefficient d’amortissement est pris en compte dans le calcul, en fonction de la durée de vie du bien

    Sur un autre sujet, il est également possible de connaître le dernier jour du mois avec deux fonctions de la catégorie des fonctions Date.
    1ère fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =FIN.MOIS(AUJOURDHUI();0)
    Renvoie le numéro de série du dernier jour du mois précédant ou suivant date_départ du nombre de mois indiqué. Utilisez FIN.MOIS pour calculer des dates d’échéance ou des dates d’échéance tombant le dernier jour du mois.
    2ème fonction
    La formule DATE permet également de renvoyer le numéro de série du dernier jour du mois qui précède le mois dont le n° est spécifié dans le 2ème argument et ce en donnant la valeur 0 comme 3ème argument.
    Renvoie le 30/11/2012
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 48
    Par défaut
    Re,

    En ce qui concerne les crochets, j'avais lu quelque part sur le net que la syntaxe ci-dessous fonctionnait bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [C1] = [date(year(C1),month(C1)+1,Day(C1))]
    Je vais essayer avec les formules excel disponibles. Je vous tiens au courant si je tourne en rond,

    Merci à vous.

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

Discussions similaires

  1. [XL-MAC 2011] Tableau d'amortissement VBA
    Par ti_mouton dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/10/2014, 23h04
  2. Tableau Amortissements VBA
    Par VBABeginners dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/02/2010, 02h46
  3. [VBA-E] Graphique suite à un tableau d'amortissement
    Par iupien78 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/02/2007, 16h03
  4. [VBA-E]créer un tableau Excel en vba
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 19/01/2006, 17h06
  5. Calul d'amortissements VBA
    Par priest69 dans le forum Access
    Réponses: 7
    Dernier message: 21/11/2005, 10h35

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