Calcul

Résolu
cs_colby Messages postés 126 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 14 novembre 2022 - 6 août 2009 à 12:48
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 - 9 août 2009 à 22:23
Bonjour à tous
j'ai 2 Problèmes
1 . comment formater un texbox mutiline pour contenir 13 caractères et passer à la ligne suivante?

2 . comment calculer de manière dégressif en utilsant un nombre X = 117 qui sera reduit de
22 deux fois et considéré le reste après.
et si X n'atteint pas les premiers 22 prendre en compte le nombre X sans considérer le reste des calcul.
A . En utilisant les if...Then...end if , je réussi à faire les calculs mais il ajoute un jour supplémentaire au résultat soit celui de 23 au lieu de 22.
B . En dessous des premiers 22 le resultat est faux.
Soit X = 15
1er calcul = N*15
2è calcul = N* 0 normalement
mais il fait N*-7 comment refuser les nombres négatifs?
merci pour la compréhension
Colby.

10 réponses

jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
9 août 2009 à 12:09
Je ne vais (volontairement) que traiter le cas du retour à la ligne forcé après une certain nombre de caractères :

Analyse, comprends et inspîre-toi de ce que fait ceci :

Private Sub Text1_Change()
  Const sauteligne As Integer = 10
 If Len(Text1.Text) = sauteligne Then
   Text1.SelText = vbCrLf
 End If
 If Len(Text1.Text) > sauteligne + 2 And (Len(Text1.Text) - sauteligne) Mod (sauteligne + 2) = 0 Then
   Text1.SelText = vbCrLf
 End If
End Sub


Pour le reste (ton formatage) : à toi de jouer après avoir (par exemple) fouillé parmi les sources de jmfmarques (l'une d'entre elles devrait t'inspîrer).
Bon travail de recherche et d'adaptation.
3
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
9 août 2009 à 22:23
Bien...

Alors et puisque tu as compris, écris-le ainsi :

Private Sub Text1_Change()
  Const sauteligne As Integer = 10
 If Len(Text1.Text) sauteligne Or Len(Text1.Text) > sauteligne + 2 And (Len(Text1.Text) - sauteligne) Mod (sauteligne + 2) 0 Then
   Text1.SelText = vbCrLf
 End If
End Sub
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 août 2009 à 13:34
Salut
[*] Formattage : est-ce que c'est le programme ou l'utilisateur qui entre les données dans la TextBox ?
Si c'est l'utilisateur, il vaudrait mieux passer par une TextBox de saisie qui, elle, pourrait gérer la saisie contrôlée de 13 caractères (je suppose une date ?)
[*] Pour tes autres questions, difficile de te répondre sans le code sous les yeux.
Inutile de coller 50.000 pages de code, on ne les lira pas. Sélectionne les parties intéressantes.
De plus, si tu dois travailler sur les dates, il y a des instructions pour cela, comme DateAdd ou DateDiff.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 août 2009 à 13:36
PS : Voir fonction Mod pour récupérer le reste d'un modulo, exemple :
18 Mod 10
renvoie 8
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_colby Messages postés 126 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 14 novembre 2022
6 août 2009 à 14:45
Merci Jack
1 . le textbox est géré par l'utilisateur et sera formaté comme suit : AAAA 000000-0
J'ai utilisé un masktext mais comment en faire un textbox multiline

2 . soit 2 dates. la DateDiff est 22
comment faire
1ère tranche = 25*9
reste1 22 - 9 = 13
2è tranche = 50*9
Reste2 13 - 9 = 4
3è tranche = 75*reste2
total = 1ère tranche + 2è tranche + 3è tranche

Dans mon cas en utilisant if :
A . si la DateDiff est < ou = 9 le résultat est exacte pour la tranche 1.
la tranche 2 et 3 = 0
B . mais si elle atteint 10 le résultat donne 1 ère tranche = 25*(9+1) et non 9
le reste1 1-9 -8
la tranche 2 donne 50*(-8) au lieu de considérer le chiffre "1" .
Colby
0
cs_colby Messages postés 126 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 14 novembre 2022
8 août 2009 à 17:44
Bonsoir Mr Jack
Voila ce que j'ai pu faire et ça marche merci pour tous. Seulement pour le textbox multiline je n'ai toujours pas trouvé. merci de m'aider.

Public Sub Calcul_Depot()
Dim NbrJours As Integer = DateDiff(DateInterval.Day, DTPick1.Value, DTPick2.Value) + 1
Dim Franchs, JrsFact, Tranch1, Tranch2, Tranch3, Dep1, Dep2, Dep3 As Integer
Franchs 30 : Txt11.Text NbrJours : JrsFact = NbrJours - Franchs
If JrsFact < 1 Then
JrsFact = Nothing
Else
JrsFact JrsFact : Txt8.Text CDbl(JrsFact)
End If
Select Case JrsFact
Case Is <= 30
If 0 < JrsFact < 31 Then
Tranch1 25 * JrsFact * Txt12.Text : Dep1 Tranch1
Txt9.Text = CStr(Format(Dep1, "#,##"))
End If
Case Is <= 60
If 0 < JrsFact < 61 Then
Tranch1 25 * 30 * Txt12.Text : Dim Reste As Int32 JrsFact - 30
Tranch2 50 * Reste * Txt12.Text : Dep2 Tranch1 + Tranch2
Txt9.Text = CStr(Format(Dep2, "#,##"))
End If
Case Is > 60
If JrsFact > 60 Then
Tranch1 25 * 30 * Txt12.Text : Tranch2 50 * 30 * Txt12.Text
Dim Reste As Int32 JrsFact - 60 : Tranch3 100 * Reste * Txt12.Text
Dep3 Tranch1 + Tranch2 + Tranch3 : Txt9.Text CStr(Format(Dep3, "#,##"))
End If
End Select
Depot = Dep1 + Dep2 + Dep3
End Sub
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
8 août 2009 à 22:13
Bonjour,

Ta question est :
"1 . comment formater un texbox mutiline pour contenir 13 caractères et passer à la ligne suivante?"
Mais .... tu ne précises pas ce que tu entends par ligne et ligne suivante ...

lignes réelles ou lignes d'affichage ? (car ce n'est pas la même chose !)
0
cs_colby Messages postés 126 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 14 novembre 2022
9 août 2009 à 03:16
Bonsoir jmf0,
j'entends par passer à la ligne ceci:
AAAA 000000-0
AAAA 000000-0
AAAA 000000-0
lorsque l'utilisateur écrit AAAA 000000-0, qu'il n'ait plus la possibilité d'ajouter un caractère, le retour à la ligne lui est imposé.
le formatage est faisable avec un Maskedtextbox
mais je ne peux qu'insérer une ligne de donnée.
Peut-on l'utiliser avec la propriété multiline des textbox et comment, car cela n'apparait pas dans la zone propriétés.
Merci d'avance
Colby
0
cs_colby Messages postés 126 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 14 novembre 2022
9 août 2009 à 03:25
Bonsoir jmf0,
je comprends maintenant votre question
je voudrais passer a la ligne suivante réelle, de sorte que si je dois lecrir 4 fois AAAA 000000-0
j'aurai
AAAA 000000-0
AAAA 000000-0
AAAA 000000-0
AAAA 000000-0
et non
AAAA 000000-0,AAAA 000000-0,AAAA 000000-0,AAAA 000000-0
Merci d'avance
Colby
0
cs_colby Messages postés 126 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 14 novembre 2022
9 août 2009 à 19:33
merci jmf0
0
Rejoignez-nous