Erreur Dépassement de capacité

Fermé
sormick - 3 janv. 2017 à 07:39
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 4 janv. 2017 à 11:46
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

yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 Ambassadeur 1 550
3 janv. 2017 à 08:50
peut-être :
dim dif as long
0
Utilisateur anonyme
3 janv. 2017 à 11:12
Bonjour sormick,

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

Cordialement.  :)
0
À 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
Utilisateur anonyme > Sormick
3 janv. 2017 à 20:26
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
Sormick > Sormick
3 janv. 2017 à 20:34
Merci beaucoup !
Je vais essayer de changer le code.
Bonne année 2017!
0
Utilisateur anonyme > Sormick
3 janv. 2017 à 20:37
Bonne année 2017 à toi aussi, et meilleurs vœux !  :)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
3 janv. 2017 à 11:17
bonjour

valeur et type de "t" ?


0
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310 > Sormick
Modifié par michel_m le 4/01/2017 à 09:45
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310 > michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
4 janv. 2017 à 11:46
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
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 Ambassadeur 1 550
3 janv. 2017 à 21:47
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