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

ChTi160

XLDnaute Barbatruc
Re
bonsoir mon Ami soan
Non tu es parti du fichier d'issam et je viens de comprendre que tu as mis le fichier que tu as modifié en lien au post #32 . c'est ce que je voulais.
Excuses ! Je n'avais pas vu Lol
Quel travail tu fais quand tu t'y mets !
Merci
Bonne fin de soirée
Jean marie
 

issam salem

XLDnaute Junior
Bonjour @soan
alors j'ai tester le code et j'ai un petit problème sur le tableau d'inventaire
lorsque en fait l Transfer la formulaire de stock actuel est supprimé (c'est logique car en modifier la valeur de cellule)
alors le problème ci j'ai ajouter un entrée ou sortie pour cette transfert le stock actuel ne bouge pas voir l'exemple d'image ci-joint
voir la ligne en rouge j'ai :
le stock actuel :50
le stock initial:45
l'entré:12
sortie:30
alors normalement la formulaire c'est :stock actuel= stock initial+les entrées-les sorties
c a dire: 45+12-30=27 est pas 50
Capture Inventaire.PNG


voila le code pour ajouter un nouveau article sur le tableau inventaire
ci t'u as une proposition et merci d'avance

VB:
Sub Ecrire_Pièces()
Dim MesLignes, MaLigneEntrée, MaLigneSortie, MonSeuilAlerte As Integer
Dim MonLibellé, Mareference, MaCatégorie, MonDescriptif, MonStockage, MesObservations, Mesmagasin As String
Dim Formule As String, MonStockInitial As Single
On Error GoTo 1
With UF_Pièces
    If .Titre.Caption = "Ajouter une Pièce" Then
        ' AJOUT *******************************************************
        ModeLigne = "Ajout"
        MaLigne = Range("Pièces").Row + 1
    Else
        'MODIF *******************************************************
        ModeLigne = "Modif"
    End If
    
    MonLibellé = .TB_Libellé.Value
    MaCatégorie = .CB_Catégorie.Value
    MonStockInitial = .TB_Stock_Initial.Value
    MonSeuilAlerte = .TB_Seuil_Alerte.Value
    MonDescriptif = .TB_Descriptif.Value
    Mareference = .TB_Reference.Value
    MonStockage = .TB_Stockage.Value
    MesObservations = .TB_Observations.Value
    Mesmagasin = .TB_Magasin
    
End With

Sheets("Inventaire").Activate
Call Déprotéger

If ModeLigne = "Ajout" Then
    Application.ScreenUpdating = False
    With Sheets("Inventaire")
        .Rows(MaLigne).Select
        Selection.Copy
        ActiveCell.EntireRow.Insert Shift:=xlDown
        Application.CutCopyMode = False
    End With
End If

With Sheets("Inventaire")
  
    'Libellé (colonne A)
    .Range("A" & MaLigne).Value = MonLibellé
    
    'Catégorie (colonne B)
    .Range("B" & MaLigne).Value = MaCatégorie
    
    'stock initial (colonne C)
    .Range("C" & MaLigne).Value = MonStockInitial
    
   'Stock actuel (colonne D)
    '=C4+J4-K4
    Formule = "=C" & MaLigne & "+J" & MaLigne & "-K)" & MaLigne
    .Range("D" & MaLigne).FormulaLocal = Formule
        
    'Car 1 (colonne E)
    .Range("E" & MaLigne).Value = MonSeuilAlerte
        
    'Car 2 (colonne F)
    .Range("F" & MaLigne).Value = MonDescriptif
    
    'Car 2 (colonne G)
    .Range("G" & MaLigne).Value = Mareference
    
   'Car 3 (colonne H)
    .Range("H" & MaLigne).Value = MonStockage
    
     'Observations (colonne I)
    .Range("I" & MaLigne).Value = MesObservations
    
    'Entrées (colonne J)
    '=SOMME.SI(Entrées!C:C;A:A;Entrées!E:E)
    Formule = "=SOMME.SI.ENS(Entrées!E:E;Entrées!C:C;A:A;Entrées!I:I;L:L))"
    .Range("J" & MaLigne).FormulaLocal = Formule

   'Sorties (colonne K)
    '=SOMME.SI(Sorties!B:B;A:A;Sorties!D:D)
    Formule = "=SOMME.SI.ENS(Sorties!E:E;Sorties!C:C;A:A;Sorties!G:G;L:L))"
    .Range("K" & MaLigne).FormulaLocal = Formule
    
     'Observations (colonne L)
    .Range("L" & MaLigne).Value = Mesmagasin
      
    .Range("A" & MaLigne).Select
    
End With
1
Call Protéger

'Changement d'un libellé de Pièce impliquant une mise à jour des Entrées et Sorties et éventuellement de la valeur par défaut
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
If ModeLigne <> "Modif" Or MonLibellé = MonAncienLibellé Then GoTo Fin

Maj_Entrées:
'************
MaLigneEntrée = Range("Entrées").Row + 1
Application.ScreenUpdating = False

With Sheets("Entrées")
    .Unprotect
Boucle_MAJ_Entrées:
    If Len(.Range("A" & MaLigneEntrée).Value) = 0 Then GoTo Maj_Sorties
    If .Range("C" & MaLigneEntrée).Value = MonAncienLibellé Then .Range("C" & MaLigneEntrée).Value = MonLibellé
    MaLigneEntrée = MaLigneEntrée + 1
    GoTo Boucle_MAJ_Entrées
End With

Maj_Sorties:
'************
MaLigneSortie = Range("Sorties").Row + 1
Application.ScreenUpdating = False

With Sheets("Sorties")
    .Unprotect
Boucle_MAJ_Sorties:
    If Len(.Range("A" & MaLigneSortie).Value) = 0 Then GoTo Fin_Boucle_MAJ
    If .Range("C" & MaLigneSortie).Value = MonAncienLibellé Then .Range("C" & MaLigneSortie).Value = MonLibellé
    MaLigneSortie = MaLigneSortie + 1
    GoTo Boucle_MAJ_Sorties

Fin_Boucle_MAJ:
    .Protect DrawingObjects:=True, Contents:=True, Scenarios:= _
        False, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
End With

If Range("VD_Pièce").Value = MonAncienLibellé Then Range("VD_Pièce").Value = MonLibellé
    
Fin:
Sheets("Inventaire").Activate
End Sub
 

issam salem

XLDnaute Junior
Alors un autre problème sur l'ajout de nouveau Transfer sur le colonne seuil d’alerte ("il a saisie seuil d’alerte au lieu de 2") est pour stock actuel il a saisie 15 même moi j'ai fait le transfert de 10 sur quantité transférée (je sais pas La source de 5 quantités).
je peut t'envoyer le fichier a nouveau avec les feuilles d'entrées / sorties pour voir ce problème et le problème de formulaire sur le stock actuel et merci d'avance ???
Capture nouveau transfert.PNG
 

issam salem

XLDnaute Junior
@soan
alors pour cette ligne
VB:
If lgD = 26 Then '26 = n° de la ligne en bleu clair (en bas)
la feuille inventaire peut contient plus de 30 000 articles a traité selon les articles de société.
pour cela je fait le code pour insérer des lignes.
pour ligne en bleu clair cet juste comme champ ou decoration de tableau pas plus
 

soan

XLDnaute Barbatruc
Inactif
@issam salem et @ChTi160

Bonjour issam, Jean-marie,

j'ai actuellement de gros problèmes de démarches administratives à remplir,
qui traînent en longueur, et ce n'est pas encore fini, loin de là ! au train où
ça en est, ça risque même de pas être terminé fin janvier 2021 ! :confused:

ça explique pourquoi je tarde tellement à vous répondre : je n'ai rien pu
faire hier sur le forum (ou presque).


soan
 

soan

XLDnaute Barbatruc
Inactif
@ChTi160

dans ton post #48, tu demandes ce que sont les termes « Actuel » et « Initial » ; moi non
plus, au début, je n'avais pas bien compris la différence entre les deux stocks ; en fait :

Stock Initial = stock au début de l'exercice comptable, qui ne coïncide pas forcément avec
l'année civile, donc qui n'est pas forcément le 1er janvier ; par exemple, ça peut très bien être
un 1er septembre ; c'est aussi le stock qui a été déterminé lors de l'inventaire, c'est-à-dire
lorsque le responsable du stock a soigneusement décompté physiquement le nombre d'articles
du stock ; c'est là où l'on peut s'apercevoir qu'il y a eu des « produits démarqués » ; ça n'a rien
à voir avec les produits dégriffés des grandes marques, lolllllll ! car c'est un gros euphémisme
pour « produits volés » (subtilisés par des clients, voire même par des employés "indélicats").

on peut aussi constater que des articles sont tellement abîmés qu'ils sont devenus invendables ;
exemple : un produit qui était censé être conservé au sec, mais qui a pris l'eau à cause d'une
malencontreuse fuite dans le toit ; ne rigole pas : y'a eu de grands travaux de réfection dans
mon supermarché, dont une réparation du toit qui fuyait et en plus risquait de s'effondrer !!!
tu connais les crêpes Suzettes ? ben t'as failli avoir une crêpe Soan !!! :p (bien aplatie, la crêpe,
comme au stade de Furiani)


