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: 198
  • Capture inventaire.PNG
    Capture inventaire.PNG
    70.6 KB · Affichages: 52

issam salem

XLDnaute Junior
Prends ton temps
Moi aussi je bien de faire quelque chose pour l'autorisation dans les entrées / sorties et Transfer selon l'utilisateur (je l'ai oublié) c'est a dire que tout l'utilisateur de magasin doit faire les entres sorties de leur magasin sauf moi bien sur le chef 😆
j'ai une petite idée ms je sais pas comment le transférer au VBA.je bien de faire des recherches sur net et bien sur si vous avez une propositions et ci c'est après bien sur.
 

soan

XLDnaute Barbatruc
Inactif
Voici ce que fait ton code VBA actuel, pour le contrôle de la Quantité :

TB_Quantité_AfterUpdate

SI
la Quantité est non numérique OU SI Len(Quantité) = 0 ; donc :
SI Quantité non numérique OU SI champ vide (car pas de saisie) :

* message d'erreur : "Veuillez entrer une quantité valide !"
* TB_Quantité.SetFocus
* Call Vérifier_Saisie_Sortie

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

Bouton_Valider_Click

SI
la Quantité est non numérique OU SI Len(Quantité) = 0 ; donc :
SI Quantité non numérique OU SI champ vide (car pas de saisie) :

* message d'erreur : "Veuillez entrer une quantité valide !"
* TB_Quantité.SetFocus
* Call Vérifier_Quantité_Sortie

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

seule différence entre les 2 subs : l'une appelle Vérifier_Saisie_Sortie ;
l'autre appelle Vérifier_Quantité_Sortie


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

Vérifier_Saisie_Sortie

* Message = ""

* SI Titre = "Ajouter une Sortie" (= mode Ajout) :
-----SI Quantité > Stock actuel : Message = "Quantité > Stock actuel"
--SINON (= mode Modif) :
-----SI Quantité modifiée > Stock actuel : Message = "Qté modif > SA"

* SI Message <> "" : on affiche Message ; TB_Quantité.SetFocus ;
et : TB_Quantité = MonAncienneQuantité

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

Vérifier_Quantité_Sortie

* Message = ""

* SI Titre = "Ajouter une Sortie" (= mode Ajout) :
-----SI Quantité > Stock actuel : Message = "Quantité > Stock actuel"
--SINON (= mode Modif) :
-----SI Quantité modifiée > Stock actuel : Message = "Qté modif > SA"

* SI Message <> "" : on affiche Message et :
TB_Quantité = MonAncienneQuantité

=> seule différence : y'a pas de TB_Quantité.SetFocus

(plus haut, les tirets sont là seulement pour faire une indentation)

soan
 

soan

XLDnaute Barbatruc
Inactif
dans ton code VBA tu as mis :

If Not IsNumeric(Me.TB_Quantité.Value) Or Not Len(Me.TB_Quantité.Value) > 0 Then

pour une lecture plus facile, tu peux mettre à la place :

If Not IsNumeric(TB_Quantité) Or Len(TB_Quantité) = 0 Then


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

* dans le module d'un UserForm, le Me. est implicite ; c'est inutile de le préciser.

* pour TB_Quantité, ça utilise implicitement .Value (en lecture et en écriture).

* le contraire de > est <= ; or la longueur d'une chaîne de caractères n'est
jamais négative, elle est toujours positive ou nulle ➯ au lieu de Or Not .. > 0
c'est plus simple de mettre Or .. = 0


soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonjour issam,

désolé, hier j'étais fatigué, et j'ai écrit des petites erreurs dans mon post #153 ;
j'ai corrigé ces erreurs, relis la ligne qui est juste au-dessus du trait, puis celle
qui est juste sous le trait ; en effet, la réécriture plus courte de ton instruction
est :
If Not IsNumeric(TB_Quantité) Or Len(TB_Quantité) = 0 Then ; et dessous,
j'avais écrit « .Me » au lieu de « Me. » ; mais le « .Value » est bon ! :p
surtout, laisse comme c'est, et ne mets pas « Value. » ! 😜


soan
 

issam salem

XLDnaute Junior
Bonjour issam,

désolé, hier j'étais fatigué, et j'ai écrit des petites erreurs dans mon post #153 ;
j'ai corrigé ces erreurs, relis la ligne qui est juste au-dessus du trait, puis celle
qui est juste sous le trait ; en effet, la réécriture plus courte de ton instruction
est :
If Not IsNumeric(TB_Quantité) Or Len(TB_Quantité) = 0 Then ; et dessous,
j'avais écrit « .Me » au lieu de « Me. » ; mais le « .Value » est bon ! :p
surtout, laisse comme c'est, et ne mets pas « Value. » ! 😜


soan
Bonjour @soan
C'est pas grave je te souhaite une bonne santé.
OK je vais le faire tout de suite
 

soan

XLDnaute Barbatruc
Inactif
maintenant que j'ai bien compris c'qui a déjà été fait pour le contrôle Quantité,
je vais le réécrire à ma façon, et en corrigeant l'erreur due à la variable globale
MonAncienneQuantité ; en même temps, je vais aussi simplifier tout ça, mais
ça va être assez long, surtout qu'j'vais d'abord faire une longue pause ! alors
ne t'étonne pas si mon prochain post va beaucoup tarder ! ;) si j'réussis à
faire c'que j'prévois de faire, tu aimeras sûrement le résultat, et c'est aussi lié
à un changement spécial dans le UserForm que j'ai déjà fait ; mais j't'en dis
pas plus car je vais t'en laisser la surprise ! 😜


soan
 

issam salem

XLDnaute Junior
maintenant que j'ai bien compris c'qui a déjà été fait pour le contrôle Quantité,
je vais le réécrire à ma façon, et en corrigeant l'erreur due à la variable globale
MonAncienneQuantité ; en même temps, je vais aussi simplifier tout ça, mais
ça va être assez long, surtout qu'j'vais d'abord faire une longue pause ! alors
ne t'étonne pas si mon prochain post va beaucoup tarder ! ;) si j'réussis à
faire c'que j'prévois de faire, tu aimeras sûrement le résultat, et c'est aussi lié
à un changement spécial dans le UserForm que j'ai déjà fait ; mais j't'en dis
pas plus car je vais t'en laisser la surprise ! 😜


soan
Ok prend soin de toi et merci infiniment pour votre aide et votre compréhension
NB: j'aime bien les surprises lol Et je l'attendrai
 

soan

XLDnaute Barbatruc
Inactif
Bonjour issam,

lien fichier : https://mon-partage.fr/f/iO4L3F32/

1) sur la feuille "Inventaire", en ligne 6 :
Code article / Magasin = SM004.0032 / TE01 ; Stock Initial : 200 ;
Entrées / Sorties = 20 / 150 ; Stock actuel = 200 + 20 - 150 = 70

