после учета рекомендаций, которые вы дали мне для моих предыдущих ответов, код работает лучше, но все же не для некоторых диапазонов. Моя проблема возникла из-за неправильного расчета аргумента в функции. Фактически, я использую ligne = activecell.row - 8, чтобы получить ligne диапазона для вычисления. Но это работает, если я делаю это вручную, так как активируется фактическая ячейка, но не когда я вызываю функцию много раз, поскольку я не могу активировать каждую ячейку, это будет слишком долго для электронной таблицы.
Какмогу ли я вычислить ligne с правильным адресом ячейки, в которой написана функция?
Надеюсь, я достаточно ясен. Извините за мой английский.
Открытая функция Taux_Mois (ByVal mMois As Range, ByVal sScenario As Range)
Dim ligne As Long
ligne = ActiveCell.row - 8
Select Case (Range("DATA[Flag]").Cells(ligne).Value = 0) Or (Range("DATA[frequence fixing]").Cells(ligne).Value = 0)
Case True
Taux_Mois = 0
Exit Function
Case False
Dim index_taux As Integer
Dim ajust As Long
index_taux = CInt(Range("DATA[Indexation ID]").Cells(ligne).Value)
If index_taux = 1 Then
ajust = 0
Else
Dim ajust1, dernierfixingt0, freqfixing As Integer
dernierfixingt0 = Range("DATA[Dernier fixing t0]").Cells(ligne).Value
freqfixing = Range("DATA[frequence fixing]").Cells(ligne).Value
ajust1 = (Int((mMois.Value - dernierfixingt0) / freqfixing) * freqfixing)
ajust = Worksheets("Market Data").Range("Taux_" & sScenario.Value).Offset(12 + dernierfixingt0 + ajust1, 1 + index_taux).Value
End If
Taux_Mois = Range("DATA[facteur taux (TVA, base)]").Cells(ligne).Value * (ajust + Range("DATA[Spread / Taux]").Cells(ligne).Value / 10000)
Exit Function
End Select
End Function