Problème d'écart de temps

zeltron24

XLDnaute Impliqué
Bonjour à tous,

Ci joint un fichier avec un chrono que j'ai récupéré et modifié pour mes besoins.
J' ai incorporé des txtbox afin de calculer l'écart entre le premier et les suivants.
Le problème est que le calcul me donne toujours 0

Le code du calcul est le suivant.
Code:
TextBox101.Value = Val(TextBox2.Value) - Val(TextBox1.Value)

Sachant que les TxtBox contiennent des Heures.

Pourriez vous m'aider à trouver le problème. D'avance merci
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Problème d'écart de temps

Bonjour zeltron24.


(...)

Le code du calcul est le suivant.
Code:
TextBox101.Value = Val(TextBox2.Value) - Val(TextBox1.Value)

Pourriez vous m'aider à trouver le problème. (...)
Peut-être... Encore faudrait-il que nous sussions ce que contiennent TextBox1 et TextBox2.
(Un support serait probablement utile.)


ℝOGER2327
#7331


Jeudi 19 Palotin 141 (Occultation de Saint Gauguin, océanide - fête Suprême Quarte)
19 Floréal An CCXXII, 6,4721h - arroche
2014-W19-4T15:31:59Z
 

zeltron24

XLDnaute Impliqué
Re : Problème d'écart de temps

Bonjour Roger,

OUPS, j'ai oublié de mettre le fichier.
Le voici.
 

Pièces jointes

  • Classeur1.xlsm
    41.3 KB · Affichages: 42
  • Classeur1.xlsm
    41.3 KB · Affichages: 53
  • Classeur1.xlsm
    41.3 KB · Affichages: 46

job75

XLDnaute Barbatruc
Re : Problème d'écart de temps

Bonjour zeltron24,

Utilisez ce code et continuez-le :

Code:
Function C(t) 'fonction de conversion des heures des TextBoxes
Dim s
s = Split(t, ":")
C = Val(s(0)) / 24 + Val(s(1)) / 1440 + Val(s(2)) / 86400
End Function

Private Sub BTN_Ligne_Click()
If TxtChrono = "00:00:00.00" Then Exit Sub
If TextBox1 = "" Then
    TextBox1 = TxtChrono
    Else
    If TextBox2 = "" Then
        TextBox2 = TxtChrono
        TextBox101 = Application.Text(C(TextBox2) - C(TextBox1), "hh:mm:ss.00")
        Else
        If TextBox3 = "" Then
            TextBox3 = TxtChrono
            TextBox102 = Application.Text(C(TextBox3) - C(TextBox2), "hh:mm:ss.00")
            Else
            If TextBox4 = "" Then
                TextBox4 = TxtChrono
                TextBox103 = Application.Text(C(TextBox4) - C(TextBox3), "hh:mm:ss.00")
                '---à continuer---
La fonction C de conversion est nécessaire car CDate ne fonctionne pas avec les centièmes de seconde.

Edit : salut à Roger que j'avais oublié.

A+
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Problème d'écart de temps

Re...


C'est plus mieux avec un support.

Je vous dis d'entrée que les formulaires ne sont pas ma spécialité. Par conséquent, ce que je vais raconter sera peut-être amélioré ou contredit par les spécialistes de la chose.

Il me semble que le problème vient du choix de votre format de données. "hh:mm:ss.00" est mal digéré :
Si on écrit
VB:
x = CDate("12:00:00") 'x <-- #12:00:00#
y = CDbl(x) 'x <-- 0,5
on obtient #12:00:00# pour x et 0,5 pour y. Normal.
Mais si on écrit
VB:
x = CDate("12:00:00.00") 'incompatibilité de type
on a une erreur d'exécution (code 13).

Par conséquent, je ne vois que deux voies possibles : ou garder les valeurs numériques sous forme de nombres (type Double ou Single), ou traiter les chaînes de caractères comme... des chaînes de caractères !
La première méthode va vous amener à modifier profondément votre code.
La seconde peut se mettre en œuvre plus simplement. Au lieu de
VB:
  TextBox101.Value = Val(TextBox2.Value) - Val(TextBox1.Value)
on peut mettre
VB:
Dim a, b
  a = Split(TextBox1.Value, ".")
  b = Split(TextBox2.Value, ".")
  TextBox101.Value = Format(CDate(b(0)) - CDate(a(0)) + (b(1) < a(1)) / 86400, "hh:mm:ss") & "." & Format(b(1) - a(1) - 100 * (b(1) < a(1)), "00")


Comme il serait fastidieux de le répéter, il vaut mieux créer une fonction comme
VB:
Function toto$(a$, b$, s$)
Dim u, v
  u = Split(a, ".")
  v = Split(b, ".")
  If s = "-" Then
    toto = Format(CDate(u(0)) - CDate(v(0)) + (-u(1) > -v(1)) / 86400, "hh:mm:ss") & "." & Format(u(1) - v(1) - 100 * (-u(1) > -v(1)), "00")
  Else
    toto = Format(CDate(u(0)) + CDate(v(0)) - ((-u(1) + -v(1)) <= -100) / 86400, "hh:mm:ss") & "." & Format((-(-u(1) + -v(1))) Mod 100, "00")
  End If
End Function
qui permet d'additionner ou de soustraire des valeurs sous forme de chaînes de caractères.


