Sortir un article du stock
Bonjour,
J'ai composé une facture pour un ami (pneus) et j'ai donc voulu automatiser un maximum.
tout fonctionne correctement puisque j'ai une liste des clients ainsi qu'une feuille réservée à l'entrée en stock des pneus. Lorsque j'appelle l'entrée n° xx j'ai automatiquement les coordonnées, prix, dimension sur ma facture. Ma feuille stock comprends encore d'autres colonnes avec e.a. Prix d'achat, remise etc.
Je voudrais que en indiquant la quantité de pneus que je prends dans le stock, cette même quantité soit inscrite dans la colonne (ici "O") afin de pouvoir sortir cela du stock.
Cerise sur le gâteau, si je pouvais également effacer ma ligne de stock lorsque celui ci est à zéro ... ce serait formidable.
Je vous remercie de votre aide et je joins copie de mon fichier.
https://www.cjoint.com/c/KHsoKzs8n3I
J'ai composé une facture pour un ami (pneus) et j'ai donc voulu automatiser un maximum.
tout fonctionne correctement puisque j'ai une liste des clients ainsi qu'une feuille réservée à l'entrée en stock des pneus. Lorsque j'appelle l'entrée n° xx j'ai automatiquement les coordonnées, prix, dimension sur ma facture. Ma feuille stock comprends encore d'autres colonnes avec e.a. Prix d'achat, remise etc.
Je voudrais que en indiquant la quantité de pneus que je prends dans le stock, cette même quantité soit inscrite dans la colonne (ici "O") afin de pouvoir sortir cela du stock.
Cerise sur le gâteau, si je pouvais également effacer ma ligne de stock lorsque celui ci est à zéro ... ce serait formidable.
Je vous remercie de votre aide et je joins copie de mon fichier.
https://www.cjoint.com/c/KHsoKzs8n3I
Configuration: Windows / Chrome 92.0.4515.159
3 réponses
Résumé de la discussion
Automatisation d'une facture avec VBA dans Excel pour synchroniser le stock: lors d'une vente, inscrire la quantité prélevée dans colonne O et supprimer la ligne lorsque le stock est à zéro. Plusieurs propositions visent à appeler la routine updstock(article, quantité) et écrire la valeur dans la colonne O via le décalage, par exemple offset(,14), tout en plaçant l’appel dans une Sub et en rétablissant Option Explicit. Pour avancer, il est conseillé de vérifier l'existence de l'article et de tester le code sur une copie du fichier afin d'éviter d'affecter le stock réel et d'engendrer des erreurs.
-
Contributeurbonjour,
quel est le soucis pour réaliser cela?-
Bonjour, mon soucis est que ne sais pas comment faire pour écrire la même quantité que sur la facture dans la colonne O de ma feuille "Stock" , sur bien entendu la même ligne que la ligne du produit en question.
sur le fichier que je vous ai envoyé, j'ai 15 lignes, elles continueront au fur et à mesure que j'entrerai du stock, mais si par exemple je facture le n° 14 avec 2 pneus, je ne sais pas alleer inscrire (en dehors de ma facture ) 2 sur la même ligne que le n° 14 et ans a colonne O
Merci de votre aide -
Contributeur@simkmiloù est écrit ce n°14? quelque part dans la facture? elle semble vide.
cela devrait s'intégrer dans quel code? -
@yg_beNon, le n° 14 est un exemple bien entendu et il se trouve en colonne A de la feuille Stock
je pense que ça devrait faire partie d'un nouveau module ou alors "archiver_factures" ? car je veux prendre la quantité se trouvant en B16-17-18-ou 19 de la facture que j'inscrit après avoir noté en A le numéro de l'article selon la feuille Stock et je veux aller mettre cette quantité en O sur la feuille Stock, mais sur la ligne spécifiée de mon article.
Ici dans l'exemple que je vous ai donné, je prends deux pneus n° 14 et sur la facture il va s'inscrire : Michelin ... 255/45/17 au prix de 175 .... Ensuite je met "2" dans la colonne quantité et j'aimerais que s'inscrive également 2 sur la ligne de l'article 14 de ma feuille Stock en colonne O
cela me permettrait de gérer le stock puisque sur cette feuille stock, j'ai une colonne entrées et lorsque j'aurais la quantité sortie, je pourrais avoir le stock de ce pneu ce jour.
Comme je le disais auparavant, le summum serait que lorsque mon stock du jour est à zéro, la ligne s'efface. Mais ce n'est pas nécessaire.
Un grand merci pour votre aide, j'espère que nous allons y arriver.
Bonne soirée. -
Contributeur@simkmildonc ce serait utile de créer une sub qui reçoit en paramètre le N° d'article et la quantité d'article, et qui ajoute la quantité en colonne O de stock?
-
Contributeur@yg_beun exemple:
Sub updstock(article As Integer, quantite As Integer) Dim cl As Range Set cl = Sheets("Stock").[a2] Do While cl <> article And cl <> "" Set cl = cl.Offset(1) Loop If cl = article Then cl.Offset(, 14) = cl.Offset(, 14) + quantite Else MsgBox ("article manquant") End If End Sub
ou bien ceci, qui supprime la ligne de stock quand on a tout consommé:Sub updstock(article As Integer, quantite As Integer) Dim cl As Range Set cl = Sheets("Stock").[a2] Do While cl <> article And cl <> "" Set cl = cl.Offset(1) Loop If cl = article Then cl.Offset(, 14) = cl.Offset(, 14) + quantite If cl.Offset(, 5) = cl.Offset(, 14) Then cl.EntireRow.Delete End If Else MsgBox ("article manquant") End If End Sub
-
-
Non, ça ne fonctionne pas ! pas de ta faute bien entendu, mais c'est moi qui ne comprends pas !!
j'ai ajouté Call updstock(14, 2) avant le End sub de mon code : rien ne se passe
j'ai oté mon end sub : ça na va pas
j'ai mis Call updstock(14, 2) avant sub updstock... : erreur
Je suis perdu mais je reviendrai demain la dessus
merci encore de ton aide.-
Contributeurce n'est pas le call qu'il faut placer en fin de module, c'est la déclaration de la sub, telle que proposée en #6.
n'hésite pas à montrer ce que tu as essayé: je peux difficilement le deviner.
un exemple complet à tester dans un nouveau module:option explicit private Sub updstock(article As Integer, quantite As Integer) Dim cl As Range Set cl = Sheets("Stock").[a2] Do While cl <> article And cl <> "" Set cl = cl.Offset(1) Loop If cl = article Then cl.Offset(, 14) = cl.Offset(, 14) + quantite If cl.Offset(, 5) = cl.Offset(, 14) Then cl.EntireRow.Delete End If Else MsgBox ("article manquant") End If End Sub Private Sub tst() Call updstock(7, 2) End Sub -
@yg_beBonjour,
décidément je pense être nul !
je viens d'essayer : j'ai placé ton code dans un nouveau module (ici module 2) et je veux le faire démarrer ... rien , il ne m'a donné aucun nom de macro.
Dois je placer ce module à l'intérieur de mon premier module ?
dois je créer un sub updstock() ?
Sinon, maintenant je comprends tout ton code : une boucle pour vérifier où se trouve l'article, si on ne trouve pas affichage de "article manquant" , sinon appeler updstock
mais je ne vois toujours pas où je peux intégrer ce code ?
A toute fins utiles je te joins à nouveau mon fichier, où tu peux vérifier mon code.
Merci encore
https://www.cjoint.com/c/KHtiTaJ14cI -
Contributeur@SimKmilsi tu veux démarrer via une macro, supprime le private devant
sub tst
.
sinon, tu positionnes le curseur dans lasub tst
, et tu fais f5. -
Contributeur@SimKmilj'ai regardé ton dernier fichier.
l'instructionCall updstock(14, 2)
doit se trouver à l'intérieur d'une sub, par exemple à la place de l'instructionSheets("Stock").Range("O" & ligne).Value = Sheets("Facture").Range("B16").Value. -
@yg_bemerci, j'essaie cela de suite
-
-
Contributeuralors
Call updstock(Sheets("Facture").Range("A16"),Sheets("Facture").Range("B16"))