macro actions multiples depuis un même bouton de commande

rh.finances

XLDnaute Occasionnel
Bonjour à tous les internautes et autres accrocs d'excel et de ce site.

je suis en train de travailler un tableau de gestion de stock sur excel et n'étant pas vraiment un spécialiste du langage VBA je bute complètement sur le point suivant:
le classeur "saisie" permet de modifier le stock référencé dans le classeur "produits référencés". il faut pour cela renseigner le produit au travers une liste déroulante (cellule B4), l'opération souhaitée (entrée, sortie...) en B5 et la quantité en B6.
le stock se met automatiquement à jour en cliquant sur le bouton "Validé" en bas de page.

je souhaiterais à présent faire évoluer ce tableau en retranscrivant dans un autre classeur intitulé "Mouvements quotidiens" l'ensemble des entrées et sorties de stocks selon la date (cellule B7 du classeur saisie), le produit (cellule b4), etc... la retranscription devrait pouvoir se faire dès lors que je clique sur le bouton "valider" permettant la mise à jour du stock.

au final, le bouton "valider" doit permettre d'assurer 2 actions différentes (mise à jour stock dans le classeur - déjà en place - et retranscription des mouvements de stocks dans la feuille "mouvement quotidien").

et là, je bute: j'ai essayé de créer (à partir de codes trouvés sur le net) un code macro dans le module 7 permettant la retranscription des données du classeur "saisie" dans le classeur "mouvements quotidiens".
au début, j'ai appellé le module par "Sub Bouton2_QuandClic()" qui correspond à la même déclaration que le module 1 (intégrant le bouton "validé" et mettant à jour le stock).
j'ai eu un message d'erreur: "nom ambigu"
j'ai alors essayé "Sub Selection_Change()". là, je n'ai plus de message d'erreur, le stock se met à jour... mais la macro de retranscription des données ne marche pas ...:(

Si une âme charitable de ce site peut me venir en aide, ce serait vraiment chouette!! :) :)

d'avance merci à tous!!!!!

Alex

pour accéder à mon fichier, le lien se trouve ci-après:
http://cjoint.com/?lnrqMxKZ2N
 

JNP

XLDnaute Barbatruc
Re : macro actions multiples depuis un même bouton de commande

Bonsoir Rh.finances :),
Il te suffit simplement de mettre tes 2 codes ensemble dans "Sub Bouton2_QuandClic()" en faisant juste attention de ne pas avoir de variables déclarées 2 fois (ou avec un type différent).
Sinon, tu peux nommer ta deuxième macro "Sub Synthèse()" et à la fin de "Sub Bouton2_QuandClic()", tu mets simplement Call Synthèse.
Bonne soirée :cool:
 

rh.finances

XLDnaute Occasionnel
Re : macro actions multiples depuis un même bouton de commande

Bonsoir JNP, bonsoir JP14, bonsoir à tous

merci, merci beaucoup pour vous être penché sur mon problème aussi rapidement. c'est vraiment sympa !!!:)
ta solution JP14 est drôlement bien. je rencontre juste un problème concernant la cellule de saisie b8 correspondant au fournisseur (ou service de destination). les données renseignées dans cette cellule ne sont pas retranscrites dans le tableau "mouvements quotidiens".
faut-il créer une variable du type "pprod = Range("b4").Value" pour permettre l'affichage du fournisseur?

d'avance merci et merci à nouveau pour votre aide!! :)

Alex
 

rh.finances

XLDnaute Occasionnel
Re : macro actions multiples depuis un même bouton de commande

bonsoir à tous,

oups JP14, je viens de me rendre compte également que la mise à jour du stock ne se faisait plus du tout!! :confused:
j'ai beau faire entrée ou sortie, ça ne marche plus!
sais tu ce que je dois faire pour rétablir la situation?
merci

Alex
 

rh.finances

XLDnaute Occasionnel
Re : macro actions multiples depuis un même bouton de commande

bonsoir JP,

merci pour ta nouvelle réponse. j'ai essayé ton nouveau code dans le module 1. mais j'ai testé sur divers produits, la mise à jour du stock ne marche pas... et pourtant les formules intégrées dans les macros sont les mêmes qu'initialement :confused:

concernant le fournisseur, la zone de saisie se trouve en B8 du classeur "saisie" (le nom dans le tableau est référencé comme suit: "F/R entrée / destinat° sortie" - cette zone n'a vocation à apparaître que dans le classeur "mouvements quotidiens" et pas dans "produits référencés").

encore merci pour ton aide précieuse!!

Alex
 

rh.finances

XLDnaute Occasionnel
Re : macro actions multiples depuis un même bouton de commande

Bonsoir JP14, bonsoir JNP, bonsoir à tous les internautes de ce site.
j'ai réussi à obtenir la solution à mon problème.
ci-joint le code permettant à la fois la mise à jour du stock et le journal des mouvements quotidiens.
merci à vous de m'avoir permis d'avancer

Alex

Code:
Dim pprod As String
Sub Bouton2_QuandClic()
Dim ddate As Date
Dim op As String
Dim 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 continuer ?", vbYesNo)
                If rep2 = vbYes Then
                    Range("b5:b6").ClearContents
                    Worksheets("Commande").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"
                    Call maj(ddate, pprod, op, vvaleur, ffournisseur)
                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
Private Function message1()
message1 = 0
rep = MsgBox("Vous allez mettre à jour le stock, Voulez vous continuer ?", vbYesNo)
    
    If rep = vbYes Then
    Range("b5:b6").ClearContents
        Worksheets("Produits Référencés").Select
        Cells.Find(What:=pprod, After:=Cells(1, 1), LookIn:=xlValues, _
                    lookat:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                    MatchCase:=False, SearchFormat:=False).Activate
    message1 = 1
    End If

End Function
Private Sub maj(£ddate As Date, £pprod As String, £op As String, £vvaleur As Integer, £ffournisseur As String)
'date    produits    mouvement   quantité   fournisseur-service
Dim dl1 As Long ' dernière ligne
With Sheets("Mouvements quotidiens")
    
dl1 = .Range("b65536").End(xlUp).Row + 1
.Range("b" & dl1) = £ddate
.Range("c" & dl1) = £pprod
.Range("d" & dl1) = £op
.Range("e" & dl1) = £vvaleur
.Range("f" & dl1) = £ffournisseur
End With
End Sub

Sub Bouton2_QuandClic2()

pprod = Range("b4").Value
op = Range("b5").Value
vvaleur = Range("b6").Value
ddate = Range("b7").Value
vdiff = Range("b10").Value
ffournisseur = Range("b8").Value

If op = "" Or vvaleur = "" Or ddate = "" Or pprod = "" Or ffournisseur = "" 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 continuer ?", vbYesNo)
    
    If rep = vbYes Then
    Range("b5:b6").ClearContents
        Worksheets("Produits Référencés").Select
        Cells.Find(What:=pprod, After:=Cells(1, 1), LookIn:=xlValues, _
                    lookat:=xlWhole, SearchOrder:=xlByColumns, 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 continuer ?", 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
 

Discussions similaires

Réponses
0
Affichages
158

Statistiques des forums

Discussions
314 653
Messages
2 111 592
Membres
111 208
dernier inscrit
estalavista