XL 2010 Transfert de quantité

issam salem

XLDnaute Junior
Bonjour;

Alors j'ai un projet de gestion du stock, je veux faire une option de transfert du stock entre magasin (voir photo userforme transfert) à partir de tableau inventaire (photo inventaire)
J’ai commencé a programmé le userforme transfert par exemple le remplit de combobox le recherche par magasin (code article+prévenance) etc...
Actuellement je veux programmé le commandeboutton transfert du stock (voir photo userforme transfert) pour le but de transfert la quantité transférée saisie sur le textbox de prévenance sélectionner vers la destination sélectionnes avec bien sur le mise à jour du quantité

Exemple sur photo userforme transfert:

J’ai le code article SM004.0032 de prévenance TE01 avec un stock prévenance de 200 kg, et la destination KH01
Alors je veux transferer la quantité 25 kg sur la destination KH01 avec la mise ajour sur le tableau inventaire
Alors le résultat fini c'est
Le stock actuel d'article SM004.0032 de magasin TE01 sera 200-25=175
Et le stock actuel d'article SM004.0032 de magasin kh01 sera 25 (la quantité transférée)
 

Pièces jointes

  • Capture userforme transfert.PNG
    Capture userforme transfert.PNG
    107 KB · Affichages: 199
  • Capture inventaire.PNG
    Capture inventaire.PNG
    70.6 KB · Affichages: 53

soan

XLDnaute Barbatruc
Inactif
@issam salem

désolé issam, je comprends bien quelle est ta situation ; mais si ton patron est pressé,
ça n'est pas un problème qui doit me concerner car tous les intervenants du site XLD
sont des personnes bénévoles, donc non rémunérées ; si j'étais sous les ordres de ton
patron et rémunéré par lui, il pourrait me demander un travail urgent, mais ce n'est
pas le cas ! je te rappelle ce point n° 2 de la Charte :


Ni obligation de résultat, ni délai.jpg

donc même si tu es ennuyé par le temps, ce que je comprends très bien, ne m'en parle
plus car ce ne pourrait être que contre-productif : tu risques de me stresser par rapport
au temps, mais si ça arrive et que je suis stressé, je sais que je ne pourrai pas faire du
bon travail ! et ça ne m'intéresse absolument pas de faire un travail bâclé et de très
mauvaise qualité !!!
je fais au mieux, comme ça vient au fur et à mesure ; chaque
chose en son temps, et tout problème qui survient en cours de route, même s'il est
inattendu et imprévisible, doit être résolu, sans considérations de délai.


----------------------------------------------------------------------------------------------

d'autre part, en programmation VBA, si on essaye d'aller trop vite, c'est là où on peut
faire du mauvais travail !
car des fois, faut savoir prendre du recul et mieux réfléchir
à ce qu'il faudrait faire plutôt que « de foncer tête baissée » ! et du coup, de vouloir
aller trop vite, ça risque de produire exactement l'inverse de ce qu'on voulait : ça ne va
pas du tout, car on avance dans une mauvaise direction ; alors que si on avait
pris par
exemple 2 jours pour mieux réfléchir au problème dans son ensemble, ces 2 jours de

« perdus » feraient gagner 10 jours sur la résolution globale de l'exo ; bien sûr, tu es
libre de demander l'aide d'un autre intervenant : je ne t'oblige à rien !

moi je veux bien continuer, mais à mon rythme ; et je veux aussi être libre du choix
de la direction à prendre
; par exemple : c'est impossible de continuer ton exo sans
résoudre d'abord le problème précédent, car ça arrive que le contrôle de quantité
empêche tout simplement de valider le UserForm des Sorties de stock ! et pour les

transferts de stock, c'est impossible de le faire correctement sans que les Entrées
et les Sorties de stock fonctionnent d'abord comme il faut ! (avec écriture « en dur »
des données, et sans formules qui bloquent car elles sont liées entre elles !)


----------------------------------------------------------------------------------------------

tu as écrit : « Franchement je sais pas quelle est la cause de ce bug »

??? alors là, j'ai pas compris, car je te l'ai écrit dans mon post #134 ;
dans le 1er paragraphe, j'ai noté :
«
c'est car la variable MonAncienneQuantité est une variable globale ; donc
elle a conservé sa valeur qui était 150 sur mon fichier (40 sur le tien) ; cette
valeur était correcte, et a utilement servi pour l'article "SM004.0032" ;
mais elle ne doit plus servir ensuite pour l'article "FV001.0006".
»
----------------------------------------------------------------------------------------------

