Facturation et Gestion stock VBA

Bonjour, j'ai mi en forme mon fichier afin que lorsque je saisie un facture celle ci me déduise mes stocks, ca marche presque bien, mais je rencontre un problème lorsque qu'il ne me reste qu'un seul article en stock, excel me dit que tous mes articles sont bien en stock et me lance l'impression, mais me déduit mon stock avant l'aperçut avant impression, je me retrouve donc avec mon message d'erreur rupture de stock dans la case désignation au lieu d'avoir la désignation de mon article.

Voici de photo pour être plus explicite.

photo1

et Voici le code VBA saisie:

Sub verification_stock()
'*******************************************************
'Verification que tous les articles se trouvent en stock
'*******************************************************

Dim cellule As Range: Dim test As Boolean
test = False

For Each cellule In Range("F6:F26")
If (cellule.Value = "-") Then
test = True
Exit For
End If
Next cellule

If (test = True) Then
MsgBox ("Des articles Hors stock figures dans la facture, Impossible de continer")
Exit Sub
End If

'*******************************************************
'Verification qu'on ne depasse pas la quantité en stock
'*******************************************************

Dim ligne As Integer: ligne = 2
Dim valeur_stock As Integer: valeur_stock = 1
Dim valeur_demandee As Integer: valeur_demandee = 1
Dim ref_cat As String: Dim ref_facture As String
Dim choix_utilisateur As Byte

While (Workbooks("facturation-et-stock-excel").Worksheets("articles").Cells(ligne, 6).Value <> "")
valeur_stock = Workbooks("facturation-et-stock-excel").Worksheets("articles").Cells(ligne, 6).Value
ref_cat = Workbooks("facturation-et-stock-excel").Worksheets("articles").Cells(ligne, 3).Value

For Each cellule In ThisWorkbook.Worksheets("facturation").Range("C20:C35")

If (cellule.Value = ref_cat) Then
valeur_demandee = ThisWorkbook.Worksheets("facturation").Cells(cellule.Row, 5)
If (valeur_demandee > valeur_stock) Then
MsgBox ("La référence " & cellule.Value & " ne possède pas assez de stock")
test = True
End If
End If

Next cellule

ligne = ligne + 1
Wend

If (test = True) Then
Exit Sub
Else
choix_utilisateur = MsgBox("La facture semble correcte, souhaitez-vous l'imprimer et mettre à jour les stocks ?", vbYesNo)

If (choix_utilisateur = 6) Then
For Each cellule In ThisWorkbook.Worksheets("facturation").Range("C20:C35")
ligne = 2
While (Workbooks("facturation-et-stock-excel").Worksheets("articles").Cells(ligne, 6).Value <> "")
If (cellule.Value = Workbooks("facturation-et-stock-excel").Worksheets("articles").Cells(ligne, 3).Value) Then
Workbooks("facturation-et-stock-excel").Worksheets("articles").Cells(ligne, 6).Value = Workbooks("facturation-et-stock-excel").Worksheets("articles").Cells(ligne, 6).Value - ThisWorkbook.Worksheets("facturation").Cells(cellule.Row, 5).Value
End If
ligne = ligne + 1
Wend
Next cellule
Else
Exit Sub
End If
End If

ThisWorkbook.Worksheets("facturation").PrintPreview

End Sub

Edit modo : merci de mettre le code entre balises, avec le bouton </>

si quelqu'un peu m'aider

merci

Bonjour,

Dans votre code, quelle est la ligne qui génère ceci "Cet article n'est plus en stock" ?

Avez-vous essayez de déplacer la ligne "ThisWorkbook.Worksheets("facturation").PrintPreview" avant l'envoi du message précédent?

Après, difficile de répondre sans pouvoir tester.

**************************************************************************************

Votre code contient plein de parenthèses et des tests inutiles.

Pour une meilleure lisibilité, déclarez les variables au début de la macro, et faites la séparation entre les variables et les valeurs qui leurs sont associées (pas sur les mêmes lignes que les variables et séparées par 2 points)

Votre code réorganisé en tenant compte de ce que j'ai écrit précédemment:

