Formule distance vba (textbox)

Manu62

XLDnaute Impliqué
Bonjour à tous et bonne année 2014,

je recherche la formule qui permet de faire une moyenne km/h en fonction de la distance et du temps. (dans mon usf)

J'aimerais que l moyenne s'affiche dans ma textbox après avoir mis le temps de parcours...

Dans mon fichier joint, cf userform

Merci des infos

A++

Manu
 

Pièces jointes

  • calcul vba.xlsm
    32 KB · Affichages: 79

job75

XLDnaute Barbatruc
Re : Formule distance vba (textbox)

BonjourManu62,

Dans le code de l'UserForm :

Code:
Private Sub TextBox1_Change()
Moyenne
End Sub

Private Sub TextBox2_Change()
Moyenne
End Sub

Sub Moyenne()
Dim s, ub%, t#
s = Split(TextBox2, ":")
ub = UBound(s)
If ub >= 0 Then t = Val(s(0))
If ub > 0 Then t = t + Val(s(1)) / 60
If ub > 1 Then t = t + Val(s(2)) / 1440
If t = 0 Then TextBox3 = "" Else _
  TextBox3 = Format(Val(TextBox1) / t, "0.000") & " km/h"
End Sub
Pour peaufiner, il faudrait contrôler ce qui est entré dans TextBox2 (minutes et secondes < 60).

A+
 

job75

XLDnaute Barbatruc
Re : Formule distance vba (textbox)

Re,

Un exemple de contrôle des minutes et secondes dans TextBox2 :

Code:
Private Sub TextBox1_Change()
Moyenne
End Sub

Private Sub TextBox2_Change()
Dim s, ub%
TextBox2 = Replace(Replace(TextBox2, ".", ""), "-", "")
s = Split(TextBox2, ":")
ub = UBound(s)
If ub > 0 Then If Val(s(1)) > 59 Then s(1) = "00"
If ub > 1 Then If Val(s(2)) > 59 Then s(2) = "00"
TextBox2 = Join(s, ":")
Moyenne
End Sub

Sub Moyenne()
Dim s, ub%, t#
s = Split(TextBox2, ":")
ub = UBound(s)
If ub >= 0 Then t = Val(s(0))
If ub > 0 Then t = t + Val(s(1)) / 60
If ub > 1 Then t = t + Val(s(2)) / 1440
If t = 0 Then TextBox3 = "" Else _
  TextBox3 = Format(Val(TextBox1) / t, "0.000") & " km/h"
End Sub
Il n'est pas indispensable de contrôler les heures, ni la distance en TextBox1.

A+
 

job75

XLDnaute Barbatruc
Re : Formule distance vba (textbox)

Re,

Voici des contrôles plus poussés des entrés dans TextBox1 et TextBox2 :

Code:
Private Sub TextBox1_Change()
Dim t$, n%, i%
t = TextBox1
For i = Len(t) To 1 Step -1
  n = Asc(Mid(t, i, 1))
  If n < 48 Or n > 57 Then t = Application.Replace(t, i, 1, "")
Next
TextBox1 = t
Moyenne
End Sub

Private Sub TextBox2_Change()
Dim t$, n%, i%, s, flag As Boolean
t = TextBox2
For i = Len(t) To 1 Step -1
  n = Asc(Mid(t, i, 1))
  If n < 48 Or n > 58 Then t = Application.Replace(t, i, 1, "")
Next
s = Split(t, ":")
If UBound(s) > 0 Then If Val(s(1)) > 59 Then s(1) = ""
If UBound(s) > 1 Then If Val(s(2)) > 59 Then s(2) = ""
If UBound(s) > 2 Then s(3) = "": flag = True
t = Join(s, ":")
t = Replace(t, "::", ":")
If flag Then t = Left(t, Len(t) - 1)
TextBox2 = t
Moyenne
End Sub

Sub Moyenne()
Dim s, t#
s = Split(TextBox2, ":")
If UBound(s) >= 0 Then t = Val(s(0))
If UBound(s) > 0 Then t = t + Val(s(1)) / 60
If UBound(s) > 1 Then t = t + Val(s(2)) / 1440
If t = 0 Then TextBox3 = "" Else _
  TextBox3 = Format(Val(TextBox1) / t, "0.000") & " km/h"
End Sub
Noter que, grâce aux boucles, les contrôles fonctionnent bien même sur des textes entrés par copier-coller.

A+
 

Discussions similaires

Réponses
3
Affichages
222

Membres actuellement en ligne

Statistiques des forums

Discussions
312 429
Messages
2 088 350
Membres
103 823
dernier inscrit
ben talha redouane