Excel : Appel de fonction n-fois-->excel perd les pédales

sadar44 Messages postés 2 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 23 septembre 2009 - 23 sept. 2009 à 13:35
sadar44 Messages postés 2 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 23 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:

1 réponse

sadar44 Messages postés 2 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 23 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

le lien est http://www.cijoint.fr/cjlink.php?file=cj200909/cijdjcXRI4.xls
0
Rejoignez-nous