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.
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 SubEdit 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 SubCdlt
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