Ainsi, au lieu de
VB:
  TextBox101.Value = Val(TextBox2.Value) - Val(TextBox1.Value)
on écrira aussi simplement
VB:
  TextBox101.Value = toto(TextBox2.Value, TextBox1.Value, "-")

Si on voulait additionner, on écrirait
VB:
  TextBox101.Value = toto(TextBox2.Value, TextBox1.Value, "+")


À vous de voir.


ℝOGER2327
#7332


Jeudi 19 Palotin 141 (Occultation de Saint Gauguin, océanide - fête Suprême Quarte)
19 Floréal An CCXXII, 8,0955h - arroche
2014-W19-4T19:25:45Z


P.s. : Bonjour Job75. Le temps que je rédige mon message (en n'oubliant pas d'aller manger un morceau), je n'ai pas vu que vous donniez une solution...
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Problème d'écart de temps

Suite...


J'ai oublié l'essentiel : le code du bouton ECART ! Ça tient en cinq lignes :​
VB:
Private Sub BTN_Ecart_Click()
Dim i%, ta(), tb()
  ta = Array(TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, TextBox7, TextBox8, TextBox9, TextBox10)
  tb = Array(, TextBox101, TextBox102, TextBox103, TextBox104, TextBox105, TextBox106, TextBox107, TextBox108, TextBox109)
  For i = 1 To UBound(ta)
    If ta(i).Value = "" Then Exit For
    If tb(i).Value = "" Then tb(i).Value = toto(ta(i).Value, ta(i - 1).Value, "-")
  Next
End Sub

et à peine plus (mais encore plus rapide) si on se passe de la fonction toto :​
VB:
Private Sub BTN_Ecart_Click()
Dim i%, ta(), tb(), u, v
  ta = Array(TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, TextBox7, TextBox8, TextBox9, TextBox10)
  tb = Array(, TextBox101, TextBox102, TextBox103, TextBox104, TextBox105, TextBox106, TextBox107, TextBox108, TextBox109)
  For i = 1 To UBound(ta)
    If ta(i).Value = "" Then Exit For
    If tb(i).Value = "" Then
      u = Split(ta(i).Value, ".")
      v = Split(ta(i - 1).Value, ".")
      tb(i).Value = Format(CDate(u(0)) - CDate(v(0)) + (-u(1) > -v(1)) / 86400, "hh:mm:ss") & "." & Format(u(1) - v(1) - 100 * (-u(1) > -v(1)), "00")
    End If
  Next
End Sub


Bonne nuit.


ℝOGER2327
#7333


Jeudi 19 Palotin 141 (Occultation de Saint Gauguin, océanide - fête Suprême Quarte)
19 Floréal An CCXXII, 8,3566h - arroche
2014-W19-4T20:03:21Z
 
Dernière édition:

Habitude

XLDnaute Accro
Re : Problème d'écart de temps

Bonjour à tous

Solution envisageable.

Données conservées dans une matrice et affichées dans une liste.
 

Pièces jointes

  • Zeltron24.xlsm
    33.7 KB · Affichages: 38
  • Zeltron24.xlsm
    33.7 KB · Affichages: 42
  • Zeltron24.xlsm
    33.7 KB · Affichages: 40

job75

XLDnaute Barbatruc
Re : Problème d'écart de temps

Re,

@ Roger2327

Il me semble que le problème vient du choix de votre format de données. "hh:mm:ss.00" est mal digéré

Oui bien sûr, c'est pourquoi j'ai fabriqué ma fonction C et que zelton24 et moi utilisons Application.Text.

Avez-vous essayé mon code du #4 ? Je crains que non...

A+
 

zeltron24

XLDnaute Impliqué
Re : Problème d'écart de temps

Bonsoir à Job75, Habitude et Roger

Merci à vous de vous être penché sur mon problème.
Je vais regarder de plus près vos propositions et vous tiendrait au courant de l'évolution.
La solution de Habitude est remarquable dans le sens ou elle va dans la direction de mes objectifs.
Beau travail aussi pour Roger et Job75
Bonne soirée à vous et
A++
Guy
 
Dernière édition:

zeltron24

XLDnaute Impliqué
Re : Problème d'écart de temps

Re,

J'ai regardé avec attention les projets et j'aurai voulu si cela est possible dans la solution de Habitude, avoir un bouton, afin d'inscrire dans la feuille active les temps en B2:B.... et les écarts en C3:C...
Puis un autre bouton pour effacer la liste.
 
Dernière édition:

zeltron24

XLDnaute Impliqué
Re : Problème d'écart de temps

Bonjour à vous,

J'ai trouvé la formule pour effacer la Liste.
Code:
Liste.Clear

Mais je bloque pour enregistrer les temps sur la feuille.
Aussi, je fais appel à vos connaissances bien meilleures que les miennes.
 

zeltron24

XLDnaute Impliqué
RESOLU: Problème d'écart de temps

Bonsoir Habitude,

Super cela me convient parfaitement.
Encore un Grand merci à toi et aussi aux deux amis qui se sont penché sur le Problème.

JOb75

Avez-vous essayé mon code du #4 ? Je crains que non...

J'ai bien essayé ton code mais pour etre sincère, l'idée de Habitude me convient mieux.
Une bonne soirée à vous et encore merci.
Bon Week End
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 333
Membres
103 519
dernier inscrit
Thomas_grc11