Gestion de stok très simplifiée

sarata

XLDnaute Junior
Bonjour le forum !

J'ai un fichier contenant plusieurs références de pièces sur une colonne et leurs quantités sur une autre colonne et j'aimerai pouvoir gérer les entrées sorties de ces références de manière très simple:
2 "gros" boutons ENTREE et SORTIE

Exemple pour l'action du bouton entrée :​
Une fenêtre apparait avec 3 zones et un bouton valider:
- Entrée de stock à la date de : ../../....[ la date du jour est marquée sans possibilité de saisie]
- Entrer la référence à entrer en stock : [l'idéal serait une zone avec une saisie semi auto des données de la première colonne]
- Quantité à entrer : jusqu'à 6 digits
Après validation , une fenêtre "ok only" apparait pour confirmer l'opération : : la réf XXXX a été incrémentée de XXX, stock disponible : XXXX

Quelqu'un peut me proposer son aide?

Merci par avance!!
 

Pièces jointes

  • Gestion PCD V1.xls
    82.5 KB · Affichages: 357
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Gestion de stok très simplifiée

Non "ImporterFCtrl" est le nom de la procédure d'importation dans le module "Iimportations" de mon classeur "Importation.xls" (j'ai pris la seconde option d'installation, qui sait, vous pourriez avoir envie d'importer à partir de diverses sources comme des factures par exemple. Et puis je crois que c'est plus souple). J'ai provisoirement considéré que la feuille "A commander" était elle même en même temps la feuille de contrôle, vu qu'il y a peu de colonnes à spécifier, il faut donc la doter des 5 Plages nommées attendues par cette procédure. Mais ce n'est peut être pas une bonne idée. À vous de voir.
Si vous préférez garder ma feuille de contrôle initiale ailleurs, juste garnie des bonnes informations évidemment, spécifiez son nom vba à la place de "Me" dans l'appel à "ImporterFCtrl Me".

P.S. Faites un glisser déplacer du module "Importations" vers votre projet dans l'explorateur de projets de VBA, évidemment.
À+

P.P.S. Ma procédure s'appelle "ImporterFCtrl", c'est à dire : importer selon la feuille de contrôle spécifiée. Celle contient tout ce qu'il faut pour savoir quoi faire, à part le classeur à prendre, mais celui ci est cherché parmi les classeurs ouverts qui vont bien avec les titres qu'il faut. S'il n'en existe aucun qui soit agréé par l'opérateur, la boîte d'ouverture lui est proposée.
Bonne soirée.
 
Dernière édition:

sarata

XLDnaute Junior
Re : Gestion de stok très simplifiée

Bonjour Dranreb

Je reviens vers toi pour faire mon import, car je n'ai toujours pas réussi :s:s
J'ai joint le fichier de gestion de stock (bien amputé à cause de la limitation) ainsi que la trame du fichier qu'on importe pour la saisie en masse.

Je pense que j'ai pas bien compris ce qu'il faut mettre dans réf des lignes a remplacer (au début j'ai appelé une plage que j'ai nommé juste en dessous de la ligne de titres du fichier qu'on importe mais ça n'a pas marché )

D'autre part je relève deux dysfonctionnements sur ce qui a déjà été mis en place:

--> Il arrive qu'a l'ouverture le système super ingénieux d'agrandissement de BDD ne fonctionne pas (le défilement ne produit rien)
--> On peut quand même rentrer un ligne avec un code vide (juste avec la quantité) et la validation fait buger le fichier
(un vide est proposé dans la liste déroulante si on ne renseigne pas pour une réf de pièce le code ou si on saute une ligne dans la base de données )
Serait il possible que le ok reste desactivé tant qu'un code (non vide) n'est pas selectionné

--> En dernier un détail sans importance mais je dis quand même :ma mise en forme auto sur 2007 (rouge pour les stocks bas) est blanche sur le 2003

Merci (beaucoup) et très bonne journée
 

Pièces jointes

  • SPARE PARTS - Order Form.xls
    50 KB · Affichages: 81
  • Gestion Stock PCD FR avec import .xls
    150.5 KB · Affichages: 101
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Gestion de stok très simplifiée

Bonjour.
Vous avez rajouté une feuille "Entrée en masse".
Vous ne souhaitez donc plus utiliser la même feuille "A commander" ?
Il doit pourtant bien arriver que les "A commander" finissent par se transformer "A entrer au stock",
aux articles épuisés près, ce qui limiterait les correctons à faire, non ?
A+
 

sarata

XLDnaute Junior
Re : Gestion de stok très simplifiée

Bonjour Dranreb!

En effet ce qui est commandé est en théorie reçu..mais je pense qu'il y aura plus de corrections à faire que ça ...on ne reçoit pas tout et peut être même pas en totalité, et d'autre part pour l'esprit de l'utilisateur je pense vraiment qu'il vaut mieux séparer l'entrée en masse de la commande
L'import serait appelé de la feuille gestion de stock (c'est peut être une betise ...mais est il possible après sélection de la zone à importer de coller les données dans la liste du userform d'entree en stock et d'executer le mouvement)