2)
sur la feuille "Sorties", en ligne 5 : même article / magasin ; Quantité (sortie)
= 150 ; sélectionne A5 ; bouton Modif ➯ le formulaire s'affiche ; oh ! voici le
changement spécial ! 😜

j'ai remonté le Stock actuel juste au-dessus de la Quantité ; ce champ n'est plus
un TextBox car j'en ai fait un Label ; motif : c'est pas une donnée à saisir, car
c'est juste une info.

oh, comme c'est bizarre ! le Stock actuel est 220 au lieu de 70 ! un bug ? non,
pas du tout, c'est exactement ce qu'il faut ! car si tu lis le label que j'ai ajouté
juste à droite, c'est le Stock actuel AVANT la sortie = 70 + 150 = 220 ; ou si
tu préfères : 200 + 20 = 220 ; ainsi, c'est comme si le champ Quantité était
vide à l'ouverture du UserForm, et que tu viens juste de saisir la Quantité de
150 ; remplace 150 par 221 ; clic / Valider ➯ erreur : « Quantité supérieure
au stock actuel
» (normal, n'est-ce pas ?) ; clic / OK ça a bien remis 150 à la
place de 221 ; remplace 150 par 160 et valide ➯ en E5, il y a bien 160, et
sur "Inventaire" : en K6, il y a bien 160 (au lieu de 150) ➯ en D6, il y a 60
(au lieu de 70) ; et : 200 + 20 - 160 = 60 : c'est OK ! 🙂

3) feuille "Sorties" ; clic / Modif ; remplace 160 par 140 ; valide ; en E5 : 140 ;
"Inventaire" ; en K6 : 140 ➯ en D6 : 80 ; et : 200 + 20 - 140 = 80 : OK ! 🙂