Sub Verification_Stock()
    'Déclaration des variables
    Dim Cellule As Range
    Dim Ligne As Integer, Valeur_Stock As Integer, Valeur_Demandee As Integer
    Dim Ref_Cat As String, Ref_Facture As String
    Dim Choix_Utilisateur As Byte

    Ligne = 2
    Valeur_Stock = 1
    Valeur_Demandee = 1

    '*******************************************************
    'Verification que tous les articles se trouvent en stock
    '*******************************************************
    For Each Cellule In Range("F6:F26")
        If Cellule.Value = "-" Then
            MsgBox "Des articles Hors stock figurent dans la facture, Impossible de continuer"
            Exit Sub
        End If
    Next Cellule

    '*******************************************************
    'Verification qu'on ne depasse pas la quantité en stock
    '*******************************************************
    While Workbooks("facturation-et-stock-excel").Worksheets("articles").Cells(Ligne, 6).Value <> ""
        Valeur_Stock = Workbooks("facturation-et-stock-excel").Worksheets("articles").Cells(Ligne, 6).Value
        Ref_Cat = Workbooks("facturation-et-stock-excel").Worksheets("articles").Cells(Ligne, 3).Value
        For Each Cellule In ThisWorkbook.Worksheets("facturation").Range("C20:C35")
            If Cellule.Value = Ref_Cat Then
                Valeur_Demandee = ThisWorkbook.Worksheets("facturation").Cells(Cellule.Row, 5)
                If Valeur_Demandee > Valeur_Stock Then
                    MsgBox "La référence " & Cellule.Value & " ne possède pas assez de stock"
                    Exit Sub
                End If
            End If
        Next Cellule
        Ligne = Ligne + 1
    Wend

    Choix_Utilisateur = MsgBox("La facture semble correcte, souhaitez-vous l'imprimer et mettre à jour les stocks ?", vbYesNo)
    If Choix_Utilisateur = 6 Then
        For Each Cellule In ThisWorkbook.Worksheets("facturation").Range("C20:C35")
            Ligne = 2
            While Workbooks("facturation-et-stock-excel").Worksheets("articles").Cells(Ligne, 6).Value <> ""
                If Cellule.Value = Workbooks("facturation-et-stock-excel").Worksheets("articles").Cells(Ligne, 3).Value Then
                    Workbooks("facturation-et-stock-excel").Worksheets("articles").Cells(Ligne, 6).Value = Workbooks("facturation-et-stock-excel").Worksheets("articles").Cells(Ligne, 6).Value - ThisWorkbook.Worksheets("facturation").Cells(Cellule.Row, 5).Value
                End If
                Ligne = Ligne + 1
            Wend
        Next Cellule
    End If

    ThisWorkbook.Worksheets("facturation").PrintPreview
End Sub

Cdlt

Merci Arturo83,

Mon message rupture de stock est géré par une formule dans ma cellule désignation.

Je te mets un lien de mon fichier j'espère que tu pourras l'ouvrir.

https:// drive.google / file / d / 1NUeRKxMGTnfR0WGAfidCWIL4Ir3wBAph / view?usp=sharing

rejoute le .com après google et supprime les espaces devant et derrière chaque / , il ne voulais pas prendre mon lien j'ai du tricher

Merci de ton aide

Bonjour,

Modification des formules:

en D20:

=SI(C20="";"";SI(RECHERCHEV($C20;INDIRECT("articles!C1:F"&NBVAL(articles!C:C));4;0)=0;"Cet article n'est plus en Stock";RECHERCHEV($C20;INDIRECT("articles!C1:F"&NBVAL(articles!C:C));2;0)))

en E20:

=SI(D20="";"";SI(RECHERCHEV($C20;INDIRECT("articles!C1:F"&NBVAL(articles!$C:$C));4;0)=0;0;RECHERCHEV($C20;INDIRECT("articles!C1:F"&NBVAL(articles!$C:$C));4;0)))

en F20:

=SI(E20=0;"";SI(RECHERCHEV($C20;INDIRECT("articles!C1:F"&NBVAL(articles!$C:$C));4;0)=0;0;RECHERCHEV($C20;INDIRECT("articles!C1:F"&NBVAL(articles!$C:$C));3;0)))

le stock du premier article "ZP001" est bien égal à 0, donc restitue bien le message.

Cdlt

Edit: je regarde pour le problème lié à l'impression

Pour le problème de remise à zéro du nombre d'articles.

C'est normal, puisque dans la facture vous récupérez le nombre d'articles existants par formule, puis dans le code vous venez soustraire cette même valeur au stock dans la feuille "Articles", donc forcément vous aurez toujours 0.

Les quantités dans la feuille "facturation" doivent être saisies manuellement.

EDIT:

Je dois m'absenter pour un moment, je vous fais tout ça à mon retour.

il n'y a pas de formule sur ma colonne E20 je saisie déjà manuellement mes quantités.

Ok merci j'attend votre retour

Me voilà de retour,

Principe d'utilisation, lorsque vous saisissez un code article dans la feuille "facturation", automatiquement apparaît dans la colonne "Quantité " ce qui est disponible en stock ensuite, saisissez à la place de ces valeurs, les quantités que vous désirez sortir, puis cliquez sur le bouton "Validation". Si cela vous convient , vous répondez "Ok" pour avoir l'aperçu avant impression, aussitôt après l'impression, dans la feuille "facturation", les quantités demandés sont remplacées par l'état du nouveau stock.

Votre fichier étant anormalement volumineux, je l'ai refait pour qu'il retrouve une taille normale, il se pourrait que je sois passé à côté de quelques points à la reconstruction, si c'était le cas, vous pouvez simplement récupérer la macro dans le module 2 (et supprimez la macro que vous avez placé dans le module de la feuille).

Cdlt

Edit:

Attention j'ai remplacé quelques valeurs du stock pour les essais.

Merci infiniment pour ton aide, que le lien du fichier reste sur le forum et serve à d'autres ne me dérange pas, mais as tu possibilité de le republié sans les images d'entête stp j'aurais même du les enlever avant .

Merci beaucoup

Bonjour,

Ok, voilà le fichier sans les images

Cdlt

Rechercher des sujets similaires à "facturation gestion stock vba"