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
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 FunctionQuelqu'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 FunctionAvec
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 FunctionC'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 FunctionJ'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 FunctionEn 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