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
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.
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
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
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
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.
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.