Comment créer une gestion des stocks sur Excel partie 4 – La mise a jour des stocks

38
15545

Dans cette quatrième partie nous allons voir comment registre les articles qui rentre de nos fournisseurs et les article qui sorte à nos clients. Nous allons aussi contrôler si les articles livrés d’un bon de commande sont exacte si c’est le cas alors le bon de commande sera fermer.


Index :

  1. Intro
  2. Article
  3. Bon de commande
  4. mise à jour des stock

Création du tableau booking

    • Type
      • Entrée
      • Sortie
    • Nr Facture
    • Nr Bon Commande
    • Fournisseur
    • Client
    • Nr Article
    • Nombre
    • Ranking
      • =SI([@Type]= »Sortie »;NB.SI.ENS([Type]; »sortie »;[amount]; »> »&[@amount])+1; » »)

Création du formulaire

Alé c’est partie pour la création du formulaire je vous rejoint juste après.

Configurer le formulaire.

    • Label1
      • Label_info
      • Visible = false
    • Option1
      • Option_entrée
    • Option2
      • Option_Sortie
    • Textbox1
      • Txt_facture
    • Combobox1
      • Cbx_Order
    • Label4
      • Lab_type
    • Combobox2
      • Cbx_type
    • Combobox3
      • Cbx_article
    • Textbox2
      • Txt_nombre
    • Commandbuton
      • Btn_Add
    • Listbox1
      • List_order
      • Columncount = 2

Varialbe memoire.

Nous allons créer une variable public memoire pour garder en mémoire sur quel ligne nous somme.

Public Memoire as integer

Le numéro du booking

Sur la page config dans la cellule B21 nous allons placer notre nr pour le booking.

Ajouter les articles dans la zone de liste. Nous allons contrôler si toute les informations sont la puis nous allons ajouter l’article dans la zone de liste. Retiré un article de la liste

Pour retirer un article il suffit de faire un double clique et placer le code suivant.

Simple non ?

Placer la liste dans la base de données.

Contrôler si la commande est conforme

Sur la page Order nous allons ajouter une nouvelle colonne que nous allons nommée Contrôle. Et nous allons cherche le nombre de pièce qui sont rentré pour un article précis d’un bon de commande précis.

=SIERREUR(INDEX(Tableau5[amount];EQUIV(1;([@[Order Nr:]]=Tableau5[Po])*([@[Part nr]]=Tableau5[Nr. article]);0)); » »)

Valider avec CTRL + Maj + Enter

Nous allons créer une autre colonne que nous allons nommée Statuts. Ici nous allons contrôler si le nombre est égal à la commande si c’est le cas nous allons indiquer que la commande est fermer donc close sinon open.

=SI([@amount]=[@Check]; »Close »; »open »)

Déterminer le niveau du stock.

Sur notre page Article nous allons enfin pouvoir déterminer notre niveau du stock. Et cela nous allons le faire en comptant le nombre d’entrée qu’il y a u pour un article et le nombre de sortie.

Donc dans stock nous plaçons la formule suivante.

=SOMME.SI.ENS(Tableau5[amount];Tableau5[Nr. article];[@[Part Nr]];Tableau5[Type]; »Entrée »)-SOMME.SI.ENS(Tableau5[amount];Tableau5[Nr. article];[@[Part Nr]];Tableau5[Type]; »Sortie »)

Voila cette partie est terminé dans la prochaine partie nous allons crée notre tableau de bord. Si vous avez des question faite le moi savoir dans les commentaires ou sur ma page facebook. D’ici la je vous retrouve dans la prochaine partie.

