Code VBA pour fonction personnalisée

Bonjour,

Après avoir établi une formule Excel (dont j'ai eut du mal à en voir le bout) j'aimerai pouvoir l'utiliser en tant que fonction personnalisé. Cette fonction permettrait d'obtenir l'amortissement d'un montant en fonction de l'année demandé. (Ca se trouve... Il existe déjà une formule Excel qui me le permettait et ma fonction n'est donc peut-être pas du tout utile...

Je vous joins le fichier pour que ce soit plus explicite. Pourriez-vous donc me dire si :

1) Ma fonction écrite en colonne AF et AG est-elle utile ou pourrait-elle être remplacée par une fonction déjà existante?

2) Est-il possible de mettre cette fonction en code VBA? Si oui pourriez-vous m'aider ?

3) Excel est mon ami, VBA beacoup moins... des sites/fichiers m'interesseraient pour apprendre.

Merci d'avance, bonne journée,

Alex

48amts.xlsx (172.31 Ko)

Il existe une panoplie de fonctions financière mais impossible de trouver ce qu'il me faut ( ou alors j'aurai peut-être pu en transformer une pour l'adapter à ma situation.

Je crains ici avoir besoin d'un code VBA... Pensez-vous que celui-ci est difficile à faire ?

Function Amortissements(Début,Montant,Fin,Année)
    ...
    ...
End Function

Quelqu'un pourrait il m'avancer un peu ?

Merci d'avance.

Alex

Dans ma fonction qui est : =SI(ANNEE($F3)>AG$2;0;SI(ANNEE($F3)=AG$2;(CONCATENER("31/12/";AG$2)-$D3)/(30*$G3)*$E3;SI(ANNEE(($F3+$G3*30))<AG$2;0;SI(ANNEE($F3+$G3*30)=AG$2;$E3*(12/$G3)-(CONCATENER("31/12/";ANNEE($D3))-$D3)/(30*$G3)*$E3;$E3*12/$G3))))

Comment peut-on traduire "CONCATENER" en VBA ? Y'a t-il d'autres particularités à programmer à par des If ?

Function Amortissement(Montant,Debut,Duree,Annee)
If '(l'année de début)' Debut > Annee Then
Amortissement = 0 Else
If Debut(annee) = Annee Then 
Amortissement = ((CONCATENER("31/12/";Annee) - Debut) / (30,5 * Duree) * Montant Else
If ( Debut(annee) + Duree * 30,5 ) < Annee Then
Amortissement = 0 Else
If ( Debut(annee) + Duree * 30,5 ) = Annee Then
Amortissement = Montant * (12/Duree) - ((CONCATENER("31/12/";Debut(année)) - Debut) / (30,5 * Duree) * Montant Else
Amortissement = (Montant * 12 / Duree)

End If
End If
End If
End If
End If
End Function

Avec

Montant : Montant de l'amortissement

Debut : Date du début de l'amortissement

Duree : La durée de l'amortissement

Annee : Année à laquelle on veut connaître l'amortissement.

Avec 30.5 pour moyenne jours par mois. J'ai laissé mes problèmes de concatenation au moment où je ne veux que l'année de début et non la date entière ? Je crois qu'il faut mettre un & mais pas sur.. Et la fonction =Année(...) sous VBA se traduit comment ?

Me conseillez-vous de procéder autrement ? Pourriez-vous m'aider à codifier en partie ou me corriger ?

Merci d'avance.

Amicalement

Alex

-- 10 Mai 2011, 11:07 --

Function Amortissement(Montant, Debut, Duree, Annee) As Double
If Year(Debut) > Annee Then
Amortissement = 0
Else
If Debut(Annee) = Annee Then
Amortissement = "31/12/" & Annee - Debut / (30.5 * Duree) * Montant
Else
If (Year(Debut) + Duree * 30.5) < Annee Then
Amortissement = 0
Else
If (Year(Debut) + Duree * 30.5) = Annee Then
Amortissement = Montant * (12 / Duree) - "31/12/" & Year(Debut) - Debut / (30.5 * Duree) * Montant
Else
Amortissement = (Montant * 12 / Duree)

End If
End If
End If
End If
End If
End Function

C'est mon nouveau code. Peut-être que là vous pourriez m'aider à voir ce qui ne va pas ? Dois-je donner un type d''argument à chaque ? Un argument pour la fonction ?

Merci,

Alex

Bonjour,

Dans le tableau ligne 3 :

Montant = E3 ?

Debut = F3 ?

Duree = G3 ?

Annee = AF2 ?

Quelle formule as-tu en AF3 avec ce code ?

Amicalement

C'est bien ça.

Ma formule en AF3 :

=SI(ANNEE($F3)>AG$2;0;SI(ANNEE($F3)=AG$2;(CONCATENER("31/12/";AG$2)-$D3)/(30*$G3)*$E3;SI(ANNEE(($F3+$G3*30))<AG$2;0;SI(ANNEE($F3+$G3*30)=AG$2;$E3*(12/$G3)-(CONCATENER("31/12/";ANNEE($D3))-$D3)/(30*$G3)*$E3;$E3*12/$G3))))

Function Amortissement(Montant As Long, Debut As String, Duree As Byte, Annee As Long) As Long
If Year(Debut) > Annee Then
Amortissement = 0
Else
If Year(Debut) = Annee Then
Amortissement = ("31/12/" & Annee - Debut / (30.5 * Duree) * Montant)
Else
If (Year(Debut) + Duree * 30.5) < Annee Then
Amortissement = 0
Else
If (Year(Debut) + Duree * 30.5) = Annee Then
Amortissement = Montant * (12 / Duree) - "31/12/" & Year(Debut) - Debut / (30.5 * Duree) * Montant
Else
Amortissement = (Montant * 12 / Duree)

End If
End If
End If
End If

End Function

J'avance mais ce n'est pas encore ça ^^ Que dois-je modifier pour obtenir tout les cas possible ? Car lorsque je l'utilise soit le résultat de l'amortissement = le montant soit = 0 ...

Autres questions qui n'a rien à voir ... Je fais très régulièrement des TCD et j'aimerai savoir si il est possible des paramètres de champs de valeurs par défauts ? En effet, je n'ai besoin que du Somme avec en format de nombre "nombre + séparateurs de milliers"

Merci d'avance

Re,

essaie comme ceci :

Function Amortissement(Montant As Currency, Debut As Date, Duree As Integer, Annee As Integer) As Currency
'Macro Modifiée par Dan le 11/05/2011
If Year(Debut) > Annee Then
Amortissement = 0
Else
If Year(Debut) = Annee Then
Amortissement = CInt(CDate("31/12/" & Year(Debut)) - Debut) / (30.5 * Duree) * Montant
Else
If Year((Debut) + Duree * 30.5) < Annee Then
Amortissement = 0
Else
If Year((Debut) + Duree * 30.5) = Annee Then
Amortissement = Montant * (12 / Duree) - CInt(CDate("31/12/" & Year(Debut)) - Debut) / (30.5 * Duree) * Montant
Else
Amortissement = Montant * 12 / Duree
End If
End If
End If
End If
End Function

En AF3 mets cette formule à étirer vers le bas (puis à droite pour 2010)--> =amortissement($E3;$F3;$G3;AF$2)

Amicalement

Merci beaucoup, c'est parfait !

A bientôt

Alex

Rechercher des sujets similaires à "code vba fonction personnalisee"