4) feuille "Sorties" ; clic / Modif ; remplace 140 par 300 ; valide erreur :
«
Quantité supérieure au stock actuel » ; clic / OK ➯ ça remet 140 au lieu
de 300 ; remplace 140 par 150
en E5 : 150 ; "Inventaire" ; en K6 : 150
➯ en D6 : 70 ; et : 200 + 20 - 150 = 70 : OK ! 🙂 (on est bien revenu à la situation
de départ, à l'ouverture du fichier ; mais cette fois : MonAncienneQuantité = 140)


pour ce qui concerne le bouton Modif, c'est tout ; mais sans rien changer,
fais ce qui est écrit dans le post qui va suivre
(ça va être un peu long à taper).


soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
1) sur la feuille "Inventaire", en ligne 7 :
Code article / Magasin = FV001.0006 / OA1 ; Stock initial : 4 ;
Entrées / Sorties : 0 / 0 ; Stock actuel = 4 + 0 - 0 = 4

2)
feuille "Sorties" ; clic / bouton Ajout ; N° Bon de sortie : 124 ; article : FV001.0006
➯ Magasin : OA01 ; Technicien : MAR ➯ Stock actuel : 4 : c'est bien l'même qu'en 1) ;
comme t'as pas encore saisi de Quantité, c'est bien 4 ; Quantité : 5 ; valide ➯ erreur :
« Quantité supérieure au stock actuel ! » ; clic / OK ça ne remet pas la valeur
de MonAncienneQuantité
(qui était 140) ; à la place : ça efface la saisie erronée 5 ;
saisis 4 et valide ; une nouvelle ligne a été ajoutée en ligne 4, avec les bonnes infos,
dont : Code article / Magasin : FV001.0006 / OA01 ; Quantité : 4

3)
"Inventaire" ; en K7 : 4 ; en D7 : 0 ; et : 4 + 0 - 4 = 0 : OK ! 🙂 "Sorties" ; Modif ;
remplace 4 par 3 et valide ➯ en E4 : 3 ; "Inventaire" ; en K7 : 3 ; en D7 : 1 ; et :
4 + 0 - 3 = 1 : OK ! 🙂 "Sorties" ; Modif ; remplace 3 par 0 et valide ➯ en E4 : 0 ;
"Inventaire" ; en K7 : 0 ; en D7 : 4 ; et : 4 + 0 - 0 = 4 : OK ! 🙂 (là aussi, on est revenu
à la situation de départ, à l'ouverture du fichier)


ne pars pas, c'est pas fini ! une surprise t'attend dans le post suivant ! 😜


soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
1) feuille "Sorties" ; la cellule active est A4, et la Quantité : 0 ; clic / bouton Couper
➯ « Voulez-vous réellement supprimer cette ligne ? » ; clic / Oui ➯ la ligne 4 est
supprimée, et les 3 autres lignes qui étaient en dessous sont remontées d'un cran ;
c'est une surprise car avant, le bouton Couper marchait seulement sur la feuille
"Inventaire" et pas sur la feuille "Sorties" ; mais si tu préfères que ça soit interdit
sur "Sorties", c'est vraiment très simple à faire ! tu n'auras qu'à me demander.

