Autres formules textbox

sabagof

XLDnaute Junior
Bonjour/Bonsoir à tous,
En tant qu'un bon débutant qui cherche à avancer, je vous remercie à l'avance de votre aide précieuse qui m'a toujours sorti d'affaire.....
Ma préoccupation de l'heure : J'ai une application de gestion de stock (ci-joint fichier). J'essai de me servir de ma base de données "basearticle" pour calculer la quantité de matière première entrant dans la composition d'un produit fini.
Sur mon userform "FABRICATION" j'ai réussi à ma manière à afficher à chaque changement de produit à fabriquer : les quantités en stock pour chaque constituant, la quantité nécessaire pour 1000.000 de comprimés. Maintenant je veux calculer automatiquement à chaque changement de la quantité à fabriquer, les quantités nécessaires. Mon problème c'est d'abord de formater tous les textbox en nombre, de mettre la formule de calcul dans chaque textbox et pour finir indiquer si le stock est suffisant ou non.

C'est tant mieux si je me suis fait comprendre..... Je demande votre indulgence .... Mes codes d'essais sont dans le fichier joint...
 

Pièces jointes

  • GESTION STOCK_aide.xlsm
    857.2 KB · Affichages: 20

Dranreb

XLDnaute Barbatruc
Bonjour.
Pour avancer j'ai mis quelques composants
Ça m'a donné l'idée de traiter un clic droit dans la WshBaseArticle pour le noter plus facilement
Nouvelle pièce jointe plus loinPièce joint supprimée ici.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Apparemment le fichier est trop gros pour être joint, non ?
Peut être vaudrait il mieux travailler durant quelque semaines sur une maquette ne comportant qu'une vingtaine d'articles ? Mais en envisageant tous les cas possibles, surtout les marginaux d'abord s'il y en a …
 

sabagof

XLDnaute Junior
Bonjour Dranreb et bonjour à toute l'équipe. J'espère que vous avez passer un assez bon weekend.
C'est exactement ce que je voulais, la meilleure façon de traiter API Quantity (kg). C'est génial.
Néanmoins le problème qui se pose à moi maintenant (novice) c'est que quand je copie le code et que je le colle dans la vraie application (Gestion de stock) et avec tous les réglages, c'est seulement la première colonne qui s'affiche.
Est ce que c'est du à la manière de traiter un clic droit dans la WshBaseArticle ? Merci de m'orienter pour afficher les autres colonnes.
1629106851107.png
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je ne sais pas, j'ignore tout de votre vraie application.
Vous auriez dû joindre un fichier de structure parfaitement conforme avec très peu de données,
et surtout pas un classeur structurellement différent avec encore beaucoup trop de données !
L'intitulé de composant se note-t-il correctement dans la colonne composant avec le clic droit ?
 
Dernière édition:

sabagof

XLDnaute Junior
Ah, il vient de me venir une idée :
Peut être avez vous simplement oublié dans la fenêtre de propriétés de la ListBox de mettre sa ColumnCount à 5 ?
Et sa ColumnWidths : 132 pt;54 pt;54 pt;54 pt;120 pt
Wow, génial comme sur des roulettes ça marche. Infiniment MERCI. J'ai admiré ta patience.... Préoccupations RÉSOLUES.
1629110613191.png


Néanmoins, est ce qu'on pourrait afficher rien que les composants qui entrent dans la fabrication d'un produit ? c à d si pour (besoins pour 1000000 = 0) la ligne ne s'affichera pas ? Merci.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Comme ça, ça semble aller :
VB:
Private Sub TBxQteAProd_AfterUpdate()
   Dim ColQtéStock As Integer, QtéFab As Double, TDon(), TLBx(), N As Integer, L As Long, _
      QtéStock As Double, QtéRequisePour1000000 As Double, QtéRequisePourFab As Double, LLBx As Integer
   ColQtéStock = CLsA.Colonnes("Qté en stock/Magasins externes").Index
   QtéFab = Val(Replace(TBxQteAProd.Text, ",", "."))
   TDon = CLsA.PlgTablo.Value
   ReDim TLBx(1 To UBound(TLigCompCol) + 1 - CMinComp, 1 To 5)
   For N = CMinComp To UBound(TLigCompCol)
      L = TLigCompCol(N): If L < 0 Then L = LCouA
      If L > 0 Then QtéStock = TDon(L, ColQtéStock) Else QtéStock = -999.99
      On Error Resume Next
      QtéRequisePour1000000 = TDon(LCouA, N)
      QtéRequisePourFab = QtéFab * QtéRequisePour1000000 / 1000000
      If Err Then QtéRequisePour1000000 = 1
      On Error GoTo 0
      If QtéRequisePour1000000 > 0 Then
         LLBx = LLBx + 1
         TLBx(LLBx, 1) = CLsA.Colonnes(N).Name
         TLBx(LLBx, 2) = StrNum(QtéStock, 7)
         TLBx(LLBx, 3) = StrNum(QtéRequisePour1000000, 7)
         TLBx(LLBx, 4) = StrNum(QtéRequisePourFab, 7)
         TLBx(LLBx, 5) = IIf(QtéRequisePourFab > QtéStock, "INSUFFISANT !", "Disponible.")
         End If: Next N
   ListBox1.List = TLBx
   End Sub
 

