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.

213gestion-de-stock.xlsx (155.70 Ko)

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,

261gestion-de-stock.xlsm (146.25 Ko)

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.

160gestion-de-stock.xlsm (133.20 Ko)

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

merci bcp

Rechercher des sujets similaires à "gestion stock macro"