autre exemple : un produit a été bêtement écrabouillé par un cariste lors de ses manœuvres
de manutentions ; rappel : le cariste est celui qui conduit un petit engin, genre chariot, pour
prendre et déplacer des palettes de produits :


Cariste.jpg


lors du jour de l'inventaire, il n'y a ni Entrée ni Sortie ; donc :

Stock Actuel = Stock Initial + Entrées - Sorties
Stock Actuel = Stock Initial + 0 - 0
Stock Actuel = Stock Initial

oui, pas besoin d'une calculette ; on peut même faire
le calcul de tête, comme à l'ancienne ! 😜


soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
@ChTi160

dans ton post #51, tu as écrit : « Tu fais donc des calculs d'ajout et retrait à partir
de la somme Initiale et non Actuelle ? »

exactement, tu as tout compris ! 👍 mais je comprends ta question vu qu'issam
avait écrit : « stock initial = stock actuel » ; bien que ce soit équivalent au sens
mathématique, ça aurait été plus juste d'écrire « stock actuel = stock initial »,
car c'est selon la chronologie des événements : il y a d'abord le stock initial (qui
est déterminé comme on l'a vu plus haut par l'inventaire physique), puis il y a
les Entrées et Sorties de stock, qui font que Stock Actuel = Stock Initial + Total
des Entrées - Total des Sorties.

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