ce qui ralentit aussi, c'est quand tu ne réponds pas aux questions ;
toujours dans mon post #134 précédent, j'ai aussi écrit clairement :
«
tu as bien trouvé l'endroit où l'erreur se produit : c'est bien dans la sub
Vérifier_Saisie_Sortie() ; bravo !!! puisqu'on y est : petite question :
pourquoi y a-t-il, juste au-dessus, la sub Vérifier_Quantité_Sortie() ?
elle est en double et est inutile, car j'ai vérifié qu'elle n'est jamais
appelée ! ou peut-être qu'elle est appelée dans ton vrai fichier ?
(si c'est pas le cas, dis-le moi, et on peut tous les deux supprimer
cette sub Vérifier_Quantité_Sortie() inutile !)
»
où donc est ta réponse là-dessus ? c'est important car ça sera bien plus
facile de continuer sans se demander à chaque fois qu'il y a un contrôle
de Quantité Sortie : « mais pourquoi donc y a-t-il 2 subs et pas qu'une
seule ? et est-ce bien l'une qui doit être appelée et pas l'autre ?
» ;
voilà pourquoi, si tu réponds : « c'est effectivement une erreur, la sub
Vérifier_Quantité_Sortie() est en double et peut être supprimée ;
tu peux garder la sub Vérifier_Saisie_Sortie() » ton exo sera plus
simple sans subs redondantes et inutiles ! si tu ne réponds pas à

cette question dans ton prochain post, je ne te répéterai pas cette
question, mais j'attendrai que tu y répondes pour continuer l'exo,

alors à toi de voir... (idem pour les autres questions que je pose :
si j'ai pas de réponse, je mets ton exo en standby et je passe à
un autre exo en attendant que tu répondes)


----------------------------------------------------------------------------------------------

je suis fatigué, alors pour ce soir, je vais arrêter ; je reprendrai demain,
et à mon rythme. 😜 (si ton patron est pressé, il devra se faire une raison, ou se
farcir lui-même tout le code VBA ! 😛)


de plus, quand j'avais commencé ton exo, je m'étais pas imaginé que

quasiment tout serait à reprendre !!! je veux bien continuer, mais
pas dans l'urgence ou des délais à respecter !

soan
 
Dernière édition:

issam salem

XLDnaute Junior
Bonjour @soan
Alors Je m'excuse si ma réponse vous a dérangé,Je sais qu'il y a d'autre exo a faire, et comme tu a dis
"en programmation VBA, si on essaye d'aller trop vite, c'est là où on peut
faire du mauvais travail ! "
Considérez-moi, je n'ai rien dit en commencer le exo et bien sur a votre rythme et selon votre temps

* j'ai pas concentré pour çà "la variable MonAncienneQuantité est une variable globale " dans votre dernier post.
-------------------------------------------------------------------------------------------------------
Pour la sub Vérifier_Quantité_Sortie() il appelé sur le bouton "Valider" de << Uf_Sorties>>
Code:
Private Sub Bouton_Valider_Click()
Dim Formule, Message As String, Réponse As Integer

'Contrôles
If Not Len(Me.TB_bs.Value) > 0 Then
    Message = "Veuillez entrer un numero de Sortie valide !"
    Réponse = MsgBox(Message, vbOKOnly + vbInformation, "Controle de saisie")
    Me.TB_bs.SetFocus
    Exit Sub
.....
.
.
Call Vérifier_Quantité_Sortie

et Pour la sub Vérifier_Saisie_Sortie() il appeler sur le code de textbox quantité:
alors ci tu clic sur le textbox quantité de userform "Uf_Sorties" tu auras ce code la
VB:
Private Sub TB_Quantité_AfterUpdate()
Dim Message As String, Réponse As Integer

If Not IsNumeric(Me.TB_Quantité.Value) Or Not Len(Me.TB_Quantité.Value) > 0 Then
    Message = "Veuillez entrer une quantité valide !"
    Réponse = MsgBox(Message, vbOKOnly + vbInformation, "Controle de saisie")
    Me.TB_Quantité.SetFocus
End If

Call Vérifier_Saisie_Sortie

