Mon problème le suivant : j'ai une fonction qui effectue un calcul de date
de fin (workday) qui fonctionnen très bien de manière nominal mais qui,
appelée de manière récursive, se met à ne plus fonctionner.
Et très honêtement, je ne vois pas ce qui cloche
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
FS
Bonjour,
Je ne comprends pas trop ce que cherche à faire ta fonction mais je ne vois pas à quel moment (dans le code) elle serait récursive (elle ne s'appelle pas elle-même). Je suppose que ce qui cloche apparaît quand tu l'appelles dans une boucle ? Ce que tu cherches à faire ayant l'air très spécifique, un petit exemple sur c ou ci joint pourrait sans doute aider à t'aider.
Mon problème le suivant : j'ai une fonction qui effectue un calcul de date de fin (workday) qui fonctionnen très bien de manière nominal mais qui, appelée de manière récursive, se met à ne plus fonctionner.
Et très honêtement, je ne vois pas ce qui cloche
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
Je ne comprends pas trop ce que cherche à faire ta fonction mais je ne
vois pas à quel moment (dans le code) elle serait récursive (elle ne
s'appelle pas elle-même).
Je suppose que ce qui cloche apparaît quand tu l'appelles dans une boucle ?
Ce que tu cherches à faire ayant l'air très spécifique, un petit exemple
sur c ou ci joint pourrait sans doute aider à t'aider.
FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/
Sadar a écrit :
Bonjour,
Mon problème le suivant : j'ai une fonction qui effectue un calcul de date
de fin (workday) qui fonctionnen très bien de manière nominal mais qui,
appelée de manière récursive, se met à ne plus fonctionner.
Et très honêtement, je ne vois pas ce qui cloche
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
Je ne comprends pas trop ce que cherche à faire ta fonction mais je ne vois pas à quel moment (dans le code) elle serait récursive (elle ne s'appelle pas elle-même). Je suppose que ce qui cloche apparaît quand tu l'appelles dans une boucle ? Ce que tu cherches à faire ayant l'air très spécifique, un petit exemple sur c ou ci joint pourrait sans doute aider à t'aider.
Mon problème le suivant : j'ai une fonction qui effectue un calcul de date de fin (workday) qui fonctionnen très bien de manière nominal mais qui, appelée de manière récursive, se met à ne plus fonctionner.
Et très honêtement, je ne vois pas ce qui cloche
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
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
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
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
C'est en effet, à mon avis, ta procédure MAJ qui pose problème. Comme j'ai du mal à comprendre ce qu'elle fait, les noms que tu utilises n'étant pas très parlants pour moi, je ne peux guère t'aider à la modifier. Par contre, il n'y a pas vraiment de problème pour moi dans tes feuilles. Tous les calculs semblent se faire correctement (une fois qu'on a coché l'utilitaire d'analyse). La procédure MAJ perturbe les calculs dans les différents onglets mais un recalcul général (par Ctrl+Alt+F9) rétablit les résultats attendus et supprime les valeurs d'erreur.
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
C'est en effet, à mon avis, ta procédure MAJ qui pose problème. Comme
j'ai du mal à comprendre ce qu'elle fait, les noms que tu utilises
n'étant pas très parlants pour moi, je ne peux guère t'aider à la modifier.
Par contre, il n'y a pas vraiment de problème pour moi dans tes
feuilles. Tous les calculs semblent se faire correctement (une fois
qu'on a coché l'utilitaire d'analyse). La procédure MAJ perturbe les
calculs dans les différents onglets mais un recalcul général (par
Ctrl+Alt+F9) rétablit les résultats attendus et supprime les valeurs
d'erreur.
FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/
Sadar a écrit :
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
C'est en effet, à mon avis, ta procédure MAJ qui pose problème. Comme j'ai du mal à comprendre ce qu'elle fait, les noms que tu utilises n'étant pas très parlants pour moi, je ne peux guère t'aider à la modifier. Par contre, il n'y a pas vraiment de problème pour moi dans tes feuilles. Tous les calculs semblent se faire correctement (une fois qu'on a coché l'utilitaire d'analyse). La procédure MAJ perturbe les calculs dans les différents onglets mais un recalcul général (par Ctrl+Alt+F9) rétablit les résultats attendus et supprime les valeurs d'erreur.
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