Calcul km/min et km/h vba

Y compris Power BI, Power Query et toute autre question en lien avec Excel
w
wall
Membre fidèle
Membre fidèle
Messages : 178
Inscrit le : 10 décembre 2014
Version d'Excel : 2010

Message par wall » 10 octobre 2018, 16:39

Bonjour à tous,
Je coince dans mes formules de conversion si quelqu'un veut bien me donner un début de solution. je vous remercie d'avance.
Je dois ressortir à partir de la textbox1 des données converties en min au km et en km/h mais ma formule ne m'affiche pas les bons chiffres.
Cordialement
Formulaire-calcul.xlsm
(22.15 Kio) Téléchargé 43 fois
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 448
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 10 octobre 2018, 17:01

Bonjour,

Sans données je ne sais pas convertir ! :lole:
Dis-nous déjà ce qu'est censée contenir la TextBox1 : quel type de données ? sous quel format ?

nb- Sachant qu'une TextBox ne contient in fine que du texte, ce qui signifie que pour utiliser ce contenu, il faudra vraisemblablement le convertir... :wink:
w
wall
Membre fidèle
Membre fidèle
Messages : 178
Inscrit le : 10 décembre 2014
Version d'Excel : 2010

Message par wall » 10 octobre 2018, 17:38

Bonjour,
Oui désolé
Ma textbox1 doit contenir des chiffres avec ou sans virgule ex 8,9 ou 19 (entre 7 et 22 à titre indicatif)

Cordialement
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 448
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 10 octobre 2018, 17:48

Et c'est censé être quoi ? :wink:
w
wall
Membre fidèle
Membre fidèle
Messages : 178
Inscrit le : 10 décembre 2014
Version d'Excel : 2010

Message par wall » 10 octobre 2018, 17:51

Ce sont des vitesses en km/h à convertir en vitesse et allure et en % aussi de cette même vitesse
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 448
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 11 octobre 2018, 01:05

Ce sont des vitesses en km/h à convertir en vitesse et allure
Tu trouves pas que ça manque un peu de précision ! :wink:

km/h c'est une unité de vitesse : je veux bien la convertir en vitesse, c'est déjà une vitesse ! 8[] Mais en quelle unité ?

Et l'allure se définit comment ? et s'exprime comment ? En quelle unité ?
w
wall
Membre fidèle
Membre fidèle
Messages : 178
Inscrit le : 10 décembre 2014
Version d'Excel : 2010

Message par wall » 11 octobre 2018, 08:16

Bonjour à tous, merci MFerrand pour ce retour,
En effet, je m'explique, sur un tableau Excel, les formules sont correctes et font leur travail contrairement qu'en VBA.
Dans ma textbox1 on doit mettre des chiffres,
Sur les Textbox2,3,4 s'affichent des hh:mm:ss par conversion (formule) à partir de la texbox1 (Ces textsbox doivent afficher hh:mm:ss)
Le problème se pose aussi sur les Textbox 5,7,9 (allure), ces zones doivent afficher un format horaires MM:SS. (2 décimales après la virgule pas plus)
La textbox5 dépend du résultat de la textbox6, La textbox7 dépend du résultat de la textbox8, La textbox9 dépend du résultat de la textbox10
la vitesse en k/h
l'allure en min/km
J'ai corrigé les box allure et ci-joint le nouveau fichier
Cordialement
Formulaire-calcul.xlsm
(22.85 Kio) Téléchargé 36 fois
Avatar du membre
Ausecour
Passionné d'Excel
Passionné d'Excel
Messages : 3'118
Appréciations reçues : 346
Inscrit le : 31 mai 2018
Version d'Excel : 2010 FR, 2013 FR

Message par Ausecour » 11 octobre 2018, 08:36

Bonjour,

Je n'ai pas essayé de comprendre tes formules ou les unités, j'ai simplement utilisé la fonction Format avec "hh:mm:ss" pour les textbox du haut, et "mm:ss" pour les textbox du milieu. A toi ensuite de voir si les valeurs affichées sont les bonnes...

Le fichier :
Copie de Formulaire-calcul.xlsm
(18.19 Kio) Téléchargé 17 fois
Plus un sujet a un titre précis, des explications claires, et un fichier Excel bien préparé, plus il a de chances d'avoir une réponse qui répond au besoin, mettez toutes les chances de votre côté :bien:
"100% des gagnants auront tenté leur chance" :trfl:
w
wall
Membre fidèle
Membre fidèle
Messages : 178
Inscrit le : 10 décembre 2014
Version d'Excel : 2010

Message par wall » 11 octobre 2018, 12:48