End Sub
je sais que les deux fonction sont presque la même (a part le exit sub sur le dernier if de code de Sub Vérifier_Saisie_Sortie())
Alors j'ai appeler l'un sur le textbox et l'autre sur valider pour bien vérifier la quantité avant la validation lol Et c'est après des recherches sur Net (Vous êtes plus informé que moi dans ce domaine💪 --mois c'est juste un débutant)
mais comme je te dit dernier fois j'ai pas concentré pour l'erreur de quantité après la validation (40,0,150)
bonne début de journée et je m'excuse encore une fois.
issam
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
ah, alors tu as quand même compris ? car j'étais en train d'écrire un post pour
t'expliquer ce qu'est une variable globale ; c'est plus nécessaire, alors ?

tu sais la différence entre une variable globale et une variable locale ?
ou tu préfères que j'écrive un post pour t'expliquer ça ?


soan
 

issam salem

XLDnaute Junior
ah, alors tu as quand même compris ? car j'étais en train d'écrire un post pour
t'expliquer ce qu'est une variable globale ; c'est plus nécessaire, alors ?

tu sais la différence entre une variable globale et une variable locale ?
ou tu préfères que j'écrive un post pour t'expliquer ça ?


soan
Oui bien sur pour aller loin au programmation lol
tu peut aussi me faire un retour réponds sur les 2 sub
 

soan

XLDnaute Barbatruc
Inactif
alors voici quelle est la différence :

Dim lig& : idem que Dim lig As Long : déclare la variable lig de type Long

* si cette instruction VBA est placée dans une Sub X, la variable lig est locale à la Sub X ;
donc sa valeur n'est connue que par la Sub X, et elle est initialisée à 0 à l'entrée dans
la Sub X ; tout ceci est pareil pour une variable locale déclarée dans une Function.

* si cette instruction VBA est déclarée en dehors de toute Sub ou Function, elle doit être
placée tout en haut de page (juste après Option Explicit s'il est présent) ; lig est alors
une variable globale, de niveau module ; sa valeur est connue par toutes les Sub et
Function du module ; et donc d'une Sub (ou Function) à une autre, lig conserve sa
valeur ; voilà pourquoi la valeur 150 (ou 40) a été conservée (= gardée, pas concentrée 😜) ;
➯ lors de l'ajout d'une sortie, si tu mets une quantité trop grande, ça met la valeur
de MonAncienneQuantité ; c'était ok pour une modif, pas pour un ajout !


soan
 

issam salem

XLDnaute Junior
alors voici quelle est la différence :

Dim lig& : idem que Dim lig As Long : déclare la variable lig de type Long

* si cette instruction VBA est placée dans une Sub X, la variable lig est locale à la Sub X ;
donc sa valeur n'est connue que par la Sub X, et elle est initialisée à 0 à l'entrée dans
la Sub X ; tout ceci est pareil pour une variable locale déclarée dans une Function.

* si cette instruction VBA est déclarée en dehors de toute Sub ou Function, elle doit être
placée tout en haut de page (juste après Option Explicit s'il est présent) ; lig est alors
une variable globale, de niveau module ; sa valeur est connue par toutes les Sub et
Function du module ; et donc d'une Sub (ou Function) à une autre, lig conserve sa
valeur ; voilà pourquoi la valeur 150 (ou 40) a été conservée (= gardée, pas concentrée 😜) ;
➯ lors de l'ajout d'une sortie, si tu mets une quantité trop grande, ça met la valeur
de MonAncienneQuantité ; c'était ok pour une modif, pas pour un ajout !


soan
oooh ouiii c'est çà alors merci bien 🙏 🙏 🙏
 

soan

XLDnaute Barbatruc
Inactif
UserForm UF_Sorties

voici un petit résumé, suivi de quelques infos :

1) TextBox « TB_Quantité », AfterUpdate
Private Sub TB_Quantité_AfterUpdate()
Call Vérifier_Saisie_Sortie

2)
Bouton de commande « Valider », Click
Private Sub Bouton_Valider_Click()
Call Vérifier_Quantité_Sortie

3)
Sub Vérifier_Saisie_Sortie()

4)
Sub Vérifier_Quantité_Sortie()

------------------------------------------------------------------------------------------

noter que j'ai mis dans l'ordre logique : c'est d'abord la saisie de la Quantité,
puis la validation du formulaire.

------------------------------------------------------------------------------------------

noter que ça fait pareil en mode Modif ou Ajout : dans les 2 modes, la sub
Vérifier_Saisie_Sortie() est appelée après mise à jour de la Quantité ; et
la sub Vérifier_Quantité_Sortie() est appelée par un clic sur le bouton
« Valider » du UserForm
.

or c'est seulement en mode Modif que SI Quantité > Stock actuel : on affiche
un message d'erreur, puis on remet la Quantité précédente, cela grâce à
la variable globale MonAncienneQuantité
; mais il ne faut pas faire ça
en mode Ajout !!!


soan
 

Discussions similaires

Statistiques des forums

Discussions
312 836
Messages
2 092 650
Membres
105 478
dernier inscrit
tim51