Macro mise à jour inventaire et recensement mouvements stock

Bonjour à tous les internautes et cracks d'excel!!

je sollicite votre aide pour le problème de macro suivant:

j'ai un fichier de gestion des stocks qui à l'origine devait permettre la mise à jour de stock dans la feuille "produits référencés" depuis un bouton de commande dénommé "validé" et intégrer dans le module 1.

j'ai voulu intégrer une fonction supplémentaire à ce bouton de commande afin que chaque mouvement de stock (entrée, sortie) apparaisse dans la feuille "mouvements quotidiens".

et là problème !! si les mouvements quotidiens de stocks se font bien sur la feuille "mouvements quotidiens' (sauf pour le fournisseur - cellule B8 de la feuille "saisie"), le stock ne se met plus du tout à jour dans la feuille "produits référencés" !!

j'en appelle ainsi à l'aide des internautes de ce site car je n'arrive pas du tout à m'en sortir .

d'avance merci beaucoup!!!!

mon fichier est joint au présent message à l'addresse suivante

https://www.excel-pratique.com/~files/doc2/G_STOCK_v1_4.zip

et le code à l'origine se présentait comme suit:

Sub Bouton2_QuandClic()

pprod = Range("b4").Value

op = Range("b5").Value

vvaleur = Range("b6").Value

ddate = Range("b7").Value

vdiff = Range("b10").Value

If op = "" Or vvaleur = "" Or ddate = "" Or pprod = "" Then

MsgBox ("Toutes les zones doivent être renseignées")

Exit Sub

End If

If op <> "Commande" Then

rep = MsgBox("Vous allez mettre à jour le stock, Voulez vous contiuer ?", vbYesNo)

If rep = vbYes Then

Range("b5:b6").ClearContents

Worksheets("Produits Référencés").Select

Cells.Find(What:=pprod, After:=ActiveCell, LookIn:=xlFormulas, _

lookat:=xlWhole, SearchDirection:=xlNext, _

MatchCase:=False, SearchFormat:=False).Activate

If op = "Inventaire" Then

Cells(ActiveCell.Row, 6).Value = vvaleur

lili1 = ActiveCell.Row

lili2 = ActiveCell.Row + 151

End If

If op = "Entrée" Then

Cells(ActiveCell.Row, 6).Value = Cells(ActiveCell.Row, 6).Value + vvaleur

lili1 = ActiveCell.Row

lili2 = ActiveCell.Row + 151

End If

If op = "Sortie" Then

Cells(ActiveCell.Row, 6).Value = Cells(ActiveCell.Row, 6).Value - vvaleur

lili1 = ActiveCell.Row

lili2 = ActiveCell.Row + 151

End If

End If

Worksheets(2).Select

Else

rep2 = MsgBox("Vous allez mettre à jour les commandes, Voulez vous contiuer ?", vbYesNo)

If rep2 = vbYes Then

Range("b5:b6").ClearContents

Worksheets("Commande").Select

Range("a1").Activate

Cells.Find(What:=pprod, After:=ActiveCell, LookIn:=xlValues, _

lookat:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _

MatchCase:=False, SearchFormat:=False).Activate

Cells(ActiveCell.Row, 2).Value = ddate

Cells(ActiveCell.Row, 3).Value = vvaleur

Cells(ActiveCell.Row, 4).Value = "Non"

End If

End If

End Sub

Sub Bcomm_QuandClic()

Range("d3:d500").Select

For Each cece In Selection

If cece.Value = "Oui" Then

dquant = Cells(cece.Row, cece.Column - 1).Value

ddate = Range("b1").Value

dprod = Cells(cece.Row, cece.Column - 3).Value

lili1 = cece.Row - 1

lili2 = cece.Row + 500 - 1

Worksheets("Produits Référencés").Select

Cells(lili1, 6).Value = Cells(lili1, 6).Value + dquant

Worksheets("Commande").Select

Cells(cece.Row, cece.Column - 2).ClearContents

Cells(cece.Row, cece.Column - 1).ClearContents

Cells(cece.Row, cece.Column).ClearContents

End If

Next

Range("a1").Select

End Sub

Bonjour alex54, forum,

J'avais jeté un oeil sur ton premier fichier ( https://forum.excel-pratique.com/viewtopic.php?t=14039 ) et je vois que tu as complètement modifié ton Userform2!

Dans ton nouveau code place le :

Dim pprod As String

au-dessus de

Sub Bouton2_QuandClic()

Comme ça :

Dim pprod As String
Sub Bouton2_QuandClic()

Dans les macros Bouton2_QuandClic et message1, remplace :

Cells.Find(What:=pprod, After:=ActiveCell, LookIn:=xlValues, _
                    lookat:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                    MatchCase:=False, SearchFormat:=False).Activate

par

Cells.Find(What:=pprod, After:=Cells(1, 1), LookIn:=xlValues, _
                    lookat:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                    MatchCase:=False, SearchFormat:=False).Activate

Il fallait déclarer la variable pprod hors module afin que la fonction message1 puisse y faire référence.

Dans ta fonction message1, j'ai remplacé le After:=ActiveCell par After:=Cells(1, 1) afin

que la recherche se fasse à partir de la toute première cellule (et non la cellule active).

Bonsoir VBA-new,

tout d'abord, merci infiniment de t'être intéressé à mon problème!!

