Bonjour à tous.
J'ai un classeur (appelons-le "Data") qui contient plusieurs feuilles. Depuis celles-ci, je fais appel à des procédures se trouvant dans un autre classeur (appelons-le "Programme"), via des boutons par ex, qui affichent des formulaires (ceux-ci sont dans Programme).
J'ai créé une fonction que j'ai placé dans un module de Programme. Celle-ci a 3 arguments correspondant à des plages.
Je place donc l'appel à cette fonction dans certaines feuilles de mon classeur Data.
Par exemple, en plaçant dans des cellules ceci : =Programme!MaFonction((AQ8;11:11;3:3)
Quand je reste sur ma feuille, que je change les valeurs des cellules dépendantes, tout se recalcule bien. En revanche, quand je clique sur un bouton (présent dans la feuille de Data) qui lance un formulaire (de Programme), le résultat de ma fonction me ramène #VALEUR!
Je suppose que c'est parce que ma fonction ne fait pas référence à la feuille et le classeur, mais comment m'en sortir ?
Voici ma fonction :
J'ai un classeur (appelons-le "Data") qui contient plusieurs feuilles. Depuis celles-ci, je fais appel à des procédures se trouvant dans un autre classeur (appelons-le "Programme"), via des boutons par ex, qui affichent des formulaires (ceux-ci sont dans Programme).
J'ai créé une fonction que j'ai placé dans un module de Programme. Celle-ci a 3 arguments correspondant à des plages.
Je place donc l'appel à cette fonction dans certaines feuilles de mon classeur Data.
Par exemple, en plaçant dans des cellules ceci : =Programme!MaFonction((AQ8;11:11;3:3)
Quand je reste sur ma feuille, que je change les valeurs des cellules dépendantes, tout se recalcule bien. En revanche, quand je clique sur un bouton (présent dans la feuille de Data) qui lance un formulaire (de Programme), le résultat de ma fonction me ramène #VALEUR!
Je suppose que c'est parce que ma fonction ne fait pas référence à la feuille et le classeur, mais comment m'en sortir ?
Voici ma fonction :
Code:
Public Function MaFonction(StockC, Besoins, Periodes)
Dim sFeuille, LigCouv, LigStk, LigDemClient, ColJ, LigNbJ_Periode
Set sFeuille = ActiveSheet
If Not IsRange(StockC) _
Or Not IsRange(Besoins) _
Or Not IsRange(StockC) Then Exit Function
LigDemClient = Besoins.Rows(1).Row
LigNbJ_Periode = Periodes.Rows(1).Row
ColJ = StockC.Columns(1).Column
DerniereCol = sFeuille.Cells.Find("*", , , , xlByColumns, xlPrevious).Column
NbJcouvert = 0
Stk = sFeuille.Cells(StockC.Rows(1).Row, ColJ).Value
For col = ColJ + 1 To DerniereCol
NbJ_Travaille = sFeuille.Cells(LigNbJ_Periode, col).Value
If NbJ_Travaille <> 0 Then
BesoinJ = sFeuille.Cells(LigDemClient, col).Value / NbJ_Travaille
Else
BesoinJ = sFeuille.Cells(LigDemClient, col).Value
Stk = Stk - BesoinJ
End If
For n = 1 To NbJ_Travaille
Stk = Stk - BesoinJ
If Stk < 0 Then
Exit For
Else
NbJcouvert = NbJcouvert + 1
End If
If Stk < 0 Then Exit For
Next n
Next col
If Stk >= 0 Then
NbJcouvert = 999
End If
MaFonction = NbJcouvert
End Function