sur la 1ère ligne de données du tableau de la feuille "Inventaire" (= ligne 4) :

* en A4, le Code article est : « SM004.0032 » (lire aussi B4 et F4:H4 = des infos sur
l'article concerné : "Catégorie", puis "Descriptif", "Référence", "Unité de mesure").

* en E4, le Seuil d'alerte est : 10 ; donc si la quantité en stock après une Sortie tombe
à 10 ou en dessous, ça détermine qu'on doit faire une nouvelle commande, et même,
ça peut arriver que cette nouvelle commande soit déclenchée automatiquement, par
exemple dans les entrepôts hyper-automatisés (notamment ceux des constructeurs
automobiles, ou ceux des supermarchés).

* en C4, on a ici notre Stock initial en début d'exercice comptable : 330 ; en principe,
il ne doit pas changer et rester le même jusqu'en fin d'exercice comptable ; il sera
alors mis à jour lors de l'inventaire qui sera fait à cette date.

* d'habitude, on voit plutôt les 2 colonnes Entrées et Sorties, puis la colonne Stock ;
et on calcule : Stock = Stock initial + Entrées - Sorties ; mais ici, la colonne Stock
est à gauche des 2 colonnes Entrées et Sorties, et a le nom "Stock Actuel" ; c'est
cette différence qui fait qu'au début, j'avais pas bien compris le système utilisé.
(issam n'avait donné aucune info à ce sujet !)

* en J4 : Total des Entrées = 20 ; en K4 : Total des Sorties = 150

* en D4 : Stock Actuel = Stock Initial + Entrées - Sorties
= 330 + 20 - 150 = 200

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

donc en lisant la ligne de gauche à droite, on peut dire :

le Stock Initial était de 330 en début d'année ; il est maintenant de 200
(Stock Actuel) ; les Entrées ont été de 20 et les Sorties de 150.

seul hic, mais de taille : issam a « oublié » de noter qu'il a utilisé 200 Kg
pour sa consommation personnelle, donc en réalité, Stock Actuel = 0
(n'est-ce pas, issam ? 😜)

j'préfère éviter de demander quel genre de produit se cache réellement
sous la dénomination « ELECTRODE RUTILE 6013 DIAM3,2 » ! :p
j'suis persuadé qu'ça doit être très électrisant et énergétique ! :rolleyes:
(je blague, hein, issam ?)

@issam salem : voici tes 20 Kg de bicarbonate de soude. 😀


soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
@issam salem (réponse à ton post #55)

tu écris que la ligne en bleu clair (celle du bas, ligne 26 ; pas celle de la ligne 3 des en-têtes)
est juste une ligne de décoration du tableau, rien de plus ; dans c'cas, ça signifie que tu n'y
inscriras rien, et donc ça ne gênera pas la détection de la dernière ligne utilisée du tableau
(actuellement la ligne 10, sur mon dernier fichier, qui est celui du post #32) ; d'autre part,
dis-moi clairement si tu préfères qu'on enlève le test de limite de tableau plein pour ce
tableau de la feuille "Inventaire" ; et préfères-tu aussi qu'on enlève le test de limite de
tableau plein pour le tableau de la feuille "Transfert" ? si oui, ça va beaucoup simplifier
le code VBA, sur ces 3 points (entre les 2 lignes de tirets) :

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

a) enlever le test qui est par rapport à la ligne 26 (de la feuille "Inventaire").

b) enlever le test qui est par rapport à la ligne 24 (de la feuille "Transfert").

c) la sub UndoOpInv() devient inutile ; son but est d'annuler ce qui a été écrit par la sub
CommandButton1_Click() (bouton "Transfert du stock" du UF Transfer), dans ce cas :

* Feuille "Inventaire" :

ligne source trouvée (celle du magasin Provenance) ➯ écriture du Transfert (la ligne du
magasin Destination étant soit une ligne déjà existante, soit une nouvelle ligne ajoutée
en fin de tableau).

* Feuille "Transfert"

on se rend compte que le tableau est plein ; donc on ne peut pas y écrire le Transfert ;
et pour que ça reste cohérent entre les 2 feuilles, on doit annuler le Transfert qui a
été écrit sur la feuille "Inventaire".

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

noter que si le tableau est plein en feuille "Inventaire" : on n'écrit rien sur la feuille
"Inventaire", et comme on n'appelle pas la sub LigneTransfert(), il n'y a pas eu
d'écriture du Transfert en feuille "Transfert", donc il n'y a pas d'écriture à annuler.

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

tu as écrit : « la feuille inventaire peut contenir plus de 30 000 articles »

donc ça peut largement tenir sur une feuille de calcul puisque le n° ligne maximum
d'une feuille Excel est 1 048 576 ! même si on prévoit très large et que l'activité de
ton entreprise est décuplée, ça ira encore : 30 000 × 10 = 300 000 ; et 300 000
est encore très inférieur à 1 048 576.

par contre, si tu veux détailler tes 3,5 millions de variétés de bicarbonate de soude,
il vaut mieux utiliser plus d'une feuille ! 😜 (allô tonton, pourquoi tu tousses ? :p)

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

au cas où tu voudrais garder une limite pour tableau plein, et pour 40 000 articles,
par exemple, alors il te suffit de mettre :

VB:
If lgD = 40004 Then '40004 = n° de la ligne en bleu clair (en bas)
  MsgBox "Le tableau en feuille Inventaire est plein !", 48
  lgD = 0: Exit Sub 'on fait rien, et on sort de la sub !
End If
eh oui, 40004 et pas 40000, car il faut tenir compte des 3 premières lignes de la
feuille de calcul (dont la ligne 3 des en-têtes du tableau = 1ère ligne en bleu clair),
et de la dernière ligne décorative (ta 2ème ligne en bleu clair).

j'ai choisi 40 000 car tu as écrit « plus de 30 000 articles », sans préciser si c'est
32 000 articles maximum, ou 36 000, ou 38 000 ? ou peut-être 40 000 ? ou bien
50 000 ? ou 60 000 ? va savoir, quand c'est pas précisé ! :rolleyes:

(j'imagine bien que c'est pas l'infini, mais quand même, les possibilités sont nombreuses ! 😜)


soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
@issam salem

j'suis fatigué, alors j'vais aller m'reposer ! 😴 😴 😴

j'répondrai bien plus tard à tes posts #47 et #50.

ça va être très long, car en plus je vais étudier ton code VBA du post #47,
afin notamment de vérifier les éventuelles « interférences » avec mon
propre code VBA.

si c'est possible, j'essayerai d'optimiser ta sub Ecrire_Pièces() ; tu aurais
pu préciser qu'elle est dans le module Ecriture_Lignes, et à partir de la
ligne n° 154 ; comme tu ne l'as pas indiqué, j'ai perdu du temps pour
faire une recherche. :rolleyes:

je pense pas que je pourrai te répondre avant ce soir ; ou peut-être
même avant demain soir (car en plus, affaires persos en cours).


soan
 

Discussions similaires

Statistiques des forums

Discussions
312 348
Messages
2 087 510
Membres
103 570
dernier inscrit
patrickb83p