ta solution est parfaite!! ça marche impeccable!!! encore merci, merci, merci et merci!!!

il ne me restera plus à présent qu'à régler le petit problème de retranscription de la cellule B8 de la feuille "saisie" (nom du fournisseur) vers la colonne F du tableau "mouvements quotidiens".

je pense qu'en déclarant une variable du type ' fournisseur=Range("b8").Value ' à la suite de ' vdiff = Range("b10").Value ' et en l'intégrant au fur et à mesure du module comme :

Call maj(ddate, pprod, op, vvaleur, fournisseur, "")

.Range("f" & dl1) = fournisseur

ça devrait marcher (enfin je l'espère... car je suis pas une flèche en VB. heureusement qu'il y a des gens comme toi pour nous venir en aide)!!

Et encore une fois, VBA-new, merci pour tout

Alex

Y'a pas de quoi

J'avais oublié le "problème" du fournisseur!

Tu es sur la bonne voie pour faire les modifs.

Sinon, si tu veux prendre en compte les fournisseurs (qui devient donc un champ obligatoire), remplace le code de Bouton2_QuandClic() par celui-ci :

Dim pprod As String
Sub Bouton2_QuandClic()
Dim ddate As Date
Dim op As String, ffournisseur As String
Dim vvaleur As Integer

pprod = Range("b4").Value
op = Range("b5").Value
vvaleur = Range("b6").Value
ddate = Format(Range("b7").Value, "dd/mm/yyyy")
vdiff = Range("b10").Value
ffournisseur = Range("b8").Value

If op = "" Or vvaleur = 0 Or ddate = 0 Or pprod = "" Or ffournisseur = "" Then
MsgBox ("Toutes les zones doivent être renseignées")
Exit Sub
End If
Select Case op
    Case "Commande"
            rep2 = MsgBox("Vous allez mettre à jour les commandes, Voulez vous contiuer ?", vbYesNo)
                If rep2 = vbYes Then
                    Range("b5:b6").ClearContents
                    Worksheets("Commande").Range("a1").Activate

                    Cells.Find(What:=pprod, After:=Cells(1, 1), LookIn:=xlValues, _
                    lookat:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                    MatchCase:=False, SearchFormat:=False).Activate

                    Cells(ActiveCell.Row, 2).Value = ddate
                    Cells(ActiveCell.Row, 3).Value = vvaleur
                    Cells(ActiveCell.Row, 4).Value = "Non"
                    Call maj(ddate, pprod, op, vvaleur, "")
                End If

    Case "Inventaire"
        If message1 = 0 Then Exit Sub
        Cells(ActiveCell.Row, 6).Value = vvaleur
        lili1 = ActiveCell.Row
        lili2 = ActiveCell.Row + 151
        Call maj(ddate, pprod, op, vvaleur, ffournisseur)

    Case "Entrée"
        If message1 = 0 Then Exit Sub
        Cells(ActiveCell.Row, 6).Value = Cells(ActiveCell.Row, 6).Value + vvaleur
        lili1 = ActiveCell.Row
        lili2 = ActiveCell.Row + 151
        Call maj(ddate, pprod, op, vvaleur, ffournisseur)

    Case "Sortie"
        If message1 = 0 Then Exit Sub
        Cells(ActiveCell.Row, 6).Value = Cells(ActiveCell.Row, 6).Value - vvaleur
        lili1 = ActiveCell.Row
        lili2 = ActiveCell.Row + 151
        Call maj(ddate, pprod, op, vvaleur, ffournisseur)
    End Select
Worksheets(2).Select

End Sub

Puis dans le code de la macro maj, comme tu l'as dit, tu mets bien :

.Range("f" & dl1) = fournisseur

Attention tout de même, je n'ai pas modifié la partie de la macro Bouton2_QuandClic qui traite le cas du mouvement "Commande" (lorsque op="Commande"). Je ne sais pas de quoi ça parle.

Deuxième attention,

Alex54 a écrit :

je pense qu'en déclarant une variable du type ' fournisseur=Range("b8").Value ' à la suite de ' vdiff = Range("b10").Value ' et en l'intégrant au fur et à mesure du module comme :

Call maj(ddate, pprod, op, vvaleur, fournisseur, "")

Cette modification est fausse vu que la fonction maj ne doit comporter que 5 arguments.

Tu dois donc mettre : Call maj(ddate, pprod, op, vvaleur, fournisseur)

(variable ffournisseur dans mon cas)

Ça "devrait" le faire.

bonsoir VBA-new,

une nouvelle merci pour ta réponse si rapide.

j'ai suivi ton conseil et heureusement que tu m'as précisé que la fonction maj ne devait comporter que 5 arguments car j'avais commencé à placer ffournisseur à la suite des autres arguments (ce qui en faisait 6) et je ne comprenais pas pourquoi j'avais un message d'erreur.

et là... ça le fait carrément!!!

mille fois merci VBA-new. je désespérais de ne pas pouvoir arriver à mes fins (ça faisait 3 jours que j'essayais de décortiquer des codes VB sur le net pour réussir mon tableau) et là, tu m'as ôté une belle épine du pied!!!

je ne le dirai jamais assez mais MERCI!!!

Alex

Rechercher des sujets similaires à "macro mise jour inventaire recensement mouvements stock"