Bonjour à tous!
J'ai un petit pépin avec ma fonction. En fait je crois que c'est vraiment au niveau que l'argument qu'il y a un problème..
Premièrement, est-il possible de passer comme valeur d'argument un Range de cellule qui sera en fait la même cellule dans laquelle se trouvera cette fonction..
Cette fonction renvoie #REF et je ne comprends pas pourquoi, car si je transforme cette fonction en Procédure , tout semble fonctionner...
Je ne peux malheureusement pas rapidement vous joindre un fichier exemple car il y a trop de données confid.. en fait je voulais simplement savoir si mon passage de ma cellule (Target as Range) comme argument était bien fait selon vous, ou si je m'y prend mal.. Ne vous cassez pas trop la tête avec le reste du code, il ne veut pas dire grand chose sans un fichier exemple..
Je vous laisse le code de la fonction et de la procédure. Merci encore une fois pour vos réflexions à ce sujet!
Passez une bonne fin de journée! A+
J'ai un petit pépin avec ma fonction. En fait je crois que c'est vraiment au niveau que l'argument qu'il y a un problème..
Premièrement, est-il possible de passer comme valeur d'argument un Range de cellule qui sera en fait la même cellule dans laquelle se trouvera cette fonction..
Cette fonction renvoie #REF et je ne comprends pas pourquoi, car si je transforme cette fonction en Procédure , tout semble fonctionner...
Je ne peux malheureusement pas rapidement vous joindre un fichier exemple car il y a trop de données confid.. en fait je voulais simplement savoir si mon passage de ma cellule (Target as Range) comme argument était bien fait selon vous, ou si je m'y prend mal.. Ne vous cassez pas trop la tête avec le reste du code, il ne veut pas dire grand chose sans un fichier exemple..
Je vous laisse le code de la fonction et de la procédure. Merci encore une fois pour vos réflexions à ce sujet!
Passez une bonne fin de journée! A+
Code:
Function RatioATC(ByRef Target As Range) As Integer
Dim myCell As Object
Dim CalculatedRange As Object
Dim x As Integer
Dim StartColumn() As Integer
Dim EndColumn() As Integer
Dim CountEmptyCells As Integer
Dim CountValidation As Integer
Dim CountATC As Integer
ReDim StartColumn(1 To GetName(ThisWorkbook.Names("nGestionnaire")))
ReDim EndColumn(1 To GetName(ThisWorkbook.Names("nGestionnaire")))
For x = 1 To GetName(ThisWorkbook.Names("nGestionnaire"))
StartColumn(x) = F_Calendrier.Range("ZoneAcces_Gestionnaire" & x).Columns(2).Column 'Car la 1er colonne est la BlackColumn qu'on ne doit pas calculer
EndColumn(x) = F_Calendrier.Range("ZoneAcces_Gestionnaire" & x).Columns(1).Column + F_Calendrier.Range("ZoneAcces_Gestionnaire" & x).Columns.Count - 1
Next x
CountEmptyCells = 0
CountValidation = 0
CountATC = 0
For x = 1 To GetName(ThisWorkbook.Names("nGestionnaire"))
Set CalculatedRange = Range(F_Calendrier.Cells(Target.Row, StartColumn(x)), F_Calendrier.Cells(Target.Row, EndColumn(x)))
For Each myCell In CalculatedRange
If myCell = "" Or myCell.Text = Null Then CountEmptyCells = CountEmptyCells + 1
CountValidation = CountValidation + Application.CountIf(F_Calendrier.Range("Validation"), myCell.Value) - Application.CountIf(myCell, "ATC")
CountATC = CountATC + Application.CountIf(myCell, "ATC")
Next myCell
Next x
RatioATC = (CountEmptyCells - CountValidation) / CountATC
End Function
Code:
Private Sub testRatioATC()
Dim Target As Object
Dim myCell As Object
Dim CalculatedRange As Object
Dim x As Integer
Dim StartColumn() As Integer
Dim EndColumn() As Integer
Dim CountEmptyCells As Integer
Dim CountValidation As Integer
Dim CountATC As Integer
Dim RatioATC As Integer
ReDim StartColumn(1 To GetName(ThisWorkbook.Names("nGestionnaire")))
ReDim EndColumn(1 To GetName(ThisWorkbook.Names("nGestionnaire")))
Set Target = F_Calendrier.Range("DI4")
For x = 1 To GetName(ThisWorkbook.Names("nGestionnaire"))
StartColumn(x) = F_Calendrier.Range("ZoneAcces_Gestionnaire" & x).Columns(2).Column 'Car la 1er colonne est la BlackColumn qu'on ne doit pas calculer
EndColumn(x) = F_Calendrier.Range("ZoneAcces_Gestionnaire" & x).Columns(1).Column + F_Calendrier.Range("ZoneAcces_Gestionnaire" & x).Columns.Count - 1
Next x
CountEmptyCells = 0
CountValidation = 0
CountATC = 0
For x = 1 To GetName(ThisWorkbook.Names("nGestionnaire"))
Set CalculatedRange = Range(F_Calendrier.Cells(Target.Row, StartColumn(x)), F_Calendrier.Cells(Target.Row, EndColumn(x)))
For Each myCell In CalculatedRange
If myCell = "" Or myCell.Text = Null Then CountEmptyCells = CountEmptyCells + 1
CountValidation = CountValidation + Application.CountIf(F_Calendrier.Range("Validation"), myCell.Value) - Application.CountIf(myCell, "ATC")
CountATC = CountATC + Application.CountIf(myCell, "ATC")
Next myCell
Next x
RatioATC = (CountEmptyCells - CountValidation) / CountATC
MsgBox RatioATC
End Sub