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

image

Quand je suis sur le fichier avec la fonction en question

image
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 Function

Merci 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.

Rechercher des sujets similaires à "creation fonction vba"