Excel : Appel de fonction n-fois-->excel perd les pédales
sadar44
Messages postés2Date d'inscriptiondimanche 23 mars 2008StatutMembreDernière intervention23 septembre 2009
-
23 sept. 2009 à 13:35
sadar44
Messages postés2Date d'inscriptiondimanche 23 mars 2008StatutMembreDernière intervention23 septembre 2009
-
23 sept. 2009 à 21:12
Bonjour,
j'ai une fonction, qui effectue un calcul de date (workday) qui est appelée sur n-lignes et dupliquée sur n-onglets.
Cela fonctionne bien sur l'onglet de départ qui contient la date de référence à partir de laquelle toutes les autres dates se calculent, mais plus on s'éloigne de l'onglet de référence moins ce la donne des résultats probant
Voici ma fonction
Function TargetDate(Charges As Double, Delais As Double, DateDeb As Date) As Date
'Reinit au cas ou les valeurs n'aient pas été chargées
If Int(HMDeb) 0 Then HMDeb (DatePart("h", Range("HDeb")) / 24) + ((DatePart("n", Range("HDeb")) / 24) / 60)
If Int(HMFin) 0 Then HMFin (DatePart("h", Range("HFin")) / 24) + ((DatePart("n", Range("HFin")) / 24) / 60)
'Convertir Heures et Minutes de DateDeb
HMSDate = Round((DatePart("h", DateDeb) / 24) + ((DatePart("n", DateDeb) / 24) / 60), 9)
If Int(Delais) <> 0 Then 'Test pour prendre Charges ou Délais en
TimeSrce = Delais 'TimeSource
Else
TimeSrce = Charges
End If
' Ajouter les jours ....
If Int(TimeSrce) > 0 Then
Debug.Print Application.Caller.Address, DateDeb, Int(TimeSrce)
DateEnd = CDate(Application.Run("ATPVBAEN.XLA!WorkDay", DateDeb, Int(TimeSrce), HoliDays()))
Else
DateEnd = DateValue(DateDeb) 'cas des feuilles vides
End If
' Ajouter les heures....
If Round((TimeSrce - Int(TimeSrce)), 4) <> 0 Then
HTimeSrce = Round((Round((TimeSrce - Int(TimeSrce)), 4) * 8) / 24, 9)
'Debug.Print "HTimeSrce : "; HTimeSrce
EndHour = HMSDate + HTimeSrce
If EndHour > HMFin Then 'Jour + 1 si Heure >= HFin
HSUpp = EndHour - HMFin
Debug.Print DateEnd, "HMFin="; HMFin; " HSupp="; HSUpp
DateEnd = CDate(Application.Run("ATPVBAEN.XLA!WorkDay", DateEnd, 1, HoliDays()))
DateEnd = DateAdd("h", DatePart("h", Range("HDeb")) + DatePart("h", HSUpp), DateEnd)
DateEnd = DateAdd("n", DatePart("n", Range("HDeb")) + DatePart("n", HSUpp), DateEnd)
Else
'Debug.Print "EndHour < HMFin"
DateEnd = DateAdd("h", DatePart("h", EndHour), DateEnd)
DateEnd = DateAdd("n", DatePart("n", EndHour), DateEnd)
End If
Else
DateEnd = DateAdd("h", DatePart("h", HMSDate), DateEnd) ' Sinon, reprendre les heures....
DateEnd = DateAdd("n", DatePart("n", HMSDate), DateEnd) ' de la date orignale ;-))
End If
Debug.Print "TargetDate ==>"; ActiveSheet.Name, Application.Caller.Address, CDate(DateDeb), CDate(DateEnd)
TargetDate = DateEnd
End Function
A voir également:
Excel : Appel de fonction n-fois-->excel perd les pédales
sadar44
Messages postés2Date d'inscriptiondimanche 23 mars 2008StatutMembreDernière intervention23 septembre 2009 23 sept. 2009 à 21:12
Cette fonction est appelée n-fois par lignes et par onglets. Sur l onglet de référence : tache_1, on saisi une semaine de début (F3) et tous les calculs s'enchainent.
Cela fonctionne plutôt bien pour le premier onglet et plus on s'éloigne, plus cela se met à déconner...
L'onglet Total.Charge qui possède un bouton en A2, déclenche un vba qui va lire l'ensemble des onglets et là, va savoir pourquoi, tout se met en erreur