Calcul special

Bonjour a tous et a toutes

Svp si vous pouvez m'aider a faire ce calcul .. j'ai beaucoup essaye avec des codes .. mais sincerement j'ai pas trouve la solution .

Je veux avoir si vous m'aider svp :

Si le nombre du mois dans TextBox 3 est 0 ou 1 ou 2 ou 3 alors TextBox6 = TextBox2 + 0.25

Si le nombre du mois dans TextBox 3 est 4 ou 5 ou 6 alors TextBox6 = TextBox2 + 0.50

Si le nombre du mois dans TextBox 3 est 7 ou 8 ou 9 ou 10 ou 11 alors TextBox6 = TextBox2 + 0.75

Alors je vais obtenir 29 annees 8 mois et 20 jours .. dans ce cas s'affichera dans TextBox6 le nombre 29.75

Amicalement

MARTI MARTI

Salut,

Voici le code que j'ai mis, a voir si il fonctionne (pour ma part avec ton exemple c'est OK)

Private Sub TextBox1_Change()

TextBox2 = "": TextBox3 = "": TextBox4 = ""
    If Not IsDate(TextBox1) Or Not IsDate(TextBox5) Then Exit Sub
        If CDate(TextBox1) > CDate(TextBox5) Then Exit Sub

    Dim test As Boolean, dat As Date
        test = DateAdd("yyyy", Year(TextBox5) - Year(TextBox1), TextBox1) > CDate(TextBox5)

    TextBox2 = Year(TextBox5) - Year(TextBox1) + test

    dat = DateAdd("yyyy", TextBox2, TextBox1)
        test = Day(TextBox1) > Day(TextBox5)

    TextBox3 = DateDiff("m", dat, TextBox5) + test

    TextBox4 = DateDiff("d", DateAdd("m", TextBox3, dat), TextBox5)

    If TextBox3 = 0 Or 1 Or 2 Or 3 Then
        TextBox6 = TextBox2 + 0.25
            End If

    If TextBox3 = 4 Or 5 Or 6 Then
        TextBox6 = TextBox2 + 0.5
            End If

    If TextBox3 = 7 Or 8 Or 9 Or 10 Or 11 Then
        TextBox6 = TextBox2 + 0.75
            End If

End SubPrivate Sub TextBox1_Change()

TextBox2 = "": TextBox3 = "": TextBox4 = ""
    If Not IsDate(TextBox1) Or Not IsDate(TextBox5) Then Exit Sub
        If CDate(TextBox1) > CDate(TextBox5) Then Exit Sub

    Dim test As Boolean, dat As Date
        test = DateAdd("yyyy", Year(TextBox5) - Year(TextBox1), TextBox1) > CDate(TextBox5)

    TextBox2 = Year(TextBox5) - Year(TextBox1) + test

    dat = DateAdd("yyyy", TextBox2, TextBox1)
        test = Day(TextBox1) > Day(TextBox5)

    TextBox3 = DateDiff("m", dat, TextBox5) + test

    TextBox4 = DateDiff("d", DateAdd("m", TextBox3, dat), TextBox5)

    If TextBox3 = 0 Or 1 Or 2 Or 3 Then
        TextBox6 = TextBox2 + 0.25
            End If

    If TextBox3 = 4 Or 5 Or 6 Then
        TextBox6 = TextBox2 + 0.5
            End If

    If TextBox3 = 7 Or 8 Or 9 Or 10 Or 11 Then
        TextBox6 = TextBox2 + 0.75
            End If

End Sub

PS: Désolé pour la présentation du code je sais pas comment les écrire, moi je met toute les écritures les unes en dessous des autres

PS2: Autant pour moi le code ne fonctionne pas bien ca renvoie à chaque fois +0.5, j'essaye de corriger cela

Bonjour PIERRICK66

Merci mille fois pour votre aide

merci encore pour votre code .. SVP PIERRICK 66 regardez cette image .. pour la premiere fois lorsque je tappe une date dans TextBox1 le resultat dans TextBox6 sera parfaitement juste mais si je change par exemple simplement le mois dans TextBox1 le resultat dans TextBox6 ne change pas

Comme ici par exemple le mois est 0 dans TextBox3 mais le resultat est 30.75 normalement c'est 30.25

MARTI

Bonjour,

Au passage, ce qui me chiffonne un peu c'est que ton résultat ne peut se terminer que par ,25 ou ,50 ou ,75 et jamais pas ,00 !

Je ne sais si c'est voulu, mais en tout cas, cela me heurte !

Pour le reste, il faut évidemment une procédure de calcul lancée indifféremment par les changements de TextBox1 et TextBox5, et il serait préférable de prendre l'évènement AfterUpdate plutôt que Change (qui intervient à chaque modification de caractère) pour la déclencher.

Cordialement.

C'est ce que j'ai tenter de fair MFerrand, le problème est que, peux importe le nombre de mois, je retombe toujours à +0.75.

La je commence à sécher un peu....

MFerrand a écrit :

Bonjour,

Au passage, ce qui me chiffonne un peu c'est que ton résultat ne peut se terminer que par ,25 ou ,50 ou ,75 et jamais pas ,00 !

Je ne sais si c'est voulu, mais en tout cas, cela me heurte !

