Bonjour le forum,
J'essaie de faire une fonction avec VBA me permettant de calculer une fraction d'un chiffre en fonction de critères.
J'explique : j'ai un chiffre dans une cellule et sur la même ligne j'ai une suite de cellules colorées vertes, oranges ou rouges. L'idée est de récupérer à la sortie une fraction du chiffre de départ en fonction de la couleur dans chaque cellule qui suit.
J'ai donc créer des variables public pour enregistrer les ratio nécessaires.
Ensuite j'ai une fonction qui transforme la couleur d'une cellule en chiffre.
Et enfin, j'ai la fonction qui me donne le résultat final.
Mon problème est le suivant : la fonction ColorToNumber fonctionne, mais lors de l'éxecution de la fonction Calcul, je n'ai ni le MsgBox "test2", ni le MsgBox ratio(0) qui se lance (non commentés bien sûr), de plus le MsgBox "test" se lance 4 fois.
Je n'ai pourtant aucune boucle, et je ne teste ma fonction que dans une cellule pour l'instant.
Evidemment, la fonction renvoie 0 à la fin de son éxecution.
Quelqu'un saurait-il où se situe le problème ? J'avoue ne pas être très à l'aise avec les tableaux (j'ai appris ça hier), mais je n'ai pas l'impression d'avoir fait une quelconque erreur.
Merci de votre aide.
J'essaie de faire une fonction avec VBA me permettant de calculer une fraction d'un chiffre en fonction de critères.
J'explique : j'ai un chiffre dans une cellule et sur la même ligne j'ai une suite de cellules colorées vertes, oranges ou rouges. L'idée est de récupérer à la sortie une fraction du chiffre de départ en fonction de la couleur dans chaque cellule qui suit.
J'ai donc créer des variables public pour enregistrer les ratio nécessaires.
Code:
Public Const ratio1 As String = "0.005;0.01;0.05"
Public Const ratio2 As String = "0.005;0.01;0.05"
Public Const ratio3 As String = "0.005;0.01;0.05"
Ensuite j'ai une fonction qui transforme la couleur d'une cellule en chiffre.
Code:
Function ColorToNumber(ByVal target As Range) As Integer
Select Case target.Interior.ColorIndex
Case 3
ColorToNumber = 1
Case 45
ColorToNumber = 2
Case 4
ColorToNumber = 3
End Select
End Function
Et enfin, j'ai la fonction qui me donne le résultat final.
Code:
Function Calcul() As Double
Dim lig As Integer
lig = Application.Caller.Rows
Dim Ws As Worksheet
Set Ws = Application.Caller.Parent
Dim nb(0 to 2) As Integer
Dim ratio(0 to 2) As Double
'MsgBox "test"
nb(0) = ColorToNumber(Ws.Cells(lig, 4))
'MsgBox "test2"
nb(1) = ColorToNumber(Ws.Cells(lig, 5))
nb(2) = ColorToNumber(Ws.Cells(lig, 6))
ratio(0) = Split(ratio1, ";")(nb(0))
'MsgBox ratio(0)
ratio(1) = CDbl(Split(ratio2, ";")(nb(1)))
ratio(2) = CDbl(Split(ratio3, ";")(nb(2)))
Calcul = Ws.Cells(lig, 3).Value * (ratio(0) + ratio(1) + ratio(2))
End Function
Mon problème est le suivant : la fonction ColorToNumber fonctionne, mais lors de l'éxecution de la fonction Calcul, je n'ai ni le MsgBox "test2", ni le MsgBox ratio(0) qui se lance (non commentés bien sûr), de plus le MsgBox "test" se lance 4 fois.
Je n'ai pourtant aucune boucle, et je ne teste ma fonction que dans une cellule pour l'instant.
Evidemment, la fonction renvoie 0 à la fin de son éxecution.
Quelqu'un saurait-il où se situe le problème ? J'avoue ne pas être très à l'aise avec les tableaux (j'ai appris ça hier), mais je n'ai pas l'impression d'avoir fait une quelconque erreur.
Merci de votre aide.