[Résolu par: Zdz16] Aide syntaxe macro gestion de stock

Lone-wolf

XLDnaute Barbatruc
bonjour le Forum,

je suis entrain de me casser la tête pour touver la bonne syntaxe pour exécuter cette macro:

Avec le formulaire UsfCom, lorsque j'introduit la quantité; si celle-ci est supérieur à la quantité du stock alors... afficher le formulaire UsfStock, la valeur de la combo = à la valeur de la combo UsfCom, et affichage des valeurs correspondantes. J'ai mis en rouge l'article pour faire le test.

Merci pour votre aide



A+ :cool:
 

Pièces jointes

  • La Gondolière.zip
    49 KB · Affichages: 54
  • La Gondolière.zip
    49 KB · Affichages: 54
  • La Gondolière.zip
    49 KB · Affichages: 49
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : Aide syntaxe macro gestion de stock

Bonjour Lone wolf,

Il manque trop d'éléments dans le classeur ( Surement enlevé soit pour problème confidentielité soit pour problème de poids), pour vérifier si cela fonctionne mais bon un début de réponse :

dans le code usfcom

Code:
Private Sub TxtQte_Change()
If Feuil7.Range("D" & lig).Value < Me.TxtQte.Value Then UsfStock.Show
Me.TxtTotal = Val(Me.TxtQte) * Val(Me.TxtPrix)
End Sub

Cordialement
 

Lone-wolf

XLDnaute Barbatruc
Re : Aide syntaxe macro gestion de stock

Bonjour camarchepas,

merci d'avoir répondu.

Effectivement, j'ai dû alléger le classeur à cause du poids.

En regardant ta réponse, je suis désolé mais, ce n'est pas ce que je cherche à faire.

J'aimerais que lorsque je prend une commande, en introduisant la quantité d'article; si celle-ci est supérieure à la quantité en stock, une MsgBox s'affiche en disant "Veuillez réapprovisionner le stock". En cliquant sur OK, l'UsfStock s'affiche et doit afficher les données correspondant à l'article sélectionné dans le formulaire de commande, pour que je puisse mettre à jour le stock.

Edit: il manquait la table Produits, sorry :eek: . Voici le fichier corrigé.


J'éspère que c'est plus compréhensible.


A+ :cool:
 

Pièces jointes

  • La Gondolière-V2.zip
    40.1 KB · Affichages: 43
Dernière édition:

Zdz16

XLDnaute Occasionnel
Re : Aide syntaxe macro gestion de stock

Bonjour Lone-Wolf et le forum.

Il serai judicieux que tu dépose un fichier avec la possibilité de lancer l'application. Car dans sa version actuelle, il n'est pas possible d'exécuter l'application. D'ailleurs, lorsqu'on lance la macro 'Affiche' une erreur d'exécution apparait (Et puis cela nous évite de chercher le déroulement de l'exécution)
D'autre part, peux-tu préciser si la contrôle doit se faire immédiatement où à la validation de l'USF.

Cordialement
 

Lone-wolf

XLDnaute Barbatruc
Re : Aide syntaxe macro gestion de stock

Bonjour Zdz16,

merci à toi aussi pour avoir répondu.

Encore une fois désolé pour le manque d'attention. Voici le nouveau fichier.

Pour l'affichage du 2ème formulaire, oui, il doit le faire immédiatement lors de la rentrée de la quantité.



A+ :cool:
 

Pièces jointes

  • La Gondolière-V3.zip
    51.9 KB · Affichages: 32

Zdz16

XLDnaute Occasionnel
Re : Aide syntaxe macro gestion de stock

Autre question,

Est-ce que les commandes (Feuille détails), sous-entend qu'elles ne sont pas livrées.
En Bref pour calculer la quantité disponible d'un article, faut-il tenir compte des commandes déjà enregistrées et qui ne sont pas livrées. la règle serait (Quantité disponible = Stock - Somme quantités non livrées)

A+
 

Zdz16

XLDnaute Occasionnel
Re : Aide syntaxe macro gestion de stock

Voici ma proposition via une procédure qui est attachée à l'évènement 'Exit' du control 'TxtQte'.
Ceci peut te mettre sur le chemin. Tu peux également améliorer en contrôlant les zones nécessaires.


Code:
Private Sub TxtQte_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    
    Dim iRow As Long
    Dim lQteDsp    As Long                      'Quantité disponible
    Dim sMsgErr As String
    
    'L'article doit être renseigné
    If Len(RTrim(Me.CmbArticles.Value)) <= 0 Then
        Exit Sub
    End If
    
   ' Recherche quantité disponible
    Sheets("Stock").Select                                                       'Feuille stock
    iRow = Range("C:C").Find(Me.CmbArticles.Value).Row          'C:C = Colonne article
    lQteDsp = Cells(iRow, 6)                                    'Ancienne quantité dispo
    
    'nouvelle quantité dispo
    lQteDsp = lQteDsp - Val(Me.TxtQte)
    
    If lQteDsp < 0 Then
        sMsgErr = " Au total, il manquerai : " & Format(Abs(lQteDsp), "0#") & " de '" & Me.CmbArticles.Value & " '" & Chr(10)
        sMsgErr = sMsgErr & " Faut-il afficher l'état des stocks de cet article ?"
        If MsgBox(sMsgErr, vbInformation + vbYesNo, "Contrôle Disponible") = vbYes Then
            UsfStock.Show               'Affichage de la feuille stock
            
            'Pour charger les élements dans la feuille stock, il faudrait renseigner la valeur du
            'combobox par ce code article (Me.CmbArticles.Value) et activé l'évènement Select du
            'combobox ainsi tu aura les valeurs relatives à l'article,  et le chargement de la form stock se fait normalement
        End If
    End If

