Erreur Dépassement de capacité

sormick -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

j'ai un code VBA qui me permet de calculer le Temps écoulé en Heures/Minutes/Secondes.
Mais Parfois j'ai l'Erreur suivante (Dépassement de Capacité)
Est t'il possible d'éviter ce type d'Erreur?
Voici mon code:

Dim mnt As Date
mnt = Now()
Dif = DateDiff("s", t, mnt) ' diff en secondes
H = Dif \ 3600 ' nb Heures
M = (Dif Mod 3600) \ 60 ' nb Minutes
S = Dif Mod 60 ' Nb secondes
res = CDate(H & ":" & M & ":" & S)
Me.Label2.Caption = res


4 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    peut-être :
    dim dif as long
    0
  2. Utilisateur anonyme
     
    Bonjour sormick,

    Pourquoi « \ 3600 » et « \ 60 » ?
    Il me semble que ça devrait plutôt
    être « / 3600 » et « / 60 », non ?

    Cordialement.  :)
    0
    1. Sormick
       
      À vrai dire je suis Une bille en calculs :) ce code
      « \ 3600 » et « \ 60 »
      Avait bien l'air de fonctionner lorsque je l'ai testé
      Il me donne le temps écoulé en heures/minutes/secondes
      0
      1. Utilisateur anonyme > Sormick
         
        Non, ce n'est pas ça : le signe « / » est pour la division, et ce signe « \ » n'est pas
        un opérateur valide en VBA Excel ; mais dans d'autres langages, il peut signifier
        « division entière » : on divise, et on prend la partie entière du résultat.
        L'équivalent VBA Excel est donc : Int(a / b)
        0
      2. Sormick > Sormick
         
        Merci beaucoup !
        Je vais essayer de changer le code.
        Bonne année 2017!
        0
      3. Utilisateur anonyme > Sormick
         
        Bonne année 2017 à toi aussi, et meilleurs vœux !  :)
        0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    bonjour

    valeur et type de "t" ?

    0
    1. Sormick
       
      La valeur t est une valeur du type
      Global t as date
      T= now()

      Je pense que c'est cette variable qui pose le problème
      0
      1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320 > Sormick
         
        Bonjour
        tu écris
        t=now() ?
        et dans ton code
        mnt = Now()
        Dif = DateDif("s", t, mnt)
        donc...

        maquette "qui marche"
        avec Mnt écris dans A1 pour tester la macro
        Abs permet de mesurer la différence absolue entre Mnt antérieur ou postérieure à Now()

        Option Explicit
        Sub ccm()
        Dim Mnt As Date, T As Date, Dif As Long
        Mnt = Range("A1")
        T = Now()
        Dif = Abs(DateDiff("s", Mnt, T)) ' diff en secondes
        MsgBox Dif
        End Sub
        0
      2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320 > michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention  
         
        petite remarque pour le fun

        Dif étant du type long soit un max positif de 2147483647 (négatif: -2147483646)
        Dif ne peut être supérieur à 24855,13481

        soit pour T=1/1/1900

        un moment maxi à 18/1/1968 3:14
        soit un peu plus de 68 ans
        au delà dépassement de capacité de Dif
        0
  4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    Je te propose ceci:
    dim h as long, m as integer, s as integer
    h = Int(24 * (mnt - t))
    m = Int(60 * (24 * (mnt - t) - h))
    s = Round(60 * (60 * (24 * (mnt - t) - h) - m), 0)
    0