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à
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 !
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 BrunoM45
Merci beaucoup pour votre remarque
Cordialement
MARTI