Création d'une fonction VBA
Bonjour à tous,
J'ai un collègue qui a créer une fonction dans VBA qui marche super bien, le seul problème est lorsque je clique sur un fichier autre que celui où il y a mon fichier ayant la fonction intégrée, je me retrouve avec des "#VALEUR!" je me demandais si il existait un moyen d'éviter ce problème (comme avec n'importe quelle fonction d'excel).
Lorsque je suis sur un autre fichier excel
Quand je suis sur le fichier avec la fonction en question
Public Function EstGoviesHorsEU(ISIN As String) As Boolean
Application.Volatile
EstGoviesHorsEU = False
dern_ligne = Sheets("OBLIGATIONS EN DIRECT").Range("P4").End(xlDown).Row
If dern_ligne > 10000 Then
Exit Function
End If
For i = 0 To dern_ligne
If Sheets("OBLIGATIONS EN DIRECT").Range("P4").Offset(i, 0).Value = ISIN Then
EstGoviesHorsEU = True
Exit For
End If
Next i
End Function
Public Function EstGoviesEU(ISIN As String) As Boolean
Application.Volatile
EstGoviesEU = False
dern_ligne = Sheets("OBLIGATIONS EN DIRECT").Range("Q4").End(xlDown).Row
If dern_ligne > 10000 Then
Exit Function
End If
For i = 0 To dern_ligne
If Sheets("OBLIGATIONS EN DIRECT").Range("Q4").Offset(i, 0).Value = ISIN Then
EstGoviesEU = True
Exit For
End If
Next i
End Function
Public Function EstDansCovered(ISIN As String) As Boolean
Application.Volatile
EstDansCovered = False
dern_ligne = Sheets("OBLIGATIONS EN DIRECT").Range("R4").End(xlDown).Row
If dern_ligne > 10000 Then
Exit Function
End If
For i = 0 To dern_ligne
If Sheets("OBLIGATION EN DIRECT").Range("R4").Offset(i, 0).Value = ISIN Then
EstDansCovered = True
Exit For
End If
Next i
End Function
Public Function ChocSpread(NotationCredit As Integer, duration As Double, EstGoviesHorsEur As Boolean, EstGoviesEur As Boolean, IsCovered As Boolean) As Double
Application.Volatile
If EstGoviesEur = True Then
ChocSpread = 0
Exit Function
End If
If duration < 1 Then
duration = 1
End If
If IsCovered And NotationCredit < 2 Then
If NotationCredit = 0 Then
If duration <= 5 Then
ChocSpread = 0.007 * duration
Else
ChocSpread = 0.035 + 0.005 * (duration - 5)
End If
Else
If duration <= 5 Then
ChocSpread = 0.009 * duration
Else
ChocSpread = 0.045 + 0.006 * (duration - 5)
End If
End If
Else
If NotationCredit = 0 Then
If duration <= 5 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.009 * duration
Else
ChocSpread = 0
End If
ElseIf duration > 5 And duration <= 10 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.045 + 0.005 * (duration - 5)
Else
ChocSpread = 0
End If
ElseIf duration > 10 And duration <= 15 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.07 + 0.005 * (duration - 10)
Else
ChocSpread = 0
End If
ElseIf duration > 15 And duration <= 20 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.095 + 0.005 * (duration - 15)
Else
ChocSpread = 0
End If
Else
If Not EstGoviesHorsEur Then
ChocSpread = WorksheetFunction.Min(0.12 + 0.005 * (duration - 20), 1)
Else
ChocSpread = 0
End If
End If
ElseIf NotationCredit = 1 Then
If duration <= 5 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.011 * duration
Else
ChocSpread = 0
End If
ElseIf duration > 5 And duration <= 10 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.055 + 0.006 * (duration - 5)
Else
ChocSpread = 0
End If
ElseIf duration > 10 And duration <= 15 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.085 + 0.005 * (duration - 10)
Else
ChocSpread = 0
End If
ElseIf duration > 15 And duration <= 20 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.11 + 0.005 * (duration - 15)
Else
ChocSpread = 0
End If
Else
If Not EstGoviesHorsEur Then
ChocSpread = WorksheetFunction.Min(0.135 + 0.005 * (duration - 20), 1)
Else
ChocSpread = 0
End If
End If
ElseIf NotationCredit = 2 Then
If duration <= 5 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.014 * duration
Else
ChocSpread = 0.011 * duration
End If
ElseIf duration > 5 And duration <= 10 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.07 + 0.007 * (duration - 5)
Else
ChocSpread = 0.055 + 0.006 * (duration - 5)
End If
ElseIf duration > 10 And duration <= 15 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.105 + 0.005 * (duration - 10)
Else
ChocSpread = 0.0844 + 0.005 * (duration - 10)
End If
ElseIf duration > 15 And duration <= 20 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.13 + 0.005 * (duration - 15)
Else
ChocSpread = 0.109 + 0.005 * (duration - 15)
End If
Else
If Not EstGoviesHorsEur Then
ChocSpread = WorksheetFunction.Min(0.155 + 0.005 * (duration - 20), 1)
Else
ChocSpread = 0.134 + 0.005 * (duration - 20)
End If
End If
ElseIf NotationCredit = 3 Then
If duration <= 5 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.025 * duration
Else
ChocSpread = 0.014 * duration
End If
ElseIf duration > 5 And duration <= 10 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.125 + 0.015 * (duration - 5)
Else
ChocSpread = 0.07 + 0.007 * (duration - 5)
End If
ElseIf duration > 10 And duration <= 15 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.2 + 0.01 * (duration - 10)
Else
ChocSpread = 0.105 + 0.005 * (duration - 10)
End If
ElseIf duration > 15 And duration <= 20 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.25 + 0.01 * (duration - 15)
Else
ChocSpread = 0.13 + 0.005 * (duration - 15)
End If
Else
If Not EstGoviesHorsEur Then
ChocSpread = WorksheetFunction.Min(0.3 + 0.005 * (duration - 20), 1)
Else
ChocSpread = 0.155 + 0.005 * (duration - 20)
End If
End If
ElseIf NotationCredit = 9 Then
If duration <= 5 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.03 * duration
Else
ChocSpread = 0.03 * duration
End If
ElseIf duration > 5 And duration <= 10 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.15 + 0.017 * (duration - 5)
Else
ChocSpread = 0.15 + 0.017 * (duration - 5)
End If
ElseIf duration > 10 And duration <= 15 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.235 + 0.012 * (duration - 10)
Else
ChocSpread = 0.235 + 0.012 * (duration - 10)
End If
ElseIf duration > 15 And duration <= 20 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.235 + 0.012 * (duration - 10)
Else
ChocSpread = 0.235 + 0.012 * (duration - 10)
End If
Else
If Not EstGoviesHorsEur Then
ChocSpread = WorksheetFunction.Min(0.355 + 0.005 * (duration - 20), 1)
Else
ChocSpread = WorksheetFunction.Min(0.355 + 0.005 * (duration - 20), 1)
End If
End If
ElseIf NotationCredit = 4 Then
If duration <= 5 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.045 * duration
Else
ChocSpread = 0.025 * duration
End If
ElseIf duration > 5 And duration <= 10 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.225 + 0.025 * (duration - 5)
Else
ChocSpread = 0.125 + 0.015 * (duration - 5)
End If
ElseIf duration > 10 And duration <= 15 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.35 + 0.018 * (duration - 10)
Else
ChocSpread = 0.2 + 0.01 * (duration - 10)
End If
ElseIf duration > 15 And duration <= 20 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.44 + 0.005 * (duration - 15)
Else
ChocSpread = 0.25 + 0.01 * (duration - 15)
End If
Else
If Not EstGoviesHorsEur Then
ChocSpread = WorksheetFunction.Min(0.466 + 0.005 * (duration - 20), 1)
Else
ChocSpread = 0.3 + 0.005 * (duration - 20)
End If
End If
Else
If duration <= 5 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.075 * duration
Else
ChocSpread = 0.045 * duration
End If
ElseIf duration > 5 And duration <= 10 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.375 + 0.042 * (duration - 5)
Else
ChocSpread = 0.225 + 0.025 * (duration - 5)
End If
ElseIf duration > 10 And duration <= 15 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.585 + 0.005 * (duration - 10)
Else
ChocSpread = 0.35 + 0.018 * (duration - 10)
End If
ElseIf duration > 15 And duration <= 20 Then
If Not EstGoviesHorsEur Then
ChocSpread = 0.61 + 0.005 * (duration - 15)
Else
ChocSpread = 0.44 + 0.005 * (duration - 15)
End If
Else
If Not EstGoviesHorsEur Then
ChocSpread = WorksheetFunction.Min((63.5 / 100) + (0.5 / 100) * (duration - 20), 1)
Else
ChocSpread = 0.465 + 0.005 * (duration - 20)
End If
End If
End If
End If
End FunctionMerci pour votre aide,
Bonne journée !
Bonjour,
D'après Microsoft il semblerait qu'il y ait un problème de référence. La fonction fait référence à une feuille nommée OBLIGATIONS EN DIRECT et les colonnes P, Q, R de cette même feuille. Est-ce que votre fichier est construit avec ces références?
Bonjour à tous,
Le fichier joint est une macro complémentaire contenant vos fonctions :
Par principe, le fichier est à mettre dans votre répertoire des macros complémentaires prédéfini mais il est possible que vous n'ayez pas les droits administrateurs. Dans ce cas voir avec votre administrateur. Ou mettez le fichier dans le répertoire de votre choix si votre administrateur n'a pas restreint les paramètres de sécurité.
Pour l'utiliser, aller dans le menu Excel Options/ Complément / Atteindre et cocher le fichier. Valider puis fermer Excel et le rouvrir.
Normalement, vos fonctions doivent être accessibles.