PS : sais tu pq l'agrandissement de la bdd ne fonctionnerait pas ?
 

Dranreb

XLDnaute Barbatruc
Re : Gestion de stok très simplifiée

je ne vois pas pourquoi l'agrandissement ne marcherait pas. Je le limite à une sélection de la seule ligne exactement en dessous pour limiter le risque de laisser trainer des lignes vide. Et je rajoute une procédur qui nettoye à la désactivation. Faut-il prendre la désignation du fournisseur ou celle du stock ? Ou les deux pour vérifier ?
 

sarata

XLDnaute Junior
Re : Gestion de stok très simplifiée

La macro doit être incompatible avec une fonction excel, il m'est arrivée d'ouvrir le fichier , de constater que ça marchait bien puis de constater bien après [sans refermer le fichier ] que ça ne marchait plus
Le risque est faible de sauter des lignes je préfère pouvoir garder l'ajout de plus d'une ligne je me contenterai de la procédure de nottoyage
garder la description de la base de données Stock

MERCI
 

Dranreb

XLDnaute Barbatruc
Re : Gestion de stok très simplifiée

Voilà.
Je n'ai pas pu tout compiler pour vérifier: il s'arrête su FArch qu'il ne connaît plus.
Je suppose que vous avez enlevé l'archive des mouvements pour pouvoir joindre le fichier sans le compresser. N'oubliez pas de la remettre.
J'ai modifié un peu la détection de la dernière ligne à importer. je m'appuyais sur UsedRange qui comportait, là, des lignes vides de données mais portant des bordures ! Je m'appuis maintenant sur la dernière cellule utilisée (ce qui n'est pas plus fiable) mais je remonte jusqu'à trouver une lighne portant des données dans les colonnes dont le titre a été controlé.

Remarque: Il faudra sûrement ajouter quelques lignes de code derrière la mise à jour du stock, ne serait-ce que pour imnformer qu'elles s'est bien effectuée, voir supprimer tout le contenu qui n'a donc plus lieu d'être. À vous de me dire (après avoir essayé de le faire vous même)

Il y a une erreur : le bouton "Ajouter au stock" doit s'appeler "BtMàJStock" et non "BtOk".

À+
 

Pièces jointes

  • GestionStockPCDFR.xls
    147.5 KB · Affichages: 113
  • GestionStockPCDFR.xls
    147.5 KB · Affichages: 112
  • GestionStockPCDFR.xls
    147.5 KB · Affichages: 111
Dernière édition:

sarata

XLDnaute Junior
Re : Gestion de stok très simplifiée

j'ai rectifié l'erreur et je ferai la notification de maj
la supression est elle nécessaire à ton avis?
j'ai relevé pour l'instant une seule anomalie , pour une réf en particulier (une seule pour l'instant)
Cette réf bien que présente dans la bdd stock si on l'importe la maj n'est pas prise en compte : cad que bien l'opération est présente dans lhistorique des mvts, rien ne figure dans la colonne dernier mvt et si on l'importe toute seule, et qu'on veut "ajouter au stock", la message pièce "" non répertoriée en stock s'affiche...

NB : comment peut on enlever le message d'erreur N/A dans la colonne désignation? [pour avoir un vide]


Merci beaucoup
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Gestion de stok très simplifiée

Bonjour.

Non, la suppression n'est pas nécessaire. À défaut, la remise à 0 des quantités non plus. Il faut juste que si, malgré la notification de mise à jour, la tentation persiste de rappuyer sur le bouton, cela soit sans conséquence.

Vérifiez si le code pièce qu'il ne trouve pas est bien écrit dans le stock tel que cité dans le message, et s'il n'y a pas en plus, par exemple, un espace derrière, ou s'il ne peut pas être interprèté comme un nombre d'un coté et non de l'autre. Je ne peux pas vous aider plus sans voir les fichiers.
Rajoutez un test après le "On Error" pour éviter le message lorsqu'il y a moins de 2 articles à mettre à jour:
VB:
On Error Resume Next
If CodePièce = "" Then GoTo Suivant
Lc = WorksheetFunction.Match(CodePièce, FLstPcD.[CodesPièces], 0)

Il faut une virgule comme séparateur dans la notations R1C1 native et non un point virgule contrairement à la notation A1 locale. Je n'ai pas cette fonction SIERREUR dans ma version d'Excel et ne connais donc pas son nom natif. IFERROR peut être ?
Avec mes moyens j'aurais mis
VB:
FEntrées.[DésignEntrer].FormulaR1C1 = _
"=IF(CodeEntrer<>"""",IF(ISNUMBER(MATCH(CodeEntrer,CodesPièces,0)),INDEX(DésignPièces,MATCH(CodeEntrer,CodesPièces,0)),""*** Inconnu au stock ***""),"""")"
mais… supprimez peut être plutôt cette instruction tout simplement. La formule en place sera reproduite grâce au Copy de la dernière ligne lors de l'importation. Mettez plutôt dans la barre de formule:
Code:
=SI(CodeEntrer<>"";SIERREUR(INDEX(DésignPièces;EQUIV(CodeEntrer;CodesPièces,0));"*** Inconnu au stock ***");"")
J'aurais été moins inquiet pour vous si vous m'aviez raconté : j'ai trouvé ceci et celà qui ne marchait pas et j'ai compris que ça venait de tel et tel cas et y ai apporté telle solution.
Dans l'intéret même des demandeurs, ç'aura été la dernière fois que j'aurai développé un truc tout fait !
Cordialement.
 
Dernière édition:

sarata

XLDnaute Junior
Re : Gestion de stok très simplifiée

Bonjour le forum bonjour Dranreb
Déjà désolée du retard pris pour répondre (des vacances loin de tous ces bidules appelés ordis :))
Sinon je renouvelle mes remerciements à Dranreb et je fais part de mon retour (les utilisateurs sont ravis !)et je regrette réellement ce malentendu
Je reviens avec un point qu'on a évoqué mais pas résolu : la sécurisation de l'import
Le but est d'éviter que les utilisateurs enregistrent 2 fois la liste importée
J'ai cherché sans succès :( comment annuler l'action de la macro si on rappuie, d'autre part je pense que c'est plus efficace de supprimer les données à la fin de la mise à jour du stock et garder uniquement deux lignes vides
Peux tu m'aider ?

GRAND MERCI
Code:
Private Sub BtMàjStock_Click()
Dim SgnMvt As Long, Heure As Date, Stock As Long, CodePièce As String, Qté As Long, Lc As Long, Lm As Long, La As Long
SgnMvt = 1
Heure = Now
For Lm = 1 To Me.[CodeEntrer].Rows.Count
   CodePièce = Me.[CodeEntrer].Rows(Lm).Value
   On Error Resume Next
   If CodePièce = "" Then GoTo Suivant
   Lc = WorksheetFunction.Match(CodePièce, FLstPcD.[CodesPièces], 0)
   If Err Then
      MsgBox "Pièce """ & CodePièce & """ non répertoriée en stock.", vbExclamation, "Approvisionnements"
      GoTo Suivant: End If
   On Error GoTo 0
   Stock = FLstPcD.[StockDispo].Rows(Lc).Value
   Qté = Me.[QtéEntrer].Rows(Lm).Value * SgnMvt
   Stock = Stock + Qté
   FLstPcD.[StockDispo].Rows(Lc).Value = Stock
   With FArch.[Tablo]: La = .Rows.Count: .Rows(La).Copy: .Rows(La).Insert
      La = .Rows(La + 1).Row: End With
   FArch.[Heure].Rows(La).Value = Heure
   FArch.[Code.].Rows(La).Value = CodePièce
   FArch.[Qté].Rows(La).Value = Qté
   FArch.[Stock].Rows(La).Value = Stock
   FLstPcD.[DatDrnMvt].Rows(Lc).Value = Heure
   FLstPcD.[QtéDrnMvt].Rows(Lc).Value = Qté
Suivant: Next Lm
MsgBox " ENTRIES WELL REGISTRED  " & vbCrLf & "   THE STOCK IS UPDATED", vbInformation

End Sub

NB: L'agrandissement de la BDD ne marche qu'a l'ouverture du fichier passé un moment la macro n'a aucun effet !!?
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Gestion de stok très simplifiée

Bonjour.
Content d'avoir de vos nouvelles.
À tester:
VB:
Private Sub BtMàjStock_Click()
Dim SgnMvt As Long, Heure As Date, Stock As Long, CodePièce As String, Qté As Long, Lc As Long, Lm As Long, La As Long
Dim QtéTot As Long 'juste pour message de fin
SgnMvt = 1: QtéTot = 0
Heure = Now
For Lm = 1 To Me.[CodeEntrer].Rows.Count
   CodePièce = Me.[CodeEntrer].Rows(Lm).Value
   On Error Resume Next
   If CodePièce = "" Then GoTo Suivant
   Lc = WorksheetFunction.Match(CodePièce, FLstPcD.[CodesPièces], 0)
   If Err Then
      MsgBox "Pièce """ & CodePièce & """ non répertoriée en stock.", vbExclamation, "Approvisionnements"
      GoTo Suivant: End If
   On Error GoTo 0
   Stock = FLstPcD.[StockDispo].Rows(Lc).Value
   Qté = Me.[QtéEntrer].Rows(Lm).Value * SgnMvt
   Stock = Stock + Qté
   FLstPcD.[StockDispo].Rows(Lc).Value = Stock
   With FArch.[Tablo]: La = .Rows.Count: .Rows(La).Copy: .Rows(La).Insert
      La = .Rows(La + 1).Row: End With
   FArch.[Heure].Rows(La).Value = Heure
   FArch.[Code].Rows(La).Value = CodePièce
   FArch.[Qté].Rows(La).Value = Qté
   FArch.[Stock].Rows(La).Value = Stock
   FLstPcD.[DatDrnMvt].Rows(Lc).Value = Heure
   FLstPcD.[QtéDrnMvt].Rows(Lc).Value = Qté
   QtéTot = QtéTot + Qté
Suivant: Next Lm

If MsgBox(QtéTot & " pièces ont été ajoutées aux stock." & vbLf & "Cette liste va maintenant être supprimée.", _
   vbInformation + vbOKCancel, "Approvisionnements") = vbCancel Then Exit Sub
Me.[CodeEntrer].ClearContents
Me.[QtéEntrer].ClearContents
With Me.[LignesEntrer]
   If .Rows.Count > 2 Then .Rows(2).Resize(.Rows.Count - 2).Delete
   End With
End Sub

Ouh, làaaa....
Remplacez comme suit le dernier paragraphe de la procédure ImporterFCtrl du module importation:
VB:
Rem. ———— Épilogue
FCtrl.[ChNomF].Value = WB.FullName
Épilogue: With Application
   .Calculation = xlCalculationAutomatic
   .EnableEvents = True
   .ScreenUpdating = True
   End With
End Sub
Je l'avais copié de Prologue un peu plus haut et complètement oublié de le modifier pour qu'il défasse ce qu'il faisait. Je l'ai trouvé en cherchant comment Application.EnableEvents pouvait rester à false après une exécution, ce qui désactivait le dispositif d'agrandissement.

Cordialement.
 

sarata

XLDnaute Junior
Re : Gestion de stok très simplifiée

Génial Dranreb ravie de voir le petit rond vert à côté de votre pseudo ^^

Merci! c'est tout bon à part que je préfère avoir le nombre de références incrémentés, plutot que le cumul des quantités rajoutés
QtéTot = QtéTot + 1 (ça fne fait pas l'affaire car ça rajoute aussi les réf non répertoriées)

Code:
Private Sub BtMàjStock_Click()
Dim SgnMvt As Long, Heure As Date, Stock As Long, CodePièce As String, Qté As Long, Lc As Long, Lm As Long, La As Long
Dim QtéTot As Long
SgnMvt = 1: QtéTot = 0
Heure = Now
For Lm = 1 To Me.[CodeEntrer].Rows.Count
   CodePièce = Me.[CodeEntrer].Rows(Lm).Value
   On Error Resume Next
   If CodePièce = "" Then GoTo Suivant
   Lc = WorksheetFunction.Match(CodePièce, FLstPcD.[CodesPièces], 0)
   If Err Then
   QtéTot = QtéTot
      MsgBox "Pièce """ & CodePièce & """ non répertoriée en stock.", vbExclamation, "Approvisionnements"
      GoTo Suivant: End If
   On Error GoTo 0
    QtéTot = QtéTot + 1
   If MsgBox(QtéTot & " références ont été ajoutées aux stock." & vbLf & "Cette liste va maintenant être supprimée.", _
   vbInformation + vbOKCancel, "Approvisionnements") = vbCancel Then Exit Sub
   Stock = FLstPcD.[StockDispo].Rows(Lc).Value
   Qté = Me.[QtéEntrer].Rows(Lm).Value * SgnMvt
   Stock = Stock + Qté
   FLstPcD.[StockDispo].Rows(Lc).Value = Stock
   With FArch.[Tablo]: La = .Rows.Count: .Rows(La).Copy: .Rows(La).Insert
      La = .Rows(La + 1).Row: End With
   FArch.[Heure].Rows(La).Value = Heure
   FArch.[Code.].Rows(La).Value = CodePièce
   FArch.[Qté].Rows(La).Value = Qté
   FArch.[Stock].Rows(La).Value = Stock
   FLstPcD.[DatDrnMvt].Rows(Lc).Value = Heure
   FLstPcD.[QtéDrnMvt].Rows(Lc).Value = Qté
'   QtéTot = QtéTot + 1
Suivant: Next Lm
'
'If MsgBox(QtéTot & " pièces ont été ajoutées aux stock." & vbLf & "Cette liste va maintenant être supprimée.", _
'   vbInformation + vbOKCancel, "Approvisionnements") = vbCancel Then Exit Sub
Me.[CodeEntrer].ClearContents
Me.[QtéEntrer].ClearContents
With Me.[LignesEntrer]
   If .Rows.Count > 2 Then .Rows(2).Resize(.Rows.Count - 2).Delete
   End With
End Sub


Encore une demande sur le point sécurité comment je peux sécuriser les deux premières lignes d'import (éviter suppression et masquer les formules )
et surtout comment sécuriser l'historique des mouvements pour éviter que qlq ne supprime les 2 première lignes
En verrouillant les lignes en questions les macros ne marchent pas
merci!
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Gestion de stok très simplifiée

Merci! c'est tout bon à part que je préfère avoir le nombre de références incrémentés, plutot que le cumul des quantités rajoutés
Bah, ça ne mange pas de pain de le laisser en fin du message du style ... représentant un total de tant de pièces. Pour reconstruire le début du message à votre idée vous avez l'expression Me.[LignesEntrer].Rows.Count qui représente le nombre de lignes de la liste.
comment je peux sécuriser les deux premières lignes.
On pourait éventuellement réagir à une sélection suspecte de cellules qui pourrait aboutir à ces destructions mais je crois que le mieux c'est de mettre un petit texte rouge sur les lignes qui suivent les tableaux: "Laissez au moins 2 lignes vides dans ce tableau pour ne pas détruire les références de plages nommées"
 

sarata

XLDnaute Junior
Re : Gestion de stok très simplifiée

Oui ça mange pas de pain en effet:) je garde les deux mais si vous avez vu j'ai mis le message avant tous les enregistrements ça permet de les faire valider deux fois avant d'enregistrer l'opération... c'est pas mal du tout

Comment je peux annuler la répétition de msg box?
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
979

Statistiques des forums

Discussions
312 177
Messages
2 085 973
Membres
103 073
dernier inscrit
MSCHOE16