Automatisation de gestion de stock

frangy a écrit :

Tu peux refaire un test après avoir remplacé le point par une virgule (2,01 au lieu de 2.01).

C'est bien là que réside le problème : la macro redémarre lorsque le remplacement est effectué

bonjour,

Merci beaucoup cette fois c'est bon enfin presque....

Désolé de dire ça mais maintenant je suis bloqué à un autre endroit

Pour le calcul de la couverture mensuelle, je n'arrive pas à faire apparaître le calcul.

Pour rappel, la formule de ce calcul est : stock moyen (calculé précédemment) / conso moyenne (la somme des sorties/12)

Je voudrais que, si la somme des sortie est = à 0 ou si le stock moyen =0, la case indique 0 sinon elle calcule la formule.

Dans certaines cases de la colonne correspondante apparaît des 0 mais je ne sais pas pourquoi pas dans tous!

Sub Stock()

Dim NumProduit As Long, DerLig As Long, StockInit As Long, StockFinal As Long, Quantite As Long

Dim Mouvement As String

Application.ScreenUpdating = False

With Sheets("Feuil1")

DerLig = .Cells(Rows.Count, 1).End(xlUp).Row

i = 2

While i <= DerLig

StockInit = .Cells(i, 8)

StockFinal = StockInit

Do

NumProduit = .Cells(i, 1)

Quantite = .Cells(i, 10)

Mouvement = .Cells(i, 9)

Select Case Mouvement

Case "S"

StockFinal = StockFinal - Cells(i, 10)

Sumquantite = Sumquantite + Cells(i, 10)

Case Else

StockFinal = StockFinal + Cells(i, 10)

End Select

i = i + 1

Loop Until NumProduit <> .Cells(i, 1)

Cells(i - 1, 11) = (StockInit + StockFinal) / 2 'Stock moyen

If Cells(i - 1, 11) <> 0 Then

Cells(i - 1, 12) = Sumquantite / Cells(i - 1, 11)

Else

Cells(i - 1, 12) = 0 'Taux de rotation

If Sumquantite = 0 Or Cells(i - 1, 11) = 0 Then

Cells(i - 1, 13) = 0

Else

Cells(i - 1, 13) = Cells(i - 1, 11) / (Sumquantite / 12) 'Couverture mensuelle

End If

End If

Sumquantite = 0

Wend

End With

Application.ScreenUpdating = True

End Sub

Cordialement

Bonjour,

Sub Stock()
Dim NumProduit As Long, DerLig As Long, StockInit As Long, StockFinal As Long, Quantite As Long
Dim Mouvement As String
    Application.ScreenUpdating = False
    With Sheets("Feuil1")
        DerLig = .Cells(Rows.Count, 1).End(xlUp).Row
        i = 2
        While i <= DerLig
            StockInit = .Cells(i, 8)
            StockFinal = StockInit
            Sumquantite = 0
            Do
                NumProduit = .Cells(i, 1)
                Quantite = .Cells(i, 10)
                Mouvement = .Cells(i, 9)
                Select Case Mouvement
                    Case "S"
                        StockFinal = StockFinal - Cells(i, 10)
                        Sumquantite = Sumquantite + Cells(i, 10)
                    Case Else
                        StockFinal = StockFinal + Cells(i, 10)
                End Select
                i = i + 1
            Loop Until NumProduit <> .Cells(i, 1)
            Cells(i - 1, 11) = (StockInit + StockFinal) / 2 'Stock moyen
            If Cells(i - 1, 11) <> 0 Then
                Cells(i - 1, 12) = Sumquantite / Cells(i - 1, 11)
            Else
                Cells(i - 1, 12) = 0 'Taux de rotation
            End If
            If Sumquantite = 0 Or Cells(i - 1, 11) = 0 Then
                Cells(i - 1, 13) = 0
            Else
                Cells(i - 1, 13) = Cells(i - 1, 11) / (Sumquantite / 12) 'Couverture mensuelle
            End If
        Wend
    End With
    Application.ScreenUpdating = True
End Sub

A+

Bonjour,

Merci Frangy pour cette réponse rapide et efficace !!

Je voulais savoir si à la fin de chaque If il fallait un End If, ou si plusieurs If pouvaient se suivre et et se terminer par un seul End If?

Faut-il toujours décaler, après un Else, la ligne en dessous ?

Exemple: If Cells(i - 1, 11) <> 0 Then

Cells(i - 1, 12) = Sumquantite / Cells(i - 1, 11)

Else

Cells(i - 1, 12) = 0 'Taux de rotation

End If

Cordialement

Je voulais savoir si à la fin de chaque If il fallait un End If, ou si plusieurs If pouvaient se suivre et se terminer par un seul End If?

La structure de base est :

If <Condition> then
    <Instruction1>
else
    <Instruction2>
End if

Les instructions peuvent également contenir le même type de structure

If <Condition1> then
    If <Condition2> then
        <Instruction1>
    Else
        <Instruction2>
    End If
Else
    <Instruction3>
End if

Tu peux donc aller très loin dans la construction de ces structures.

Il y a d’autres écritures possibles mais il est essentiel de bien maitriser cette structure de base.

Exemple de structure aménagée:

Si tu n’as qu’une instruction à placer, tu peux te contenter d’écrire

If <Condition> then <Instruction> 

Dans ce cas, le "End if " est implicite.

Tu peux également aller voir l’aide sur la fonction IIf, la clause ElseIf, etc.

Faut-il toujours décaler, après un Else, la ligne en dessous ?

Ce décalage appelé indentation facilite la lecture d’un code car il permet de repérer facilement les structures utilisées et leur niveau.

Regarde ce que donne une structure à 3 niveaux. On voit bien les 3 décalages correspondants.

If <Condition1> then
    If <Condition2> then
        If <Condition3> then
            <Instruction1>
        Else
            <Instruction2>
        End If
    Else
        <Instruction3>
    End If
Else
    <Instruction4>
End If

A+

Rechercher des sujets similaires à "automatisation gestion stock"