XL 2010 convert units

Mody200

XLDnaute Junior
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 Junior
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 Junior
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 Junior
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

Statistiques des forums

Discussions
312 207
Messages
2 086 232
Membres
103 161
dernier inscrit
Rogombe bryan