Bonjour à tous
Je sais même pas comment expliquer ce problème.
En gros, pour des tableaux de reporting, je dois récupérer une valeur d'un autre classeur pour pouvoir attribuer une prime ou une régulation de prime.
Pour se faire, j'ai crée une fonction (sachant que l'execute4macro ne marche pas au bureau -_-).
La valeur devant être récupérée est la valeur d'un objectif de réalisation par rapport au mois précédent, dans des fichiers historiques.
Exemple:
Année 2008, mois de février = récupération de la valeur du mois de janvier 2008
Année 2008, mois de janvier = récupération de la valeur du mois de décembre 2007
Ma fonction fait les étapes suivantes:
Récupération de la ligne et de la colonne de la cellule active
Récupération de la variable Annee
Récupération de la variable Mois
On crée et on instancie une variable objet classeur qui référence le classeur d'origine.
Test de la variable Mois (pour vérifier si janvier) puis test de la variable Annee (n'est pris en compte qu'à partir de 2008)
Je récupère le chemin d'accès au classeur historique qui m'intéresse, je l'ouvre, je prends la valeur dans une variable, et pour finir, je retourne cette variable.
Tout marche !
Ou presque. Il me retourne systématiquement #valeur!
Pourtant, sur la dernière ligne de la fonction, je récupère bien ma valeur
Je ne peux pas mettre de fichiers joints car trop lourd, mais je peux mettre le code de ma fonction:
Bon, je crois que tout est dit.
Je remercie d'avance tous ceux qui pourront m'aider, et si vous avez des questions, n'hésitez pas.
Thomas
Je sais même pas comment expliquer ce problème.
En gros, pour des tableaux de reporting, je dois récupérer une valeur d'un autre classeur pour pouvoir attribuer une prime ou une régulation de prime.
Pour se faire, j'ai crée une fonction (sachant que l'execute4macro ne marche pas au bureau -_-).
La valeur devant être récupérée est la valeur d'un objectif de réalisation par rapport au mois précédent, dans des fichiers historiques.
Exemple:
Année 2008, mois de février = récupération de la valeur du mois de janvier 2008
Année 2008, mois de janvier = récupération de la valeur du mois de décembre 2007
Ma fonction fait les étapes suivantes:
Récupération de la ligne et de la colonne de la cellule active
Récupération de la variable Annee
Récupération de la variable Mois
On crée et on instancie une variable objet classeur qui référence le classeur d'origine.
Test de la variable Mois (pour vérifier si janvier) puis test de la variable Annee (n'est pris en compte qu'à partir de 2008)
Je récupère le chemin d'accès au classeur historique qui m'intéresse, je l'ouvre, je prends la valeur dans une variable, et pour finir, je retourne cette variable.
Tout marche !
Ou presque. Il me retourne systématiquement #valeur!
Pourtant, sur la dernière ligne de la fonction, je récupère bien ma valeur
Je ne peux pas mettre de fichiers joints car trop lourd, mais je peux mettre le code de ma fonction:
Code:
Function RecupObj() As Double
Dim Ligne As Integer
Dim Colonne As Integer
Ligne = ActiveCell.Row
Colonne = ActiveCell.Column
Dim Annee As String
Annee = Format(Sheets("Rem PGT").Range("E4").Value, "YYYY")
Dim Mois As String
Mois = Format(Sheets("Rem PGT").Range("E4").Value, "MM")
'MsgBox (Annee & "-" & Mois)
Dim CheminHistoCourant As String
Dim wbkBase As Workbook
Set wbkBase = ActiveWorkbook
Dim wbkhisto As Workbook
Dim NomFeuille As String
Dim PrimeMP As Double
Dim WB As Workbook
Dim NomComplet As String
If CInt(Mois) > 1 Then
If CInt(Annee) >= 2008 Then
Mois = Right("0" & CStr(CInt(Mois - 1)), 2)
CheminHistoCourant = Sheets("Rem PGT").Range("E13").Value
NomFeuille = Right(ActiveSheet.Cells(1, 1).Value, Len(ActiveSheet.Cells(1, 1).Value) - 5)
'Application.ScreenUpdating = False
NomComplet = CheminHistoCourant & "Histo REM " & Annee & " RE " & NomFeuille & ".xls"
Workbooks.Open Filename:=NomComplet, UpdateLinks:=False
For Each WB In Workbooks
If WB.Name <> wbkBase.Name Then
Set wbkhisto = WB
End If
Next
With wbkhisto
PrimeMP = .Sheets(CInt(Mois) + 1).Cells(Ligne, Colonne).Value
.Close False
End With
'Application.ScreenUpdating = True
RecupObj = PrimeMP
End If
ElseIf CInt(Mois) = 1 Then
Mois = "12"
If CInt(Annee) > 2008 Then
CheminHistoCourant = Sheets("Rem PGT").Range("E13").Value
CheminHistoCourant = Replace(CheminHistoCourant, Annee, CStr(CInt(Annee) - 1))
NomFeuille = Right(ActiveSheet.Cells(1, 1).Value, Len(ActiveSheet.Cells(1, 1).Value) - 5)
'Application.ScreenUpdating = False
NomComplet = CheminHistoCourant & "Histo REM " & Annee & " RE " & NomFeuille & ".xls"
Workbooks.Open Filename:=NomComplet, UpdateLinks:=False
For Each WB In Workbooks
If WB.Name <> wbkBase Then
Set wbkhisto = WB
End If
Next
With wbkhisto
PrimeMP = .Sheets(CInt(Mois) + 1).Cells(Ligne, Colonne).Value
.Close False
End With
'Application.ScreenUpdating = True
RecupObj = PrimeMP
End If
End If
End Function
Bon, je crois que tout est dit.
Je remercie d'avance tous ceux qui pourront m'aider, et si vous avez des questions, n'hésitez pas.
Thomas