38 Commentaires

  1. Bonjour,
    Super tuto !
    Je suis bloqué au moment de la suppression des lignes dans le form et aussi pour enregistrer l’entrée. Le code est identique au vôtre et pourtant ca ne marche pas.
    « Private Sub List_Order_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    If Me.List_Order.ListIndex >= 0 Then
    If MsgBox(« Voulez-vous supprimer cette entrée ? », vbYesNo) = vbYesNo Then
    Me.List_Order.RemoveItem Me.List_Order.ListIndex
    memoire = memoire – 1
    End If
    End If

    End Sub »

    « Private Sub CommandButton2_Click()
    Dim DL As Integer
    Dim list_nombre As Integer
    Dim ligne As Integer

    list_nombre = Me.List_Order.ListCount – 1

    If Me.List_Order.ListCount > 0 Then ‘controle de la liste si non vide
    If MsgBox(« Voulez-vous enregistrer cette transaction ? », vbYesNo) = vbYesNo Then
    For ligne = 0 To list_nombre

    ‘ajouter une nouvelle ligne dans le tableau
    Sheets(5).ListObjects(1).ListRows.Add

    ‘chercher le num de la prochaine ligne libre
    DL = Sheets(5).Range(« b99999 »).End(xlUp).Row

    ‘ajouter les info dans la base de donnée
    Sheets(5).Range(« b » & DL) = Me.info1
    Sheets(5).Range(« c » & DL) = Me.Txt_facture
    Sheets(5).Range(« d » & DL) = Me.Cbx_order

    ‘controler si c’est un fournisseur ou un client
    If Me.Label_type = « fournisseur : » Then
    Sheets(5).Range(« e » & DL) = Me.Cbx_type
    Else
    Sheets(5).Range(« f » & DL) = Me.Cbx_type
    End If
    ‘ajouter les données de la zone de liste
    Sheets(5).Range(« g » & DL) = Me.List_Order.List(ligne, 0)
    Sheets(5).Range(« h » & DL) = CInt(Me.List_Order.List(ligne, 1))
    Next ligne
    MsgBox « Enregistrement ok »
    Unload Me
    ThisWorkbook.Save
    End If
    End If

    End Sub
    « 

  2. Bien le bonjour Daniel, ce tuto est une mine d’or, je l’ai entierement suivi, et rajouté pas mal de fonctionnalité bien pratique. Je compte l’utiliser pour gerer mes consos pour ma compagnie car il se rapproche énormément du fichier excel que j’ai actuellement. Le controle de commande est d’autant plus pertinent car il arrive souvent que mes fournisseurs me livrent ma commande partiellement plusieurs fois. La page booking est vraiment importante pour moi. La seule chose sur laquelle je bute encore est qu’en cas de deuxieme ou troisieme livraison, la formule =SIERREUR(INDEX(tab_mvt[Quantite];EQUIV(1;([@PO]=tab_mvt[PO])*([@item]=tab_mvt[item]);0)); » ») similaire a la votre, ne fonctionne tout simplement pas chez moi, la valeur ne se met pas a jour. J’ai tout essayé, je ne vois pas ce qui bug. Pour tous, avez vous ce cas similaire ? Ou dois je fouiller pour trouver la solution ? Merci de m’aiguiller, bonne journée a tous !

  3. Bonjour,

    Merci pour sur tuto bien instructif et vos partage en général.
    Voila une bonne demi-heure que je tourne en rond sur la partie suivante de la formule :

    Private Sub btn_add_Click()

    If Me.Txt_facture «  » And Me.txt_nombre «  » And Me.cbx_article.ListIndex >= 0 And Me.cbx_type.ListIndex >= 0 Then

    With Me.list_order
    .AddItem
    .List(memoire, 0) = Me.cbx_article
    .List(memoire, 1) = Me.txt_nombre

    End With

    memoire = memoire + 1
    Me.cbx_article = «  »
    Me.txt_nombre = «  »

    End If

    End Sub

    Il me met en erreur sur le AddItem. J’ai ressaisi la formule à plusieurs reprises, je me suis conformée au nom donné pour chaque référence, vérifié que toutes les données correspondent en tous points au tuto you tube mais je suis coincée.

    Quelqu’un pourrait m’éclairer ?

    Merci par avance

  4. Bonjour,
    Bon tuto.
    J’ai ajouté des colonnes dans le booking : prix et date de péremption.
    Sur la plage article, je souhaiterai rapatrier ce prix et cette date de péremption par article.
    Pour cela, il me faut rechercher pour la référence, la dernière ligne d’entrée correspondante à cette référence.
    Avec index et equiv pas de solution. C’est la raison pour laquelle je sollicite votre aide.
    Merci.

  5. Bonjour à tous,
    J’ai un soucis sur le bouton enregistrer.
    Quand je click dessus la ligne s’ajoute mais rien ne s’écrit dedans, pourtant mon code est strictement le même a un détail près il n’accepte pas le numéro de ma feuille Excel donc j ai écris le nom à la place.

    Private Sub CommandButton2_Click()
    Dim dl As Integer
    Dim list_nombre As Integer
    Dim ligne As Integer

    list_nombre = Me.List_Order.ListCount – 1

    If Me.List_Order.ListCount > 0 Then ‘controle que la liste n’est pas vide
    If MsgBox(« Voulez-vous enregistrer cette transaction? », vbYesNo) = vbYes Then
    For ligne = 0 To list_nombre
    ‘ajouter une nouvelle ligne dans notre tableau
    Sheets(« Booking »).ListObjects(1).ListRows.Add
    ‘Chercher le nr de la prochaine ligne libre dans notre tableau
    dl = Sheets(« Booking »).Range(« b9999 »).End(xlUp).Row

    ‘ajouter les informations dans notre base de donnee
    Sheets(« Booking »).Range(« b » & dl) = Me.info1
    Sheets(« Booking »).Range(« c » & dl) = Me.Text_facture
    Sheets(« Booking »).Range(« d » & dl) = Me.Cbx_Order
    ‘controler si c’est un fournisseur ou un client
    If Me.Label_type = « Fournisseur: » Then
    Sheets(« Booking »).Range(« e » & dl) = Me.Cbx_type
    Else
    Sheets(« Booking »).Range(« f » & dl) = Me.Cbx_type
    End If
    ‘ajouter les données de la zone de liste
    Sheets(« Booking »).Range(« g » & dl) = Me.List_Order.List(ligne, 0)
    Sheets(« Booking »).Range(« h » & dl) = CInt(Me.List_Order.List(ligne, 1))

    Next ligne

    MsgBox « Booking est fait »
    Unload Me
    ThisWorkbook.Save
    End If
    End If
    End Sub

  6. Bonjour je suis tombé sur votre tuto car j’ai assez de souci le bon de commande contient qu’un seul produit, il ne prend pas en charge tous les projet que je mets.
    Le deuxième c’est quand je crée les options et que je mets .rowsource sur le cbx_type fournisseur j’ai des erreurs.

  7. Bonsoir,

    Je vous remercie pour ces Tuto, j’apprends beaucoup avec vous,
    une petite question svp, comment pourrais-je faire lorsque j’ai déjà un stock initial qui varie entre les sorties et les entrées, je vous remercie D’abord

  8. Bonsoir,
    Je vous remercie pour ces tuto. Lorsque j’ai terminé la partie 5, en voulant faire mes ranking, j’ai voulu faire des entrée dans le booking et cela m’a indiqué une erreur. cela me souligne la ligne de code de l’ajout d’une nouvelle ligne dans le tableau. J’ai revue votre vidéo plusieurs fois et je ne vois pas où est l’erreur. Je vous remercie de votre temps. Si vous voulez plus de détail faîtes le moi savoir et merci encore pour vos tuto car il y a des décennies que je n’ai pas utilisé excel

    • Oups, j’ai oublier de vous dire le message d’erreur #epars!; j’ai fait des recherches pour trouver comment le réparer, mais ce que je trouve ne marche pas. cela me demande soit de déplacer la formule hors du tableau ou de convertir le tableau en plage. j’ai fait cela mais cela me donne plus de problème. voici la formule que j’ai inscrit comme il me semble vous avez indiqué sur la vidéo.
      =SI([Type]= »Sortie »;NB.SI.ENS([Type]; »Sortie »;[Nombre]; »> »&[@Nombre])+1; » »)

  9. et j’aimerais bien qu’on travail ensemble sur certain programmes que jai , donc si possible jaimerais avoir ton contact whatsapp , comme ca on puisse mieux discuter , et tes service serons payant , pense y sil te plait j’ai vraiment besoins de toi

  10. bonjour ici sil vous plait quelqu’un peut me montrer comment gerer ce probleme de rupture de stock ?? jaimerais que le programme menvoy un message pour dire rupture de stock lorsque la sortie est superieur au stock actuel

    • Bonjour Julio,
      vous allez devoir rechercher le nombre en stock de base de votre produit puis vérifier avec un iF si le montant qui sort est plus grand que celui en stock, si c’est le cas alors msgbox(‘message d’erreur’) sinon réduit le stock de x nombre.

      • jai reproduit exactement votre programme de 1 a 6 donc jai suivis toute les instruction a la ligne et ca fonctionne bien sauf que si la sortie est inferieur au stock ca me met un stock negatif donc s’il vous plait aider moi a gerer ce petit manque

      • If Txt_nombre «  » And Txt_nombre > Worksheets(« Article »).Range(« f6 ») Then
        MsgBox « rupture »
        End If
        ca cest le code que j’ecrit dans ma macro mais lorsque j’applique ca m’envoy rupture quelque soit le nombre que je met

        • Private Sub CommandButton1_Click()

          If Me.Txt_facture <> «  » And Me.Txt_nombre <> «  » And Me.Cbx_article.ListIndex >= 0 And Me.Cbx_type.ListIndex >= 0 Then

          Dim productQTY As Integer

          If (Option_sortie = True) Then

          productQTY = WorksheetFunction.VLookup(Me.Cbx_article, Sheets(« Article »).Range(« b6:g9999 »), 4, False)

          If (productQTY > Me.Txt_nombre) Then

          With Me.List_order
          .AddItem
          .List(memoire, 0) = Me.Cbx_article
          .List(memoire, 1) = Me.Txt_nombre

          End With

          memoire = memoire + 1
          Me.Cbx_article = «  »
          Me.Txt_nombre = «  »

          Else
          MsgBox (« Oeps not enough parts in storage ! »)
          End If

          Else

          With Me.List_order
          .AddItem
          .List(memoire, 0) = Me.Cbx_article
          .List(memoire, 1) = Me.Txt_nombre

          End With

          memoire = memoire + 1
          Me.Cbx_article = «  »
          Me.Txt_nombre = «  »

          End If

          End If
          End Sub

          • salut merci beaucou pour ton aide mais je comprend pas trop d’ou viens le « Dim productQTY As Integer » jai pas productQTY dans le programme

          • salut daniel je place ton algorithme ou sil te plait ?? dans la macro du bouton ajouter de booking ??? ou alors ?? sil te plait

          • et j’aimerais bien qu’on travail ensemble sur certain programmes que jai , donc si possible jaimerais avoir ton contact whatsapp , comme ca on puisse mieux discuter , et tes service serons payant , pense y sil te plait j’ai vraiment besoins de toi

          • merci ca a marhé merci bien daniel
            mais la j’ai un petit probleme j’aimerai modifier les element de mon stock a partir du userform add article

  11. Bonjour Daniel,
    Merci beaucoup pour votre tuto.
    J´ai une question importante sur la mise a jour des stocks. Quelle fonction utiliser pour l´inventaire mensuel ?
    J´aimerais une autre posibilité qu´une simple entrée ou sortie du stock, mais un changement de la valeur directement selon l´inventaire.
    Merci

  12. Bonjour Monsieur Daniel,

    Merci beaucoup pour les tutoriels, extrêmement utiles et limpides. Voilà mon problème : ma gestion des stocks se base sur un Coût Moyen Pondéré. J’ai modifié les commandes pour qu’elles puissent prendre un prix différent pour un même article. Or, le fait que les entrées modifient le Prix unitaire moyen, les sorties, elles doivent prendre ce prix unitaire en CMP, me créent une relation en boucle et ainsi mon tableur est inutilisable. Auriez-vous une astuce pour que je puisse mettre à bien mon projet ?

    Merci d’avance,

    Félix

  13. Bonjour,
    Cela fait 3 fois que je visionne la video Comment créer une gestion des stocks sur Excel partie 4 – La mise a jour des stocks et je n’ai pas trouver le code de télécharpe ment.
    Merci

  14. Bonjour,
    malheureusement je n’arrive pas a faire cette formule matricielle
    =SIERREUR(INDEX(Tableau5[amount];EQUIV(1;([@[Order Nr:]]=Tableau5[Po])*([@[Part nr]]=Tableau5[Nr. article]);0));””)
    mon resultat est 0 et rien ne bouge dans le tableau et meme si il y a une erreur cela met 0

    merci encore .

    Herve

  15. BONJOUR ,
    moi ici je voudrais ajouter un un bon de livraison a l’image de « purchase » , et un formulaire pour saisir les BLV-0001. c’est un exercice pour moi que je me suis donné de faire.
    il me restera alors les fichiers clients ceux qui ont paye et les créances du .mais dans ce deuxième point il faudrait nous aider M.DANIEL avec un tuto .
    merci beaucoup
    @+

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.