End Sub
 

Lone-wolf

XLDnaute Barbatruc
Re : Aide syntaxe macro gestion de stock

Re Zdz16,

La feuille Détails commandes enregistre les commandes prises et donc livrées; qui vont s'afficher dans une ListView.
La feuille Commandes Clients, sert aussi pour l'affichage dans une ListView et pour pouvoir créer une facture, avec les détails de la feuille Dét. comm. .

En gros, je reprend en VBA Excel, la base de données Access (NorthWind) modèle gratuit de Microsoft.

Je viens d'écrire la macro comme ceci:

Code:
Private Sub TxtQte_Change()
Me.TxtTotal = Val(Me.TxtQte) * Val(Me.TxtPrix)
lig = Feuil11.Range("f65536").End(xlUp).Row
With Feuil11.Range("c2:i" & lig)
If Me.TxtQte.Value > .Cells(lig, 6).Value Then
MsgBox "Veuillez réapprovisionner le stock", , "La Gondolière"
End If
UsfStock.Show
End With
With Feuil11.Range("c2:i" & lig)
Set cel = .Find(Me.CmbArticles, , xlValues, xlWhole)
If Not cel Is Nothing Then
UsfStock.CmbProduits.Value = cel.Offset(0, 0).Value
UsfStock.TxtID.Value = cel.Offset(0, -2).Value
UsfStock.TtxtCategorie.Value = cel.Offset(0, -1).Value
UsfStock.TxtArticle.Value = cel.Offset(0, 0).Value
UsfStock.TxtVente.Value = cel.Offset(0, 1).Value
UsfStock.TxtReservations = cel.Offset(0, 2).Value
UsfStock.TxtStockReel.Value = cel.Offset(0, 3).Value
UsfStock.TxtStockMini.Value = cel.Offset(0, 4).Value
UsfStock.TxtACommander.Value = cel.Offset(0, 5).Value
UsfStock.TxtRuptStock.Value = cel.Offset(0, 6).Value
End If
End With


Le problème(que je n'arrive pas à corriger), quand UsfStock s'affiche après la MsgBox, il ne montre pas les données tout-de-suite; quand je ferme par la croix le Form et je répète les opérations, là les données sont inscrites. De plus, il manque une commande pour qu'il ignore la macro lors de la saisie d'un article différent.

Cet à dire que la macro doit s'éffectuer que si le produit est le même que dans la feuille Dét. Comm. et que si la quantité en stock est inferieure.


A+ :cool:
 

Zdz16

XLDnaute Occasionnel
Re : Aide syntaxe macro gestion de stock

Ci-joint une idée de solution.

Attention, j'ai mis quelques lignes en commentaire dans ton code, pour que je puisse tester car elles me provoquent des erreurs de compile. Ces lignes sont préfixées par zdz16.
Et je me suis permis de regrouper les déclarations dans un seul module.

Tiens moi au courant si cela te convient.

Cordialement
 

Pièces jointes

  • zdz16 - La Gondolière-V1.xls
    242.5 KB · Affichages: 52

Lone-wolf

XLDnaute Barbatruc
Re : Aide syntaxe macro gestion de stock

Bonsoir Zdz16,

Voilà, pour faire le test, j'ai supprimé les 2 lignes de commande que tu as éffectué. A la nouvelle commande prise, la macro effectue bien l'ouverture de UsfStock. Il y a maintenant un problème lors de l'enregistrement des nouvelles données. Dans la feuille Stock, celle-ci crée une nouvelle ligne au lieu d'inscrire les données sur la ligne correspondante.

Sans titre 3.jpg


EDIT: Comme dans la base de données Access, pour faire la recherche, il serait préférable d'utiliser l'ID du produit au lieu du produit lui même; vu qu'une procédure évenementielle aime mieux les chiffres que du texte.



A+ :cool:
 

Pièces jointes

  • Sans titre 3.jpg
    Sans titre 3.jpg
    19.9 KB · Affichages: 54
  • Sans titre 3.jpg
    Sans titre 3.jpg
    19.9 KB · Affichages: 57
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re : Aide syntaxe macro gestion de stock

Re,

cette fois c'est OK. Voici le code du formulaire Stock.


Code:
Private Declare PtrSafe Function FindWindowA& Lib "User32" _
    (ByVal lpClassName$, ByVal lpWindowName$)
Private Declare PtrSafe Function EnableWindow& Lib "User32" _
    (ByVal hWnd&, ByVal bEnable&)
Private Declare PtrSafe Function GetWindowLongA& Lib "User32" _
    (ByVal hWnd&, ByVal nIndex&)
Private Declare PtrSafe Function SetWindowLongA& Lib "User32" _
    (ByVal hWnd&, ByVal nIndex&, ByVal dwNewLong&)

Private Sub UserForm_Initialize()
Dim itmIdx, iItem As Long

    
Me.Caption = "CONTRÔLE STOCK"
Me.LblBand7.Width = Me.Width

With Sheets("Stock")
 For i = 2 To .Range("C65536").End(xlUp).Row
        If Me.CmbProduits.ListIndex = -1 Then Me.CmbProduits.AddItem .Range("C" & i)
    Next i
End With

    If Len(RTrim(gStkArt)) <= 0 Then
        Exit Sub
    End If
    itmIdx = -1
    For iItem = 0 To Me.CmbProduits.ListCount - 1
        If Me.CmbProduits.List(iItem) = gStkArt Then
            itmIdx = iItem
            Exit For
        End If
    Next iItem
    If itmIdx < 0 Then
        MsgBox "Absent de la liste"
    Else
        Me.CmbProduits.ListIndex = itmIdx
    End If

    Dim x As Long, Fichier As String
    Fichier = ThisWorkbook.Path & "\favicon.ico"
    x = Len(Dir(Fichier))
    If x = 0 Then Exit Sub
    x = ExtractIconA(0, Fichier, 0)
    SendMessageA FindWindow(vbNullString, Me.Caption), &H80, False, x
    
    Dim hWnd As Long
    hWnd = FindWindowA(vbNullString, Me.Caption)
    SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) Or &H20000
