Calcul dans formulaire Userform

Re bonjour le Forum,

Après ce Week end chahuté par une météo plus que maussade, je reviens vers vous afin d'affiner le code VBA de mon application CARNET DE VOL,

L'ensemble commence à fonctionner mais je cale sur un petit calcul qui me paraissait plutôt simple à réaliser.

Mon TextBox3 devrait afficher le calcul suivant:

coutmin_txt * VOL_txt + TextBox1* VOL_txt

Voici ce que j'ai écrit.

Private Sub TextBox3_Change()

TextBox3.Value = coutmin_txt.Value * VOL_txt.Value

End Sub

Et ma case TextBox3 reste désespérément vide de résultat.

Merci d'un conseil

41logbook.xlsm (263.04 Ko)

Bonjour

Puisque c'est un calcul qui doit se faire dans cette Textbox, il ne doit pas être placé dans un Change je pense

Mettez cette instruction dans le code ->Private Sub AVION_cmb_Change() juste avant le END SUB

De cette sorte, le calcul se fera sur changement de la liste déroulante

Cordialement

Bonjour ,

J'ai tenté la solution proposée , mais cela amène une erreur de compilation lorsque je choisi le combo AVION.

le programme s'arrête là.

 Private Sub AVION_cmb_Change()
        If AVION_cmb.ListIndex = -1 Then coutmin_txt = "": Exit Sub
        lig = Application.Match(AVION_cmb, Sheets("Data").[A:A], 0)
        If IsError(lig) Then
            coutmin_avion_txt = ""
            registration_txt = ""
        Else
            coutmin_avion_txt = Sheets("Data").Cells(lig, 3)
            registration_txt = Sheets("Data").Cells(lig, 2)
        End If

       cout_avion_txt = coutmin_avion_txt * VOL_txt
        cout_instruc_txt = coutmin_instruc_txt * VOL_txt
        cout_du_vol_txt = cout_avion_txt + cout_instruc_txt

    End Sub

Une idée ?

Merci d'avance

bonjour,

une proposition de correction

'**************************************************
'j'accocie le choix de l'avion avec le cout minute
'**************************************************

    Private Sub AVION_cmb_Change()
        If AVION_cmb.ListIndex = -1 Then coutmin_txt = "": Exit Sub
        lig = Application.Match(AVION_cmb, Sheets("Data").[A:A], 0)
        If IsError(lig) Then
            coutmin_txt = ""
            TextBox2 = ""
        Else
            coutmin_txt = Sheets("Data").Cells(lig, 3)
            TextBox2 = Sheets("Data").Cells(lig, 2)
        End If
    TextBox3.Value = CDbl(coutmin_txt.Value) * TimeValue(VOL_txt.Value)
    End Sub

'**********************************************************************
'calcul de la durée de vol entre l'heure de départ et l'heure d'arrivée
'**********************************************************************
Private Sub ARRIVEE_txt_AfterUpdate()
On Error Resume Next
VOL_txt.Value = Format((TimeValue(DEPART_txt.Value)) - TimeValue(ARRIVEE_txt.Value), "hh:mm")
TextBox3.Value = CDbl(coutmin_txt.Value) * TimeValue(VOL_txt.Value)
End Sub
Private Sub DEPART_txt_AfterUpdate()
On Error Resume Next
VOL_txt.Value = Format((TimeValue(DEPART_txt.Value)) - TimeValue(ARRIVEE_txt.Value), "hh:mm")
TextBox3.Value = CDbl(coutmin_txt.Value) * TimeValue(VOL_txt.Value)
End Sub

Merci beaucoup H2SO4 de ta réponse précise,

Appliquée mais pas résolue totalement, car le format renvoyé par le calcul me semble incorrect.

De nouveau je cale

Je vais tester un code FORMAT pour voir... mais je doute de la réponse

******************************************************************************************************
'j'accocie le choix de l'avion avec le cout minute et calcule le cout avion en fonction du temps de VOL
'******************************************************************************************************

    Private Sub AVION_cmb_Change()
        If AVION_cmb.ListIndex = -1 Then coutmin_avion_txt = "": Exit Sub
        lig = Application.Match(AVION_cmb, Sheets("Data").[A:A], 0)
        If IsError(lig) Then
            coutmin_avion_txt = ""
            registration_txt = ""
        Else
            coutmin_avion_txt = Sheets("Data").Cells(lig, 3)
            registration_txt = Sheets("Data").Cells(lig, 2)
        End If
    cout_avion_txt.Value = Format((CDbl(coutmin_avion_txt.Value)) * TimeValue(VOL_txt.Value), "00,00")
    End Sub