Pour le reste, il faut évidemment une procédure de calcul lancée indifféremment par les changements de TextBox1 et TextBox5, et il serait préférable de prendre l'évènement AfterUpdate plutôt que Change (qui intervient à chaque modification de caractère) pour la déclencher.

Cordialement.

Bonjour MFerrand

Merci beaucoup pour vos remarques et conseilles

Tres gentil de votre part

On peut afficher le resultat dans TextBox6 comme ca 29.00 ou par exemple 30.00 ou 32.00 etc ....

Tres cordialement

MARTI


Pierrick66 a écrit :

C'est ce que j'ai tenter de fair MFerrand, le problème est que, peux importe le nombre de mois, je retombe toujours à +0.75.

La je commence à sécher un peu....

Salut Pierrick66

Pas comme moi .. car j'ai pas pu sortir de cet usine de dynamite

Amicalement

MARTI

Essaie ainsi :

Sub ValEcart()
    Dim m%, i%, dd As Date, df As Date, test As Boolean
    For i = 2 To 4
        Controls("TextBox" & i).Value = ""
    Next i
    TextBox6.Value = ""
    If TextBox1.Value <> "" And TextBox5.Value <> "" Then
        If IsDate(TextBox1.Value) And IsDate(TextBox5.Value) Then
            dd = CDate(TextBox1.Value): df = CDate(TextBox5.Value)
            If dd > df Then Exit Sub
            m = Year(df) - Year(dd): test = DateAdd("yyyy", m, dd) > df
            TextBox2.Value = m + test
            dd = DateAdd("yyyy", CInt(TextBox2.Value), dd)
            m = DateDiff("m", dd, df): test = DateAdd("m", m, dd) > df
            TextBox3.Value = m + test
            dd = DateAdd("m", CInt(TextBox3.Value), dd)
            TextBox4.Value = DateDiff("d", dd, df)
            m = (m + test + 1) Mod 12: m = m \ 3
            TextBox6.Value = Format(CInt(TextBox2.Value) + m * 0.25, "0.00")
        End If
    End If
End Sub

Private Sub TextBox1_AfterUpdate()
    ValEcart
End Sub

Private Sub TextBox5_AfterUpdate()
    ValEcart
End Sub

Le calcul pour TextBox6 se fait à x,00 si 11, 0, 1 ; à x,25 si 2, 3, 4 ; à x,50 si 5, 6, 7 ; à x,75 si 8, 9, 10.

C'est une approximation plus précise que celle que tu indiquais... On peut la rendre plus précise en tenant compte des jours...

J'ai conservé dans les grandes lignes ta méthode de calcul (en ajoutant quelques variables), notamment l'utilisation de test (subtilité de calcul que j'ai appréciée )

Avant de tester (et me dire si je ne me suis pas planté ici ou là ) deux petits aménagements à faire :

Tu sélectionnes tous les TextBox sauf le 1 et le 5, et dans la fenêtre de propriété tu mets la propriété TabStop à False (le curseur les ignorera en tabulant). Tu peux aussi mettre la propriété Locked à True (ce qui empêchera d'écrire dedans).

Ensuite clic droit dans une zone vide du Userform, clic sur Ordre de tabulation, et là tu sélectionnes TextBox1 dans la fenêtre et avec le bouton Monter, tu le fais passer avant TextBox5. Ainsi, à l'ouverture le curseur sera sur TextBox1 et en tabulant il passera sur TextBox5...

Cordialement.

Bonjour MFerrand

Merci mille fois pour vos efforts et vos aides et vos codes

Tres ravi de vous rencontrer une autre fois dans mon sujet

REMARQUE :

Le resultat est biensure 29 annees 10 mois et 20 jours et dans TextBox6 s'affichera 29.75 ..virgule ..75 puisque le nombre du mois est bien 10 .... c'est vraiment parfait

Sans rien toucher maintenant dans TextBox1 essayez de changer uniquement le mois au lieu de 10 changer par exemple 9 .. ici s'affichera dans TextBox6 29.00 malgre que le nombre du mois affiche dans TExtBox3 est bien 11 !!!!?????

MARTI

Oups ! J'escamote une année !

Les deux lignes suivantes à modifier :

            m = (m + test + 1) Mod 12: test = m = 0: m = m \ 3
            TextBox6.Value = Format(CInt(TextBox2.Value) - test+ m * 0.25, "0.00")

Les ajouts sont surlignés.

Cordialement.

MFerrand a écrit :

Oups ! J'escamote une année !

Les deux lignes suivantes à modifier :

            m = (m + test + 1) Mod 12: test = m = 0: m = m \ 3
            TextBox6.Value = Format(CInt(TextBox2.Value) - test+ m * 0.25, "0.00")

Les ajouts sont surlignés.

Cordialement.

Salut MFerrand

Merci beaucoup pour vos efforts

Les memes remarques precedentes

Amicalement

MARTI

Bonsoir Marti Marti

Si tu avais bien suivi les instructions de MFerrand que je salue, tu n'aurais pas de problème

La preuve en suivant tes instructions

2016 10 26 20h03 08

A+

Bonsoir BrunoM45

Merci beaucoup pour votre remarque

Cordialement

MARTI

Rechercher des sujets similaires à "calcul special"