XL 2010 convert units

  • Initiateur de la discussion Initiateur de la discussion Mody200
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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.
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:
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
 
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.
Merci beaucoup, j'ai beaucoup profité de vous
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

H
Réponses
3
Affichages
1 K
HugoB99
H
Retour