XL 2010 convert units

Mody200

XLDnaute Occasionnel
Bonjour
S'il vous plaît aidez-moi
J'ai quelques articles en stock en cartons et en pièces
Lorsque je convertis des valeurs en entiers, le code fonctionne pour moi si la valeur est positive, mais lorsqu'il appelle d'autres classes et qu'elles sont négatives, cela ne fonctionne pas pour moi. Au lieu de cela, le code fonctionne lorsque la valeur est positive.

regarde les photos
Le problème est sur la deuxième photo
Je veux que ce soit comme la troisième photo




Code:
TextBox7.Value = Val(TextBox4.Value) + Int(Val(TextBox5.Value) / CSng(TextBox3.Value))
TextBox8 = Val(TextBox5.Value) Mod CSng(TextBox3.Value) '& Math.Abs(TextBox3.Value)  '+ TextBox3
1.jpg
2.jpg
3.jpg
 

Pièces jointes

  • convert units.xlsm
    34.2 KB · Affichages: 4
Dernière édition:
Solution
Il ne fonctionne pas pareil que la fonction MOD d'Excel qui peut prendre des nombres pas forcément entiers et renvoie toujours un reste positif. L'opérateur mod de VBA calcule strictement le reste de la division entière du signe du quotient. C'est pourquoi il vaut mieux utiliser pour le quotient Int, qui renvoie toujours le plus grand entier inférieur ou égal, même pour un éventuel nombre négatif.

Dranreb

XLDnaute Barbatruc
Bonsoir.
Conseil: Calculez la quantité totale en pièces : QtTot = Cartons * Unit + Pieces
puis décomposez la en cartons et pièces : Cartons = Int(QtTot / Unit) : Pieces = QtTot - Cartons * Unit
Donnez des noms mnémoniques à vos contrôles pour vous y retrouver plus facilement : TBxCartonStock, TBxPieceStock, TBxUnit, TBxCartonConv, TBxPieceConv
Ça pourrait donner :
VB:
Private Sub CBnConvertUnits_Click()
   Dim QtTot As Double, Unit As Double, Cartons As Long
   Unit = Val(TBxUnit.Text)
   QtTot = Val(TBxCartonStock.Text) * Unit + Val(TBxPieceStock.Text)
   Cartons = Int(QtTot / Unit)
   TBxCartonConv.Text = Cartons
   TBxPieceConv.Text = QtTot - Cartons * Unit
   End Sub
 
Dernière édition:

Mody200

XLDnaute Occasionnel
VB:
 Dim QtTot As Double, Unit As Double, Cartons As Long
   TextBox7.Value = Val(TextBox4.Value) + Int(Val(TextBox5.Value) / CSng(TextBox3.Value))
   Unit = Val(TextBox3.Text)
   QtTot = Val(TextBox4.Text) * Unit + Val(TextBox5.Text)
   Cartons = Int(QtTot / Unit)
   TextBox8.Text = Cartons
   TextBox8.Text = QtTot - Cartons * Unit
 

Mody200

XLDnaute Occasionnel
Bonsoir.
Conseil: Calculez la quantité totale en pièces : QtTot = Cartons * Unit + Pieces
puis décomposez la en cartons et pièces : Cartons = Int(QtTot / Unit) : Pieces = QtTot - Cartons * Unit
Donnez des noms mnémoniques à vos contrôles pour vous y retrouver plus facilement : TBxCartonStock, TBxPieceStock, TBxUnit, TBxCartonConv, TBxPieceConv
Ça pourrait donner :
VB:
Private Sub CBnConvertUnits_Click()
   Dim QtTot As Double, Unit As Double, Cartons As Long
   Unit = Val(TBxUnit.Text)
   QtTot = Val(TBxCartonStock.Text) * Unit + Val(TBxPieceStock.Text)
   Cartons = Int(QtTot / Unit)
   TBxCartonConv.Text = Cartons
   TBxPieceConv.Text = QtTot - Cartons * Unit
   End Sub
Bonsoir.Dranreb
Merci, c'est ce qui est requis
Mais quel est le problème avec le code du mod ?
C'est censé être une fonction qui convertit une valeur en entier


 

Dranreb

XLDnaute Barbatruc
Il ne fonctionne pas pareil que la fonction MOD d'Excel qui peut prendre des nombres pas forcément entiers et renvoie toujours un reste positif. L'opérateur mod de VBA calcule strictement le reste de la division entière du signe du quotient. C'est pourquoi il vaut mieux utiliser pour le quotient Int, qui renvoie toujours le plus grand entier inférieur ou égal, même pour un éventuel nombre négatif.
 

Mody200

XLDnaute Occasionnel
Il ne fonctionne pas pareil que la fonction MOD d'Excel qui peut prendre des nombres pas forcément entiers et renvoie toujours un reste positif. L'opérateur mod de VBA calcule strictement le reste de la division entière du signe du quotient. C'est pourquoi il vaut mieux utiliser pour le quotient Int, qui renvoie toujours le plus grand entier inférieur ou égal, même pour un éventuel nombre négatif.
Merci beaucoup, j'ai beaucoup profité de vous
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 655
Messages
2 111 604
Membres
111 217
dernier inscrit
aladinkabeya2