Qu'en pensez-vous ?

Papy280255

bonjour,

essaie ceci, mettre un point au lieu d'une virgule dans le format !

cout_avion_txt.Value = Format((CDbl(coutmin_avion_txt.Value)) * TimeValue(VOL_txt.Value), "00.00")

Re,

Hélas cela ne résout pas le soucis d'affichage;)

Le résultat me renvoie une valeur erronée. voir capture écran

La complexité des chaines (TimeValue) avec des chaines Txt semble ne pas fonctionner.

Quelque chose m'échappe, peut être avec string.Format cela marcherait? mais là cela devient hard.

Si vous avez une autre solution, elle est la bienvenue

"excellament vôtre"

Papy280255

2017 03 20

Bonjour,

le cout à la minute dans être transformé en cout par jour pour que la formule donne un résultat correct. il faut donc multiplier par 24*60*60.

cout_avion_txt.Value = Format((CDbl(coutmin_avion_txt.Value)) * TimeValue(VOL_txt.Value*24*60*60), "00.00")

Re coucoucou H²SO4,

voici le code corrigé comme suggéré

Private Sub AVION_cmb_Change()
        If AVION_cmb.ListIndex = -1 Then coutmin_avion_txt = "": Exit Sub
        lig = Application.Match(AVION_cmb, Sheets("Data").[A:A], 0)
        If IsError(lig) Then
            coutmin_avion_txt = ""
            registration_txt = ""
        Else
            coutmin_avion_txt = Sheets("Data").Cells(lig, 3)
            registration_txt = Sheets("Data").Cells(lig, 2)
        End If
    cout_avion_txt.Value = Format((CDbl(coutmin_avion_txt.Value)) * TimeValue(VOL_txt.Value), "00.00") * 24 * 60 * 60

    End Sub

qui m'amène un calcul plutôt surprenant

voir prtsc

Là je bloque à nouveau malgré votre judicieux conseil

Aurais-je oublié quelque chose.

2017 03 20

bonsoir

Essayer d'utiliser les variables de type numériques puis vous donnez la textbox le résultat final :

Private Sub TextBox3_Change()
Dim cout As Currency, vol As Currency
cout = coutmin_txt.Value
vol = VOL_txt.Value
TextBox3.Value = cout * vol
End Sub

Et c est pareil pour :

If ……… then TextBox3.Value = 0

re-bonjour,

au temps pour moi !

cout_avion_txt.Value = Format((CDbl(coutmin_avion_txt.Value)) * TimeValue(VOL_txt.Value)*24*60*60, "00.00")

Désolé H²SO4 d'insister, mais j'ai modifié le code et je suis toujours avec un résultat erroné.

rivate Sub AVION_cmb_Change()
        If AVION_cmb.ListIndex = -1 Then coutmin_avion_txt = "": Exit Sub
        lig = Application.Match(AVION_cmb, Sheets("Data").[A:A], 0)
        If IsError(lig) Then
            coutmin_avion_txt = ""
            registration_txt = ""
        Else
            coutmin_avion_txt = Sheets("Data").Cells(lig, 3)
            registration_txt = Sheets("Data").Cells(lig, 2)
        End If
    cout_avion_txt.Value = Format((CDbl(coutmin_avion_txt.Value)) * TimeValue(VOL_txt.Value) * 24 * 60 * 60, "00.00")

    End Sub

Merci de votre aide....

Papy280255

2017 03 20

bonsoir,

je pense que je ne sais plus calculer, j'espère que cette fois-ci c'est bon

cout_avion_txt.Value = Format((CDbl(coutmin_avion_txt.Value)) * TimeValue(VOL_txt.Value) * 24 * 60, "00.00")

Je me doutais bien qu'il y avait un "Stuut" pour une journée de 24 heures à raison de 60 min par heures soit 1440. Le cap des seconde n'était donc pas nécessaire

Je teste tout cela demain

En tout cas grand merci de l'aide sur la résolution de ce code.

Très bonne soirée

Papy280255

Rechercher des sujets similaires à "calcul formulaire userform"