2) feuille "Sorties" ; sélectionne A5 ; Code article / magasin = SM004.0032 / TE01 ;
Quantité : 150 ; clic / Couper ➯ même demande de confirmation ; clic / Oui
la ligne 5 est supprimée (et la ligne 6 remonte) ; "Inventaire" ; en K6 : 0 (au lieu de 150) ;
en D6 : 220 ; et : 200 + 20 - 0 = 220 : OK ! 🙂 ainsi, Couper marche aussi bien
pour une nouvelle sortie (ajoutée en ligne 4) que pour une autre ligne. 😊

fais bien tous les tests, sans oublier de vérifier le résultat en feuille "Inventaire" !


soan
 

soan

XLDnaute Barbatruc
Inactif
côté code VBA, module UF_Sorties :

1) ne cherche pas la sub Vérifier_Quantité_Sortie() : je l'ai supprimée !

2) ne cherche pas la sub Vérifier_Saisie_Sortie() : je l'ai supprimée aussi !
au moins, comme ça, y'a plus d'risque de les confondre, pas vrai ? 😜 😁

3) Sub Bouton_Valider_Click() ; y'avait cette partie de code VBA :

VB:
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
    Exit Sub
End If

Call Vérifier_Quantité_Sortie
devine... oui ! t'as trouvé ! je l'ai supprimée aussi ! 😛 😁
c'est l'grand nettoyage par le vide, hein ? 🤣

4) ne cherche pas la sub TB_Quantité_AfterUpdate() : supprimée aussi ! 😂
quoi ? aussi ? ben oui, j't'ai bien dit qu'j'adore supprimer c'qui est inutile !

tu vas dire : « mais pourtant, les contrôles sur la Quantité marchent bien ! »
ben oui, c'est de la magie ! 😄 j'ai fait appel à un sorcier vaudou qui a
envoûté ton classeur Excel, tout simplement ! mais peut-être que si tu
étudies bien le code VBA, tu vas trouver où se cache le sortilège ? 🤪


soan
 

issam salem

XLDnaute Junior
1) sur la feuille "Inventaire", en ligne 7 :
Code article / Magasin = FV001.0006 / OA1 ; Stock initial : 4 ;
Entrées / Sorties : 0 / 0 ; Stock actuel = 4 + 0 - 0 = 4

2)
feuille "Sorties" ; clic / bouton Ajout ; N° Bon de sortie : 124 ; article : FV001.0006
➯ Magasin : OA01 ; Technicien : MAR ➯ Stock actuel : 4 : c'est bien l'même qu'en 1) ;
comme t'as pas encore saisi de Quantité, c'est bien 4 ; Quantité : 5 ; valide ➯ erreur :
« Quantité supérieure au stock actuel ! » ; clic / OK ça ne remet pas la valeur
de MonAncienneQuantité
(qui était 140) ; à la place : ça efface la saisie erronée 5 ;
saisis 4 et valide ; une nouvelle ligne a été ajoutée en ligne 4, avec les bonnes infos,
dont : Code article / Magasin : FV001.0006 / OA01 ; Quantité : 4

3)
"Inventaire" ; en K7 : 4 ; en D7 : 0 ; et : 4 + 0 - 4 = 0 : OK ! 🙂 "Sorties" ; Modif ;
remplace 4 par 3 et valide ➯ en E4 : 3 ; "Inventaire" ; en K7 : 3 ; en D7 : 1 ; et :
4 + 0 - 1 = 3 : OK ! 🙂 "Sorties" ; Modif ; remplace 3 par 0 et valide ➯ en E4 : 0 ;
"Inventaire" ; en K7 : 0 ; en D7 : 4 ; et : 4 + 0 - 0 = 4 : OK ! 🙂 (là aussi, on est revenu
à la situation de départ, à l'ouverture du fichier)


ne pars pas, c'est pas fini ! une surprise t'attend dans le post suivant ! 😜


soan
Bonjouuuur cher @soan alors jusqu’à la je fait tout les test du post 160 et 161 c'est génial ça marche très bien
 

Discussions similaires

Statistiques des forums

Discussions
312 428
Messages
2 088 328
Membres
103 814
dernier inscrit
Lolo280277