End Sub

Private Sub UserForm_Activate()
 Dim hWnd As Long
    hWnd = FindWindowA("XLMAIN", Application.Caption)
    EnableWindow hWnd, 1
End Sub

Private Sub CmbProduits_Change()
Dim cel As Range, lig As Long
lig = Sheets("Stock").Range("a65536").End(xlUp).Row + 1

With Sheets("Stock").Range("a2:i" & lig)
    Set cel = .Find(Me.CmbProduits.Value)
    If Not cel Is Nothing Then
    Me.TxtID.Text = cel.Offset(0, -2)
    Me.TtxtCategorie.Text = cel.Offset(0, -1)
    Me.TxtArticle.Text = cel.Offset(0, 0)
    Me.TxtVente.Text = cel.Offset(0, 1)
    Me.TxtReservations.Text = cel.Offset(0, 2)
    Me.TxtStockReel.Text = cel.Offset(0, 3)
    Me.TxtStockMini.Text = cel.Offset(0, 4)
    Me.TxtACommander.Text = cel.Offset(0, 5)
    Me.TxtRuptStock.Text = cel.Offset(0, 6)
    Else
        MsgBox "Veuillez verifier le nom du produit.", , "La Gondolière"
        Exit Sub
    End If
End With
End Sub

Private Sub TxtRuptStock_Change()
If Me.TxtStockReel.Value <= 0 Then Me.TxtRuptStock.Value = "ATTENTION !"
End Sub

Private Sub CmdModifier_Click()
lig = Sheets("Stock").Range("a65536").End(xlUp).Row
  With Sheets("Stock").Range("a2:i" & lig)
        Set cel = .Find(Me.TxtID.Text)
        If Not cel Is Nothing Then
            cel.Offset(0, 0) = Me.TxtID.Text
            cel.Offset(0, 1) = Me.TtxtCategorie.Text
            cel.Offset(0, 2) = Me.TxtArticle.Text
             cel.Offset(0, 3) = Me.TxtVente.Text
            cel.Offset(0, 4) = Me.TxtReservations.Text
            cel.Offset(0, 5) = Me.TxtStockReel.Text
             cel.Offset(0, 6) = Me.TxtStockMini.Text
             cel.Offset(0, 7) = Me.TxtACommander.Text
             cel.Offset(0, 8) = Me.TxtRuptStock.Text
             End If
    End With
        Me.TxtID.Text = ""
        Me.TtxtCategorie = ""
        Me.TxtArticle.Text = ""
        Me.TxtVente.Text = ""
        Me.TxtReservations.Text = ""
        Me.TxtStockReel.Text = ""
        Me.TxtStockMini.Text = ""
        Me.TxtACommander.Text = ""
        Me.TxtRuptStock.Text = ""
End Sub

Private Sub CmdQuitter_Click()
Unload Me
UsfCom.Show
End Sub

J'ai changé la procédure de Exit à Change() et aussi modifier les lignes de la MsgBox comme ceci:

Code:
If lQteDsp < 0 Then
        sMsgErr = sMsgErr & "Veuillez réapprovisionner le stock"
        If MsgBox(sMsgErr, vbInformation + vbYesNo, "Stock Disponible") = vbYes Then
            gStkArt = Me.CmbArticles.Value
            UsfStock.Show 
        End If
    End If


Merci infiniment pour ton aide.


A+ :cool:
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
894

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG