Automatisation de gestion de stock

Bonjour à tous,

Je viens sur ce forum pour que quelqu'un vienne à mon secours!

Je ne parviens pas à maîtriser correctement le langage VBA et macro, malgré les nombreuses recherches effectuées.

Je viens ici pour savoir si, tout d'abord, par quel moyen je dois passer pour résoudre mon problème. Ensuite je souhaiterai fortement obtenir une solution

Voilà mon problème:

Je dois gérer un stock de 10000 références, calculer le stock moyen de chaque références (je possède le stock initial de chacun). Le problème est que de faire chaque article un par un, c'est très long et malheureusement je manque de temps

Je voudrais donc automatiser ce calcul pour qu'il puisse se faire seul.

Je fourni le fichier correspondant, dont j'ai supprimé une très grande partie pour pouvoir le joindre.

https://www.cjoint.com/c/CDtj32oiIUD

Cordialement

Bonjour,

Aucune précision dans ton message quant à la façon de calculer le stock moyen...

Le seul indice dans ton fichier est la formule dans la cellule K9 de ta feuille qui, en plus, semble erronée puisqu'elle recherche une lettre "A" dans ta colonne I qui n'apparait jamais mais ne fait pas mention de la lettre "T" qui elle apparait.

J'en ai donc déduit que T remplaçait A pour le calcul des stocks.

Lancer la macro en appuyant sur Bouton 1 et calculs à vérifier

bonjour

suggestion

tu saisis les mouvements (avec un signe - s'il s'agit d'une sortie de stock)

il faut en suite

  • trier par réf (et par date, mais c'est facultatif je pense)
  • menu Données/sous totaux/ avec regroupement par réf et synthèse par quantité

voir pj

rem la date la plus ancienne de chaque réf doit contenir le stock de départ

254toto2.xls (13.50 Ko)

Merci pour vos réponse.

Pour Game Over,

Désolé d'avoir oublier la formule du stock moyen !

La formule est :

(Stock initial +stock final)/2

Du coup, il y a des erreurs de calculs.

La formule en K9 n'est pas fausse: l'ayant faite a la main, je n'est pris que les données de la colonne + les A

Petite précision, les différentes initiales signifient:

E pour Entrée

S pour Sortie

A pour Annulation de sortie (donc une Entrée): la lettre n’apparaît pas dans le morceau du fichier transmis mais elle est bien de nombreuses fois dans les données

R pour Retour (=Entrée)

T pour Transfert --> Il s'agit soit d'une entrée soit d'une sortie car ce produit transite entre les différents magasins. C'est un problème puisque je ne sait pas si il faut le comptabilisé en tant qu'Entrée ou Sortie ou les 2, voire même de ne pas les comptés du tout.

Le stock initial est bien présent. pour plus de facilité, je donne aussi la formule pour calculer le stock final:

somme des entrées (E)+Somme des Retours (R) +Somme des Annulations (A) -Somme des Sorties (S) + Somme des Transfert (T)

Pour l'ajout des Transferts, je vais le calculer comme cela pour l'instant, en attendant de revoir ma responsable

Cordialement

Bonjour, peux-tu préciser où sont les erreurs et quels sont les résultats exacts ?

Bonjour c3drik58,

Bonjour Game Over,

Effectivement, je trouve un résultat différent (ce qui ne veut pas dire que j'ai forcément raison).

A+

Bonjour Game Over,

Je suis ravi que tu réponde aussi vite, merci beaucoup.

J'ai regardé et les calculs ne correspondent pas.

Je pense que cela ne vient que d'un problème de parenthèse.

Je te renvoi le fichier que tu m'as transmis avec les formules correspondant au calcul du stock

Stock moyen =(stock initial+(somme des entrées (E)+Somme des Retours (R) +Somme des Annulations (A) + Somme des Transfert (T) -Somme des Sorties [S] )) /2

Cordialement

c3drik58


Bonjour Frangy,

pardon de ne pas t'avoir nommer dans ma réponse.

Cordialement

Bonjour C3drick, bonjour frangy.

C3drick, je t'avoue ne pas bien comprendre.

Dans la pièce jointe que tu nous fournis en réponse à ma question, tu ajoutes dans la colonne P un exemple avec le calcul des valeurs que tu souhaites voir apparaitre pour les 6 premières références de ton tableau.

Je compare tes résultats aux miens, affichés dans la colonne K de ma proposition (ap avoir appuyé sur Bouton 1) et les valeurs sont exactement les mêmes. Je ne vois pas où je me suis trompé.

@c3drik58,

Attention, dans tes messages tu indiques deux formules du stock moyen qui sont différentes.

La première que tu donnais était

(Stock initial +stock final)/2

Et la seconde

Stock moyen =(stock initial+ entrées –sorties) /2

Pour être identique à la première, cette seconde formule devrait s’écrire

Stock moyen =(stock initial+ (stock initial + entrées –sorties)) /2

puisque stock final= stock initial + entrées –sorties

A+

Bonjour,

@Game Over,

Je ne sais pas si cela viens de mon ordinateur mais je ne trouve pas du tout les même résultats.

Par exemple, pour la 2ème référence, mon calcul donne 10,5 et le tien donne 45,5

Pour la 3ème référence, mon calcul donne 25 et le tien 78,5.

@Frangy

Tu as raison, j'ai oublié une partie.

La vrai formule est : Stock moyen =(Stock initial +stock final)/2

Le calcul du stock final est : (Stock initial+(entrées - sorties))

donc la formule Excel pour le Stock moyen =(stock initial+ (stock initial +entrées –sorties)) /2

Erreur de ma part je suis désolé. Merci.


@ Game Over,

Désolé mais tu as raison.

J'ai oublié une partie du calcul donc ta macro est parfaite

Merci beaucoup pour ta solution.

Il ne me reste plus qu'à la placer sur mon fichier de 180000 lignes et voir si sa ne le fait pas beuger.

Bonsoir Game Over,

Pardon de ne répondre que maintenant, travail oblige.

Ta macro me convient parfaitement, merci beaucoup.

J'ai ajouter quelques options afin de pouvoir calculer également le taux de rotation et la couverture.

Lorsque j'applique la macro au fichier original, après 22000 lignes, la macro stoppe et une erreur de type 13 apparaît. Je ne comprend pas pourquoi? Je fournis le VB. le débogage qui apparaît ce situe sur la ligne en gras.

Sub Stock()

Dim NumProduit As Long, DerLig As Long, StockInit As Long, StockFinal As Long, Quantité As Long

Dim Mouvement As String

Application.ScreenUpdating = False

With Sheets("Mvt 12")

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

i = 2

While i <= DerLig

StockInit = .Cells(i, 8 )

StockFinal = StockInit

Do

NumProduit = .Cells(i, 1)

Mouvement = .Cells(i, 9)

Quantité = .Cells(i, 10)

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) 'Taux de rotation

If Sumquantite <> 0 Then

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

End If

End If

Sumquantite = 0

Wend

End With

Application.ScreenUpdating = True

End Sub

Est-il possible que cela ce produise car il y a des nombres décimaux?

Cordialement.

Est ce que ta variable quantité dépasse 2milliards 147millions... ?

peut être qu'une valeur non numérique s'est glissée dans ton tableau et fait planter la macro ?

Relance la macro sans dimensionner ta variable quantité... (ne la déclare pas en début de code, sur la ligne dim).

Non la variable Quantité ne dépasse pas ce nombre. Les données s'étendent de 0 à 387000 ,avec quelques nombres décimaux.

J'ai vérifier et aucune valeur non numérique n’apparaît, le style de cellule est le même pour toutes.

Si je ne l'a déclare pas, c'est la ligne StockFinal = StockFinal + Cells(i, 10) qui est en débogage !

J'ai réessayé en remplaçant: Quantité As Long par Quantité As Variable

est même chose, la même ligne que précédemment en débogage.

Je ne comprend pas!

Et la macro s'arrête toujours a la même ligne.

Est ce que tu peux envoyer ton fichier ? sans voir, je ne peux pas te dire....

Bonjour,

Remplace cette ligne

Dim NumProduit As Long, DerLig As Long, StockInit As Long, StockFinal As Long, Quantité As Long

par celle-ci

Dim NumProduit As Long, DerLig As Long, StockInit As Variant, StockFinal As Variant, Quantité As Variant

A+

J'ai testé la ligne mais elle ne marche pas non plus, il y a toujours un débogage sur la même ligne.

Je peux transmettre le fichier mais il me faudrait une adresse mail car il est volumineux, je le mettrai sur un lien.

Cordialement

tu trouves l'adresse mail sous l'avatar

Lors de l’apparition de l’erreur, tu dois avoir la ligne de code

Quantité = .Cells(i, 10)

qui est surlignée en jaune. Tu dois pouvoir regarder la valeur de la variable i en passant la souris dessus (ou dans la fenêtre Variables locales). Cela te permettra de connaitre le numéro de la ligne où se produit l’erreur. Il te restera à aller voir la valeur de cette cellule en colonne J.

A+

@ Frangy,

J'ai effectué ce que tu m'a dit et la ligne qui pose problème est la 22392.

C'est une cellule contenant un nombre décimal (2.01)

Comment faire pour calculer ces nombres ?

Souhaite tu que je t'envoi le fichier?

Cordialement.

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

La déclaration des variables doit rester comme indiqué précédemment

Dim NumProduit As Long, DerLig As Long, StockInit As Variant, StockFinal As Variant, Quantité As Variant

A+

Rechercher des sujets similaires à "automatisation gestion stock"