sabagof

XLDnaute Junior
Comme ça, ça semble aller :
VB:
Private Sub TBxQteAProd_AfterUpdate()
   Dim ColQtéStock As Integer, QtéFab As Double, TDon(), TLBx(), N As Integer, L As Long, _
      QtéStock As Double, QtéRequisePour1000000 As Double, QtéRequisePourFab As Double, LLBx As Integer
   ColQtéStock = CLsA.Colonnes("Qté en stock/Magasins externes").Index
   QtéFab = Val(Replace(TBxQteAProd.Text, ",", "."))
   TDon = CLsA.PlgTablo.Value
   ReDim TLBx(1 To UBound(TLigCompCol) + 1 - CMinComp, 1 To 5)
   For N = CMinComp To UBound(TLigCompCol)
      L = TLigCompCol(N): If L < 0 Then L = LCouA
      If L > 0 Then QtéStock = TDon(L, ColQtéStock) Else QtéStock = -999.99
      On Error Resume Next
      QtéRequisePour1000000 = TDon(LCouA, N)
      QtéRequisePourFab = QtéFab * QtéRequisePour1000000 / 1000000
      If Err Then QtéRequisePour1000000 = 1
      On Error GoTo 0
      If QtéRequisePour1000000 > 0 Then
         LLBx = LLBx + 1
         TLBx(LLBx, 1) = CLsA.Colonnes(N).Name
         TLBx(LLBx, 2) = StrNum(QtéStock, 7)
         TLBx(LLBx, 3) = StrNum(QtéRequisePour1000000, 7)
         TLBx(LLBx, 4) = StrNum(QtéRequisePourFab, 7)
         TLBx(LLBx, 5) = IIf(QtéRequisePourFab > QtéStock, "INSUFFISANT !", "Disponible.")
         End If: Next N
   ListBox1.List = TLBx
   End Sub
C'est simplement fantastique...... Un programme c'est comme l'homme, il n'y en a pas de parfait. Mais ça tend toujours vers la perfection.
Merci pour l'effort fournit avec moi. Je n'hésiterai pas à revenir.....
Agréable soirée.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je répond ici au message laissé sur mon profil car cette réponse est trop longue pour y figurer :

Le complément peut être installé sur le réseau aussi, soit sur le même dossier que le classeur d'application, soit sur un dossier dédié aux compléments. Il n'est plus connu d'Excel en tant que complément, mais s'il est ouvert il peut quand même être coché dans les référence disponibles dans le projet VBA du classeur d'application. Il est aussi possible d'installer directement dans celui ci tous les modules de service nécessaires (1 module standard de service et 12 modules de classe actuellement). Coté utilisation, remplacer CLsCAs.Création.ComboBoxLiée par New ComboBoxLiée. Pareil pour ControlsAssociés, et cochez la référence Microsoft Scripting Runtime.
 

sabagof

XLDnaute Junior
Bonjour.
Je répond ici au message laissé sur mon profil car cette réponse est trop longue pour y figurer :

Le complément peut être installé sur le réseau aussi, soit sur le même dossier que le classeur d'application, soit sur un dossier dédié aux compléments. Il n'est plus connu d'Excel en tant que complément, mais s'il est ouvert il peut quand même être coché dans les référence disponibles dans le projet VBA du classeur d'application. Il est aussi possible d'installer directement dans celui ci tous les modules de service nécessaires (1 module standard de service et 12 modules de classe actuellement). Coté utilisation, remplacer CLsCAs.Création.ComboBoxLiée par New ComboBoxLiée. Pareil pour ControlsAssociés, et cochez la référence Microsoft Scripting Runtime.
Merci beaucoup pour la promptitude.
Des fois en dehors du réseau je transmet l'application par mail ou par d'autres supports (clé usb..)... Dans ce cas est ce qu'on peut rendre exécutable l'application sans tenir compte de la configuration de l'ordinateur de destination ?
 
Haut Bas