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 :

[VBA-E] somme d'heures supérieures à 24h


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut [VBA-E] somme d'heures supérieures à 24h
    Bonjour le forum,

    je travaile actuelle sur une application VBA qui calule des écarts entre deux heures (à l'aide de datediff, timeserial et timevalue). Jusqu'a maintenant je travaillais sur une journée a la fois donc j'utilisais la méthode suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
         If DateDiff("s", date1, date2) < 32767 Then                     'TimeSerial ne peut pas recevoir une valeur superieure a 32767
             diff = TimeSerial(0, 0, DateDiff("s", date1, date2))        'écart en secondes (plus précis mais plus volumineux en chiffres)
         Else
             diff = TimeSerial(0, DateDiff("n", date1, date2), 0)        'écart en minutes
         End If
     
         TpsEtH = TimeValue(TpsEtH) + TimeValue(diff)
    ensuite j'affiche sous excel ma variable tpsEtH. Jusqu'ici tout allait bien

    Maintenant je souhaite faire la meme chose sur un mois, j'ai donc de fortes chances de dépasser un total de 24 h qui engendre donc des erreurs sur les TimeValue...

    j'ai vu que sous excel les additions d'heures sont possibles si on utilise le format [hh]:mm:ss, j'ai donc souhaité réutiliser cette méthode :
    TpsEtHmemo = Application.WorksheetFunction.Sum(Format(TpsEtHmemo, "[hh]:mm:ss"), Format(TpsEtH, "[hh]:mm:ss"))

    mais j'ai alors l'erreur suivante :Impossible de lire la propriété Sum de la classe WorksheetFunction.

    pourtant si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TpsEtHmemo = Application.WorksheetFunction.Sum(Format(TpsEtHmemo, "hh:mm:ss"), Format(TpsEtH, "hh:mm:ss"))
     
    'puis un peu plus loin dans le programme
     
    .Cells(i, colTpsH) = CDbl(TpsEtHmemo)
     .Cells(i, colTpsH).NumberFormat = "[hh]:mm:ss;@"
    la ca fonctionne mais évidemment il tronque les dates supèrieures a 24h a cause de format...

    J'espère avoir été assez clair... Pour résumer je récupère des écarts en heures : 01:02:10, que je souhaite additionner meme si le resultat final dépasse 24h : res= 29:35:12
    Je fais peut etre fausse route! Est ce que quelqu'un pourrait me donner une piste pour me remettre en selle?
    Merci beaucoup

  2. #2
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Par défaut
    J'ai souvent cette erreur la avec le worksheetFunction...Mais je sais pas d'ou ça vient

    Ta fonction est bonne, c'est juste un soucis avec ton worksheetfunction

    Mais sinon au lieu de passer par le worksheetfunction, pourquoi ne pas mettre un '+' tout simplement ça marche pas ? (j'ai pas testé hein )
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  3. #3
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    bon bin j'ai contourné le pb en récupérant avec datediff mon résultat en secondes avec lequel je travaille tout le long de mon programme

    A la fin je divise par (60*60*24) (nb de sec dans une journée) et je l'écris dans ma cellule formatée en date :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    '
    TpsEtH = TpsEtH + Abs(DateDiff("s", date1, date2))
    '
    '
    '
    TpsEtH = TpsEtH / 86400
    '
    .Cells(i, colTpsH) = TpsEtH                                 
    .Cells(i, colTpsH).NumberFormat = "[hh]:mm:ss"
    Merci quand meme pour l'indication : si je peux éviter worksheetfunction comme ici, je le ferais a l'avenir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. somme des heures > 24h
    Par domik dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 14/08/2010, 08h19
  2. format heure supérieure à 24h dans textbox
    Par titemireille dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/02/2008, 11h41
  3. [VBA-E] somme d'une plage dynamique
    Par Ania dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/11/2005, 21h58
  4. [VBA Excel]Somme
    Par ed_dexia dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/10/2005, 15h53
  5. [CR ?] Somme d'heure sous Crystal ?
    Par Peter PARKER dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 17/04/2003, 16h24

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