Bonjour à tous,
Merci pour cette réponse qui m'a aidé pour l'affichage, par contre, les Textboxs 5, 7 et 9 n'affichent plus le bon calcul. par exemple selon la formule 60/11=1,20???
et aussi j'aimerai limiter l'affichage de toutes les TextBoxs à 2 chiffres après la virgule.
Merci pour tout
Cordialement
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 448
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 11 octobre 2018, 13:23

Bonjour, Salut Ausecour !

J'ai essayé de simplifier un peu et de rationnaliser :wink: :

D'abord, tes TextBox 2 à 19, destinés aux résultats de calculs, on ne doit pas pouvoir saisir, il convient donc de passer leur propriété Locked à True.

Ensuite lorsqu'on modifie TextBox1, il convient d'effacer le contenu des autres d'une part et de n'accepter qu'une valeur numérique. On intervient donc à la validation du contenu de la TextBox :
Private Sub TextBox1_AfterUpdate()
    Dim v
    Effacer
    v = TextBox1.Value
    If v <> "" Then
        v = Replace(v, ".", ",")
        If IsNumeric(v) Then
            TextBox1.Value = v
        Else
            TextBox1.Value = ""
        End If
    End If
End Sub
On récupère la valeur de la TextBox dans une variable, par commodité. Si non vide, on remplace le point (décimal) éventuel par une virgule et on teste si la valeur est numérique. Si elle ne l'est pas on l'efface.
Dans tous les cas, on efface préalablement les autres TextBox, en lançant une procédure d'effacement :
Sub Effacer()
    Dim i%
    For i = 2 To 19
        Controls("TextBox" & i).Value = ""
    Next i
End Sub
Procédure de validation, qui opère les calculs :
Private Sub Valider_Click()
    Dim v#, vv#, i%, p, d
    If TextBox1.Value = "" Then Exit Sub
    v = CDbl(TextBox1.Value)
    p = Array(0.85, 0.8, 0.75)
    d = Array(10, 21.1, 42.195)
    For i = 2 To 4
        vv = v * p(i - 2)
        Controls("TextBox" & i).Value = Format((d(i - 2) / vv) / 24, "hh:mm:ss")
        Controls("TextBox" & i * 2 + 1).Value = Format((1 / vv) / 24, "mm:ss")
        Controls("TextBox" & i * 2 + 2).Value = Format(vv, "0.00")
    Next i
    For i = 11 To 19
        Controls("TextBox" & i).Value = Format(v * 0.05 * (i + 2), "0.00")
    Next i
End Sub
On travaille avec des variables, parce que plus simple, et des boucles, parce que ça raccourcit le code et ça va plus vite. :)
D'abord on s'assure que TextBox1 n'est pas vide, sinon on sort...
Si une valeur, on la récupère dans une variable v de type Double, en la convertissant en valeur numérique (dans la TextBox, c'est du texte qu'on a).

On utilise une vitesse pondérée selon la distance pour les calculs, on établit un tableau p des pondérations appliquées.
[J'ai retenu 0,85 0,8 0,75. Si tu appliques 0,9 0,85 0,75, tu modifieras. Mais tu appliques la même pondération à tes divers calculs, pas des pondérations différentes, ce qui n'aurait aucun sens !]

On dresse également un tableau des distances d : 10 21,1 42,195.

Et on peut servir en boucle nos TextBox 2 3 4, en faisant varier une variable i de 2 à 4. Et on servira simultanément les TB i*2 + 1 (= 5 7 9) pour l'allure et les TB i*2 + 2 (= 6 8 10) pour la vitesse pondérée.

A chaque tour de boucle, on calcule d'abord la vitesse pondérée dans une variable vv, à partir de v, en la pondérant par le coefficient de notre tableau p (les tableaux étant indicés à partir de 0, l'indice est i-2).
- Le temps mis est le rapport de la distance (km) par la vitesse (km/h), le résultat est en heures ; on le divise par 24 pour obtenir une valeur horaire Excel, et on applique à ce résultat un format horaire.
- L'allure, c'est le même calcul, pour une distance de 1 km ; on applique au résultat un format horaire mm:ss.
- La vitesse, on l'a calculée, on lui applique un format à 2 décimales.

Pour les TextBox 11 à 19, on les sert avec une vitesse pondérée croissante de 65% à 105% (de 5% en 5%).
Une simple boucle de 11 à 19, la pondération à appliquer sera 0,05*(i+2).

Cordialement.
wall_Formulaire-calcul.xlsm
(21.14 Kio) Téléchargé 24 fois
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message