Gestion de Stock Macro
Je viens vers vous car j'ai besoin d'aide pour des macros.
Je suis en train de créer un fichier de gestion de stock pour ma compagne. J'aimerais que lorsque je remplie la fiche entrée ou sortie les quantités soient enlever ou ajouter dans l'onglet stock et que les infos de sorties et entrées soient transmises dans l'onglet journal de bord et vide automatiquement la feuille entrée ou sortie.
Bonsoir,
As tu deja un code a soumettre ?
As tu deja une trame de code?
Cdt,
Je suis vraiment nul en macro. J'ai commande des livres pour apprendre mais je pense que j'en ai pour quelque temps avant de tout comprendre
Je jette un cp d oeil
Cdt,
Merci bcp de jeter un oeil
Bonsoir,
Voila ce que vous souhaitiez.
J'ai commenté pour que vous puissiez comprendre.
Voila le fonctionnement :
Sur Stock :
Il y a un bouton "MAJ des articles" => Cliquez dessus et toutes les fournitures en stocks sont remplies dans des listes déroulantes dans Entrée et Sortie afin de faciliter la saisie
Entrée:
Choix de la fourniture dans la liste déroulante
Saisie qté
saisie date
Cliquez sur image entrée
==> MAJ des données dans stock + journal de bord
Sortie:
Choix de la fourniture dans la liste déroulante
Saisie qté
saisie date
Cliquez sur image sortie
==> MAJ des données dans stock + journal de bord
Ps vous aviez oublié la date dans journal de bord je l'ai ajouté !
Voici le code, merci de votre retour :
Insérez le code dans Visual Basic
Sub sortie_stock()
'by VB_TRoyes le 26/11/2013
'je definie la dernière ligne
derlig = Sheets("Sortie").Cells(Cells.Rows.Count, "A").End(xlUp).Row
derligstock = Sheets("Stock").Cells(Cells.Rows.Count, "A").End(xlUp).Row
derligjourn = Sheets("Journal de bord").Cells(Cells.Rows.Count, "A").End(xlUp).Row
' Sortie ====> Stock
'je parcours les lignes des entrées
For Each c In Sheets("Sortie").Range("A4:A" & derlig)
'je parcours les lignes des stocks
For Each d In Sheets("Stock").Range("A4:A" & derligstock)
'si article stock = article entrée alors
If c = d Then
'valeur stock + valeur entrée
d.Offset(0, 5) = d.Offset(0, 5) + c.Offset(0, 1)
End If
Next
Next
' Sortie ====> Journal
'je parcours les lignes des entrées
For Each c In Sheets("Sortie").Range("A4:A" & derlig)
'je saisie que c'est une entrée
Sheets("Journal de bord").Range("A" & derligjourn + 1).Value = "Sortie"
'je saisie la designation
Sheets("Journal de bord").Range("A" & derligjourn + 1).Offset(0, 1) = c
'je saisie la quantité
Sheets("Journal de bord").Range("A" & derligjourn + 1).Offset(0, 2) = c.Offset(0, 1)
'je saisie la date
Sheets("Journal de bord").Range("A" & derligjourn + 1).Offset(0, 5) = c.Offset(0, 4)
Next
'après les entrées je supprime mes lignes
DLig = Sheets("Sortie").Range("B" & Rows.Count).End(xlUp).Row
' Pour chaque ligne de la dernière à la 4ème je les supprime
For Lig = DLig To 4 Step -1
Rows(Lig).Delete
Next
MsgBox "Sortie de stock terminée"
End Sub
Sub entree_stock()
'je definie la dernière ligne
derlig = Sheets("Entrée").Cells(Cells.Rows.Count, "A").End(xlUp).Row
derligstock = Sheets("Stock").Cells(Cells.Rows.Count, "A").End(xlUp).Row
derligjourn = Sheets("Journal de bord").Cells(Cells.Rows.Count, "A").End(xlUp).Row
' Entrée ====> Stock
'je parcours les lignes des entrées
For Each c In Sheets("Entrée").Range("A4:A" & derlig)
'je parcours les lignes des stocks
For Each d In Sheets("Stock").Range("A4:A" & derligstock)
'si article stock = article entrée alors
If c = d Then
'valeur stock + valeur entrée
d.Offset(0, 4) = d.Offset(0, 4) + c.Offset(0, 1)
End If
Next
Next
' Entrée ====> Journal
'je parcours les lignes des entrées
For Each c In Sheets("Entrée").Range("A4:A" & derlig)
'je saisie que c'est une entrée
Sheets("Journal de bord").Range("A" & derligjourn + 1).Value = "Entrée"
'je saisie la designation
Sheets("Journal de bord").Range("A" & derligjourn + 1).Offset(0, 1) = c
'je saisie la quantité
Sheets("Journal de bord").Range("A" & derligjourn + 1).Offset(0, 2) = c.Offset(0, 1)
'je saisie la date
Sheets("Journal de bord").Range("A" & derligjourn + 1).Offset(0, 5) = c.Offset(0, 4)
Next
'après les entrées je supprime mes lignes
DLig = Sheets("Entrée").Range("B" & Rows.Count).End(xlUp).Row
' Pour chaque ligne de la dernière à la 4ème je les supprime
For Lig = DLig To 4 Step -1
Rows(Lig).Delete
Next
MsgBox "Entrée en stock terminée"
End Sub
Sub ajout_art()
Range("A4").Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWorkbook.Names.Add Name:="base_art", RefersToR1C1:="=Stock!R4C1:R5C1"
Sheets("Entrée").Select
Range("A4").Select
Range(Selection, Selection.End(xlDown)).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=base_art"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Sheets("Sortie").Select
Range("A4").Select
Range(Selection, Selection.End(xlDown)).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=base_art"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Sheets("Stock").Select
Range("A4").Select
MsgBox "Mise à jour de la liste des articles effectuée avec succès !"
End Sub
Cdt,
Merci je vais regarder. Je vous tiens au courant
Bonjour,
Une solution avec barre personnalisée, Userforms et biensur VBA
barre personnalisée sous la barre complément
2 userforms : 1 pour l'ajout d'un article
2 pour les opérations sur le stock
les feuilles (entrée et sortie) deviennent inutile.
Bonne réception.
Bonjour le fil, salut Dim59
Pourquoi vouloir utiliser du VBA
A+
VB_troyes,
j'adore vraiment ce que tu as fais et cela me correspond. Par contre je rencontre un problème, quand je vais sur l'onglet "STOCK" et que je rajoute un produit puis mise à jour. Le produit rajoutait ne se retrouve pas dans la liste déroulante des entrées et sorties.
Aurait il moyen que dans le journal de bord la date où je vais l'entrée ou la sortie se mette automatiquement.
D'avance merci déjà pour l'aide que vous m'apporter.
Quelqu'un pour m'aider pour finir mon fichier à partir de la version de VB_troyes?
Bonsoir,
Voici le code pour la correction de l'alimentation des listes déroulantes.
Il faut remplacer la fonction: Sub ajout_art.
Autre point concernant la date, vous voulez qu'a la saisie de la désignation la date du jour apparaisse ?
Sub ajout_art()
Range("A4").Select
Range(Selection, Selection.End(xlDown)).Select
lign_der_select = Range("A" & Rows.Count).End(xlUp).Row
ActiveWorkbook.Names.Add Name:="base_art", RefersToR1C1:="=Stock!R4C1:R" & lign_der_select & "C1"
Sheets("Entrée").Select
Range("A4").Select
Range(Selection, Selection.End(xlDown)).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=base_art"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Sheets("Sortie").Select
Range("A4").Select
Range(Selection, Selection.End(xlDown)).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=base_art"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Sheets("Stock").Select
Range("A4").Select
MsgBox "Mise à jour de la liste des articles effectuée avec succès !"
End Sub
Rebonsoir,
Voici les codes de l'entrée et de la sortie MAJ.
Tu peux donc supprimer les colonnes dates dans entrée et sortie.
Il vient inscrire dans le journal la date ou la sortie/entrée est faite.
Cdt,
Sub sortie_stock()
'je definie la dernière ligne
derlig = Sheets("Sortie").Cells(Cells.Rows.Count, "A").End(xlUp).Row
derligstock = Sheets("Stock").Cells(Cells.Rows.Count, "A").End(xlUp).Row
derligjourn = Sheets("Journal de bord").Cells(Cells.Rows.Count, "A").End(xlUp).Row
' Sortie ====> Stock
'je parcours les lignes des entrées
For Each c In Sheets("Sortie").Range("A4:A" & derlig)
'je parcours les lignes des stocks
For Each d In Sheets("Stock").Range("A4:A" & derligstock)
'si article stock = article entrée alors
If c = d Then
'valeur stock + valeur entrée
d.Offset(0, 5) = d.Offset(0, 5) + c.Offset(0, 1)
End If
Next
Next
' Sortie ====> Journal
'je parcours les lignes des entrées
For Each c In Sheets("Sortie").Range("A4:A" & derlig)
'je saisie que c'est une entrée
Sheets("Journal de bord").Range("A" & derligjourn + 1).Value = "Sortie"
'je saisie la designation
Sheets("Journal de bord").Range("A" & derligjourn + 1).Offset(0, 1) = c
'je saisie la quantité
Sheets("Journal de bord").Range("A" & derligjourn + 1).Offset(0, 2) = c.Offset(0, 1)
'je saisie la date
Sheets("Journal de bord").Range("A" & derligjourn + 1).Offset(0, 5) = Date
Next
'après les entrées je supprime mes lignes
DLig = Sheets("Sortie").Range("B" & Rows.Count).End(xlUp).Row
' Pour chaque ligne de la dernière à la 4ème je les supprime
For Lig = DLig To 4 Step -1
Rows(Lig).Delete
Next
MsgBox "Sortie de stock terminée"
End Sub
Sub entree_stock()
'je definie la dernière ligne
derlig = Sheets("Entrée").Cells(Cells.Rows.Count, "A").End(xlUp).Row
derligstock = Sheets("Stock").Cells(Cells.Rows.Count, "A").End(xlUp).Row
derligjourn = Sheets("Journal de bord").Cells(Cells.Rows.Count, "A").End(xlUp).Row
' Entrée ====> Stock
'je parcours les lignes des entrées
For Each c In Sheets("Entrée").Range("A4:A" & derlig)
'je parcours les lignes des stocks
For Each d In Sheets("Stock").Range("A4:A" & derligstock)
'si article stock = article entrée alors
If c = d Then
'valeur stock + valeur entrée
d.Offset(0, 4) = d.Offset(0, 4) + c.Offset(0, 1)
End If
Next
Next
' Entrée ====> Journal
'je parcours les lignes des entrées
For Each c In Sheets("Entrée").Range("A4:A" & derlig)
'je saisie que c'est une entrée
Sheets("Journal de bord").Range("A" & derligjourn + 1).Value = "Entrée"
'je saisie la designation
Sheets("Journal de bord").Range("A" & derligjourn + 1).Offset(0, 1) = c
'je saisie la quantité
Sheets("Journal de bord").Range("A" & derligjourn + 1).Offset(0, 2) = c.Offset(0, 1)
'je saisie la date
Sheets("Journal de bord").Range("A" & derligjourn + 1).Offset(0, 5) = Date
Next
'après les entrées je supprime mes lignes
DLig = Sheets("Entrée").Range("B" & Rows.Count).End(xlUp).Row
' Pour chaque ligne de la dernière à la 4ème je les supprime
For Lig = DLig To 4 Step -1
Rows(Lig).Delete
Next
MsgBox "Entrée en stock terminée"
End Sub
Merci beaucoup pour votre aide. J'ai gagner pas mal de temps grâce à vous. MERCI
Dim59 a écrit :Merci beaucoup pour votre aide. J'ai gagner pas mal de temps grâce à vous. MERCI
Au plaisir.
Profites des commentaires pour comprendre le code
n hesites pas a toucher le code, essayer de manipuler y'a que comme cela qu'on s'y fait
Bonjour,
Je suis en train d'utiliser la gestion de stock mais je viens de m'apercevoir d'un léger problème. Lorsque je vais des entrées ou des sorties, il n'y a que la première ligne qui est transmise dans le journal de bord.
Y'a'il une ligne à changer dans le code?
Dim59 a écrit :Bonjour,
Je suis en train d'utiliser la gestion de stock mais je viens de m'apercevoir d'un léger problème. Lorsque je vais des entrées ou des sorties, il n'y a que la première ligne qui est transmise dans le journal de bord.
Y'a'il une ligne à changer dans le code?
Certainement, j'espère pour toi que Vb_troyes sera toujours là pour t'aider
C'est ça de vouloir utiliser VBA quand on ne connait pas, alors que des formules c'est si simple et fonctionnel
BrunoM45 a écrit :Dim59 a écrit :Bonjour,
Je suis en train d'utiliser la gestion de stock mais je viens de m'apercevoir d'un léger problème. Lorsque je vais des entrées ou des sorties, il n'y a que la première ligne qui est transmise dans le journal de bord.
Y'a'il une ligne à changer dans le code?
Certainement, j'espère pour toi que Vb_troyes sera toujours là pour t'aider
C'est ça de vouloir utiliser VBA quand on ne connait pas, alors que des formules c'est si simple et fonctionnel
je regarde ça
En effet code corrigé :
Sub sortie_stock()
'je definie la dernière ligne
derlig = Sheets("Sortie").Cells(Cells.Rows.Count, "A").End(xlUp).Row
derligstock = Sheets("Stock").Cells(Cells.Rows.Count, "A").End(xlUp).Row
derligjourn = Sheets("Journal de bord").Cells(Cells.Rows.Count, "A").End(xlUp).Row
' Sortie ====> Stock
'je parcours les lignes des entrées
For Each c In Sheets("Sortie").Range("A4:A" & derlig)
'je parcours les lignes des stocks
For Each d In Sheets("Stock").Range("A4:A" & derligstock)
'si article stock = article entrée alors
If c = d Then
'valeur stock + valeur entrée
d.Offset(0, 5) = d.Offset(0, 5) + c.Offset(0, 1)
End If
Next
Next
' Sortie ====> Journal
derligjourn = derligjourn + 1
'je parcours les lignes des sorties
For Each c In Sheets("Sortie").Range("A4:A" & derlig)
'je m'assure que la sortie n'est pas vide pour eviter une insertion d'une ligne vide
If c <> "" Then
'je saisie que c'est une sortie
Sheets("Journal de bord").Range("A" & derligjourn).Value = "Sortie"
'je saisie la designation
Sheets("Journal de bord").Range("A" & derligjourn).Offset(0, 1) = c
'je saisie la quantité
Sheets("Journal de bord").Range("A" & derligjourn).Offset(0, 2) = c.Offset(0, 1)
'je saisie la date
Sheets("Journal de bord").Range("A" & derligjourn).Offset(0, 5) = Date
'j'incremente le numero de ma derniere ligne
derligjourn = derligjourn + 1
End If
Next
'après les entrées je supprime mes lignes
DLig = Sheets("Sortie").Range("B" & Rows.Count).End(xlUp).Row
' Pour chaque ligne de la dernière à la 4ème je les supprime
For Lig = DLig To 4 Step -1
Rows(Lig).Delete
Next
MsgBox "Sortie de stock terminée"
End Sub
Sub entree_stock()
'je definie la dernière ligne
derlig = Sheets("Entrée").Cells(Cells.Rows.Count, "A").End(xlUp).Row
derligstock = Sheets("Stock").Cells(Cells.Rows.Count, "A").End(xlUp).Row
derligjourn = Sheets("Journal de bord").Cells(Cells.Rows.Count, "A").End(xlUp).Row
' Entrée ====> Stock
'je parcours les lignes des entrées
For Each c In Sheets("Entrée").Range("A4:A" & derlig)
'je parcours les lignes des stocks
For Each d In Sheets("Stock").Range("A4:A" & derligstock)
'si article stock = article entrée alors
If c = d Then
'valeur stock + valeur entrée
d.Offset(0, 4) = d.Offset(0, 4) + c.Offset(0, 1)
End If
Next
Next
' Entrée ====> Journal
derligjourn = derligjourn + 1
'je parcours les lignes des entrées
For Each c In Sheets("Entrée").Range("A4:A" & derlig)
'je m'assure que la sortie n'est pas vide pour eviter une insertion d'une ligne vide
If c <> "" Then
'je saisie que c'est une entrée
Sheets("Journal de bord").Range("A" & derligjourn).Value = "Entrée"
'je saisie la designation
Sheets("Journal de bord").Range("A" & derligjourn).Offset(0, 1) = c
'je saisie la quantité
Sheets("Journal de bord").Range("A" & derligjourn).Offset(0, 2) = c.Offset(0, 1)
'je saisie la date
Sheets("Journal de bord").Range("A" & derligjourn).Offset(0, 5) = Date
'j'incremente le numero de ma derniere ligne
derligjourn = derligjourn + 1
End If
Next
'après les entrées je supprime mes lignes
DLig = Sheets("Entrée").Range("B" & Rows.Count).End(xlUp).Row
' Pour chaque ligne de la dernière à la 4ème je les supprime
For Lig = DLig To 4 Step -1
Rows(Lig).Delete
Next
MsgBox "Entrée en stock terminée"
End Sub
Sub ajout_art()
Range("A4").Select
Range(Selection, Selection.End(xlDown)).Select
lign_der_select = Range("A" & Rows.Count).End(xlUp).Row
ActiveWorkbook.Names.Add Name:="base_art", RefersToR1C1:="=Stock!R4C1:R" & lign_der_select & "C1"
Sheets("Entrée").Select
Range("A4").Select
Range(Selection, Selection.End(xlDown)).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=base_art"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Sheets("Sortie").Select
Range("A4").Select
Range(Selection, Selection.End(xlDown)).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=base_art"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Sheets("Stock").Select
Range("A4").Select
MsgBox "Mise à jour de la liste des articles effectuée avec succès !"
End Sub