IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Fonction récursive qui ne fonctionne pas


Sujet :

Macros et VBA Excel

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Par défaut Fonction récursive qui ne fonctionne pas
    Bonjour,

    Mon problème est le suivant : j'effectue des calculs de dates en enchainant les calculs les uns aux autres.

    Disons, que par ligne cela représente
    • en regard d'un délai et d'une charge : une date de début, une date de fin
    • une date de début en reprévision et une date de fin en reprévision

    Par feuille une trentaine de lignes et 11 feuilles en tout.

    La première feuille donne la semaine de départ, ce qui permet le calcul des dates de départ des autres feuilles qui sont liées....(notion de tâches qui s'enchainent en quelque sorte)

    Bref, cela ressemble à une gestion de planning prenant en compte, les jours fériés, les heures ouvrées rien d'original ni extraordinaire, sauf que !

    La fonction qui me permet de calculer la date de fin fonctionne bien de manière unitaire et se met à déconner lorsqu'elle est appelée de manière récursive....

    Après y avoir passé plusieurs heures et tenter diverses méthodes je me décide à appeler à l’aide

    Voir fichier en PJ pour plus de compréhension (saisir la semaine de départ sur l'onglet tache_1 en F3)

    une copie de la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    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
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. fonction confirm() qui ne fonctionne pas sur IE7
    Par JackBeauregard dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/06/2008, 09h47
  2. Fonction mysql qui ne fonctionne pas pour un ancien postgreIste
    Par floreasy dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 15/01/2008, 18h49
  3. Fonction récursive qui ne renvoie pas le résultat
    Par mathieugamin dans le forum Langage
    Réponses: 4
    Dernier message: 05/11/2007, 10h29
  4. [SQL] Fonction SUM qui ne fonctionne pas !
    Par nigg4z dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 11/10/2007, 16h20
  5. Fonction While {} qui ne fonctionne pas
    Par zoom61 dans le forum Langage
    Réponses: 3
    Dernier message: 15/11/2006, 12h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo