Gestion des stocks VBA

Skymap

XLDnaute Nouveau
Bonjour,

Dans le cadre d'un projet, je dois réaliser un fichier Excel permettant de gérer les stocks d'une structure. Je dispose donc de l'inventaire des produits (à titre d'exemple). Il s'agit d'une activité qui porte sur de l'achat pour de la revente.
Dans mon fichier j’ai réalisé un premier formulaire (plateforme d’accueil) avec les boutons suivants : Entrés / Sorties / Produits / Quitter.

Arrivé à ce stade, je commence à rencontrer des difficultés dans l’écriture vba. Je me suis pourtant aidé de projets similaires, mais je rencontre des difficultés à les adapter à mon projet.

Mon idée consiste, à l’aide d’un formulaire de copier l’ensemble des flux entrants (sur l’onglet « Entrées ») pour une commande fournisseur (la commande pouvant avoir plusieurs produits commandés). Cette étape me permettant ensuite de sommer les quantités achetées par produits (en colonne G onglet « Produits »).
De même concernant les flux sortants.

La trace des flux sortants dans l’onglet « Sorties » me permettant après de réaliser un fichier de facturation à l’aide des numéros de commande clients.

Je suis désormais à la recherche de conseils et solutions afin de pouvoir avancer dans mon projet. Je suis bien conscient que mon projet est ambitieux mais il me semble réalisable. Il n’est évident pour moi de retranscrire tout cela à l’écrit, ainsi j’espère avoir été compris dans ma demande.

Si vous avez du temps à m'accorder pour m'aider et/ou me conseiller ... je vous serais reconnaissant.
Si je peux vous éclaircir davantage ;)
Merci d'avance,

Skymap
 

Pièces jointes

  • Projet VBA.xlsm
    62 KB · Affichages: 188
  • Projet VBA.xlsm
    62 KB · Affichages: 160
  • Projet VBA.xlsm
    62 KB · Affichages: 175

vgendron

XLDnaute Barbatruc
Re : Gestion des stocks VBA

Bonjour Skymap et sois le bienvenu sur ce forum

pour commencer, j'ai ouvert ton fichier et quelques remarques déjà
1) tes onglets Entrées et Sorties sont vides: est ce normal?
2) du coup, tes formules en colonnes G et H de l'onglet Produits sont avec des Ref manquantes: #Ref!

3) pour tes formulaires:un conseil.. pour chaque combobox, textbox etc etc. mets un nom correspondant (tout comme tu l'as fait pour les boutons)

4) lorsque tu cliques sur le boutons Entrées, le second formulaire s'ouvre: il y a des champs
5) comment doivent ils etre remplis? à la main par l'utilisateur? ou automatiquement à partir de l'onglet Entrées?
6) quand tu valides. que doit il se passer avec les datas.. elles sont recopiées dans l'onglet Entrées??

voila. en répondant déjà à ces quelques questions, on va pouvoir avancer pas à pas
et tu verras qu'au fur et à mesure d'autres questions / solutions s'offriront à toi
 

Skymap

XLDnaute Nouveau
Re : Gestion des stocks VBA

Bonjour vgendron et merci à toi,

Concernant tes remarques ;

1) tes onglets Entrées et Sorties sont vides: est ce normal?
Oui, voir question 4/5/6

2) du coup, tes formules en colonnes G et H de l'onglet Produits sont avec des Ref manquantes: #Ref!
Ces formules seront à supprimer.

3) pour tes formulaires:un conseil.. pour chaque combobox, textbox etc etc. mets un nom correspondant (tout comme tu l'as fait pour les boutons)
J'ai laissé exprès, en raison de la possible utilisation d'une boucle ("textbox"+I).

4) lorsque tu cliques sur le boutons Entrées, le second formulaire s'ouvre: il y a des champs
5) comment doivent ils etre remplis? à la main par l'utilisateur? ou automatiquement à partir de l'onglet Entrées?
6) quand tu valides. que doit il se passer avec les datas.. elles sont recopiées dans l'onglet Entrées??

L'ensemble des champs d'informations du formulaire doivent être renseignés automatiquement à partir de la référence du produit saisi manuellement à partir de la liste déroulante. Une fois l'ensemble des champs d'infos renseignés, grâce au bouton validé; les datas relatives au produit seraient copiés sur l'onglet "Entrées" (d'où le fait qu'il soit vide).

Hypo 1 : le formulaire permet de renseigner et saisir les quantités pour un seul produits (cas présenté dans le formulaire actuel)
Hypo 2 : le formulaire permet de renseigner et saisir les quantités pour plusieurs produits (si possible)

Une fois les différents achats renseignés sur l'onglet "Entrées", par l'intermédiaire d'une macro : sommer les quantités achetés par produit (colonne G "onglet produits" afin d'obtenir le nouveau stock.

J'espère avoir éclairci tes remarques

En attendant de te lire à nouveau ...

Skymap
 

youky(BJ)

XLDnaute Barbatruc
Re : Gestion des stocks VBA

Bonsoir Skymap,
Je te joint un fichier que j'ai réalisé il y plusieurs années pour un marchand de glace du Cap d'Agde.
Celui-ci a fermé boutique avant la fin de ce programme donc il est resté dans mes tiroirs autant que tu en profite ou voir ce qui t'intéresse, les données sont bidons et réduite pour le forum.
Je te le livre tel quel, si besoin de modifier des trucs bienvenu au VBA.
Bruno
 

Pièces jointes

  • Stock.xls
    459.5 KB · Affichages: 316
  • Stock.xls
    459.5 KB · Affichages: 231
  • Stock.xls
    459.5 KB · Affichages: 238

vgendron

XLDnaute Barbatruc
Re : Gestion des stocks VBA

Hello,

oui effectivement, l'histoire des TextBox 1 2 3 etc etc. j'ai vu après que tu utilisais une boucle

le remplissage automatique des datas ne marchait pas.. (pb de déclaration de feuille)
donc. après correction, j'ai vu qu'il y avait un décalage entre les colonnes de l'onglet Produits et les textbox
dans le code, tu travailles sur un combobox2 qui n'existe pas dans le formulaire

bref..
avec la version ci jointe
le remplissage se fait bien.
et au clic "Valider", les datas sont recopiées dans l'onglet Entrées
une formule dans la colonne G (Onglet Produits) va chercher le nombre d'entrées qui viennent d'etre saisies pour ainsi mettre à jour le stock actualisé..

à adapter pour la partie Sorties.
 

Pièces jointes

  • Projet VBA.xlsm
    65.5 KB · Affichages: 139
  • Projet VBA.xlsm
    65.5 KB · Affichages: 114
  • Projet VBA.xlsm
    65.5 KB · Affichages: 129

vgendron

XLDnaute Barbatruc
Re : Gestion des stocks VBA

Re ;-)

j'ai repris le fichier pour pouvoir faire des sorties
et plutot que de recréer un formulaire quasi identique à celui des entrées, j'ai préféré ajouter un bouton "Entrées / Sorties"
selon son état, la macro va remplir la feuille Entrées ou Sorties

j'ai aussi mis la ligne de titre dans ces deux onglets.

à voir tes commentaires pour de futures évolutions ;-)
 

Pièces jointes

  • Projet VBA2.xlsm
    67.6 KB · Affichages: 155
  • Projet VBA2.xlsm
    67.6 KB · Affichages: 129
  • Projet VBA2.xlsm
    67.6 KB · Affichages: 123

Skymap

XLDnaute Nouveau
Re : Gestion des stocks VBA

Bonjour,

Tout d'abord merci à youky(BJ) et à Jean-Marcel pour leurs conseils et suggestions.
Je vais analyser tout ça.
Puis merci également à vgendron pour ton très bon travail.
A première vue cela semble correspondre à mes attentes.
Je vais approfondir l'analyse et réfléchir pour définir la suite de mon projet.

A très vite ;) Skymap
 

Skymap

XLDnaute Nouveau
Re : Gestion des stocks VBA

Bonjour,
J’ai pu travailler et avancer dans mon projet (notamment : bouton produits/création et mise en place d’un stock de sécurité).
Concernant le bouton produit, je rencontre des difficultés pour la réalisation d’un bouton modification de produits.
Concernant le bouton Entrées/sorties :
- Je rencontre des problèmes avec la formule de la colonne G et H (onglet produits). La formule ne tient pas toujours compte des dernières valeurs actualisées.
- Je souhaite intégrer un timer (Date/Heure), pour qu’à chaque validation de mouvements (entrées ou sorties), celui-ci soit recopié sur l’onglet correspondant. Le fait d’avoir la date pour chaque mouvement me permettra après de créer des tableaux et graphiques d’analyse des flux entrants et sortants (par exemple : par mois / par catégories).

PS: J'ai malheureusement changé de poste, donc il y a des bocages ... :s

Vous remerciant de votre aide ...

Skymap :)
 

Pièces jointes

  • Projet VBA2.xlsm
    74.4 KB · Affichages: 88
  • Projet VBA2.xlsm
    74.4 KB · Affichages: 81
  • Projet VBA2.xlsm
    74.4 KB · Affichages: 93

vgendron

XLDnaute Barbatruc
Re : Gestion des stocks VBA

Bonjour Skymap,

J'ai ré-ouvert ton fichier, et effectivement il y a des blocages
la plupart du temps, ce sont des variables qu'il ne connait pas..
exemple;
set ws=sheets("Produits")..

il faut donc déclarer cette variable à chaque fois en début de procédure
dim ws as worksheet

il y en a un peu partout à priori. donc.. lance ton code, et à chaque fois qu'il plante, fait "debugger", ce qui te donne l'endroit où ca plante. tu n'as plus qu'à rajoutter la déclaration de la variable.

à titre perso. je trouve ca étrange. je pensais que cette déclaration était obligatoire uniquement lorsque l'option Explicite était utilisée en début de code.. sans doute est ce le cas aussi avec les Private sub..

pour en revenir aux questions:
Pb avec le bouton Produit: la formule G et H: peux tu préciser dans quel cas ca ne marche pas?

pour ton compteur. si je ne me trompe pas, j'ai cru voir un horodatage dans ton formulaire.. il suffit donc de recopier la valeur en cours là où tu souhaites (bon. j'ai pas creusé pour l'instant)
 

Skymap

XLDnaute Nouveau
Re : Gestion des stocks VBA

J’ai corrigé les blocages et appliquer la date et l’heure.

  • Lorsque je saisi une entrée (exemple : bandecotton70) une première fois => ok. Ceci dit, lors de ma deuxième saisi pour ce même produit, le stock ne va pas prendre en compte les flux antérieur (pas d’actualisation des stocks).
  • Pb avec le bouton modification pour les produits.
Merci pour ton aide et tes conseils ;)
 

Pièces jointes

  • Projet VBA2.xlsm
    77.3 KB · Affichages: 113
  • Projet VBA2.xlsm
    77.3 KB · Affichages: 90
  • Projet VBA2.xlsm
    77.3 KB · Affichages: 93

vgendron

XLDnaute Barbatruc
Re : Gestion des stocks VBA

Ok je vois..
la formule en G cherche la référence dans la feuille entrées en colonne A, et retourne le nombre associé de la colonne G
sauf, qu'il ne trouve que la PREMIERE occurence;
donc toutes les autres saisies de cette meme référence ne sont pas prises en compte.. puisque à chaque saisie, c'est une nouvelle ligne..

donc;. modifier la formule en G (Produits) par
=SOMME.SI(Entrées!A:A;Produits!A2;Entrées!G:G)

et en H (Produits) par
=SOMME.SI(Sorties!A:A;Produits!A2;Sorties!G:G)

par contre. j'ai remarqué que les valeurs de l'onglet Entrées etaient enregistrées en tant que texte..
la formule ci dessus ne va donc pas fonctionner..

j'ai reconverti tout en format nombre..
maintenant. la question.. qui enregistre en format texte.. la macro? si oui. il va falloir adapter pour enregistrer des nombres
 

vgendron

XLDnaute Barbatruc
Re : Gestion des stocks VBA

C'est ici que ca se passe

Code:
Private Sub CommandValider_Click()

Dim Ligne As Long
Dim I As Integer
Dim ws As Worksheet

Set ws = Sheets("Produits")

'Message d'erreur si liste déroulante vide
If ComboBox1.Text = "" Then
    MsgBox "Référence du Produit vide !?", vbDefaultButton1, "Message d'Erreur"
End If

'Message d'erreur si quantité achetées/vendues vide
If TextBox6.Text = "" Then
    MsgBox "Référence du Produit vide !?", vbDefaultButton1, "Message d'Erreur"
    
End If

If Me.Controls("EntréesSorties").Caption = "Entrées" Then
    'recopie de toutes les datas dans l'onglet Entrées
    Set ws = Sheets("Entrées")
    Else
    Set ws = Sheets("Sorties")
End If

Ligne = ws.Range("A65536").End(xlUp).Row + 1

ws.Activate
ws.Cells(Ligne, 1) = Me.ComboBox1


For I = 1 To 3
    ws.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I)
Next I

For I = 4 To 9
    ws.Cells(Ligne, I + 1) = Val(Me.Controls("TextBox" & I))
Next I
   
Unload Me
UserForm1.Show
End Sub
 

Skymap

XLDnaute Nouveau
Re : Gestion des stocks VBA

Bonjour,

Grâce à tes conseils, les onglets entrées et sorties ne comportent plus de problèmes (merci).
Désormais je souhaite améliorer mon projet en mettant en place un bouton analyse (graphiques et tableaux) => sur bouton « Analyse » à partir de l’userform4. L’idée serait de réaliser des tableaux et graphiques sur l’userform4 à partir des données des onglets entrées et sorties pour apporter des informations pertinentes sur la gestion du stock pour l’utilisateur.

Exemple (à voir suivant la faisabilité) :
- nombre de sorties ou d’entrées par produit
- nombre de sorties ou d’entrées par mois (à l’aide d’une fonction date) en colonne J ( ?)
- proportion des quantités de produits entrées/sorties par catégorie

Est-ce réalisable ? si oui merci de me conseiller … voir même de m’aider
Par avance merci !!
Skymap
 

Pièces jointes

  • Projet VBA2.xlsm
    79.4 KB · Affichages: 134
  • Projet VBA2.xlsm
    79.4 KB · Affichages: 134
  • Projet VBA2.xlsm
    79.4 KB · Affichages: 140

grisan29

XLDnaute Accro
Re : Gestion des stocks VBA

bonsoir skymap, vgendron et le forum

j'ai ouvert le fichier que skymap a mis edans son dernier post et en a appuyant sur le bouton "produits" puis sur "modification "après avoir rempli les textbox par la combobox il y a un bug car il ne trouve pas la combobox2 et moi non plus
Code:
Private Sub CommandModification_Click()

Dim Ligne As Long
Dim I As Integer
Dim ws As Worksheet

Set ws = Sheets("Produits")

 If MsgBox("Confirmez-vous la modification de ce produit ?", vbYesNo, "Demande de modification") = vbYes Then
 
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
 
        Ligne = Me.ComboBox1.ListIndex + 2
        ws.Cells(Ligne, "B") = ComboBox2 ' ou est cette combobox
 
            For I = 1 To 4
    
                If Me.Controls("TextBox" & I).Visible = True Then
                ws.Cells(Ligne, I + 2) = Me.Controls("TextBox" & I)
                
                End If
        
            Next I
    
 End If
 
End Sub

Pascal
 

vgendron

XLDnaute Barbatruc
Re : Gestion des stocks VBA

Hello et bonne année

effectivement, le combobox 2 n'existe pas dans le userform..
et comme le code est très peu commenté, c'est difficile de trouver ce qu'on est censé récupérer comme info..

Code:
Private Sub CommandModification_Click()

Dim Ligne As Long
Dim I As Integer
Dim ws As Worksheet

Set ws = Sheets("Produits")

 If MsgBox("Confirmez-vous la modification de ce produit ?", vbYesNo, "Demande de modification") = vbYes Then
 
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
 
        Ligne = Me.ComboBox1.ListIndex + 2
        ws.Cells(Ligne, "B") = TextBox1
 
            For I = 1 To 4
    
                If Me.Controls("TextBox" & I).Visible = True Then
                ws.Cells(Ligne, I + 2) = Me.Controls("TextBox" & I)
                
                End If
        
            Next I
    
 End If
 
End Sub

De ce que j'en comprend, la valeur contenue dans le Combobox2 fantome est mise dans la colonne B de la feuille Produits.. donc. il s'agirait de la catégorie..
cette info est contenue dans le textbox 1 du formulaire..
donc. remplacer combobox2 par textbox1..
MAIS.. vu la boucle située juste après.. il semble que la ligne devienne inutile.. puisque la boucle récupère l'info du textbox1
l'ennui..c'est que cette boucle.. place l'info. non pas en colonne B. mais en colonne C...
donc..
1) je pense que la ligne ws.Cells(Ligne, "B") = combobox2 devient inutile
2) il faut modifier la boucle
Code:
For I = 1 To 4
    
                If Me.Controls("TextBox" & I).Visible = True Then
                ws.Cells(Ligne, I + 2) = Me.Controls("TextBox" & I)
                
                End If
        
            Next I
par
Code:
For I = 1 To 4
    
                If Me.Controls("TextBox" & I).Visible = True Then
                ws.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I)
                
                End If
        
            Next I
 

Discussions similaires

Réponses
10
Affichages
240
Réponses
2
Affichages
990
Réponses
9
Affichages
167

Statistiques des forums

Discussions
312 294
Messages
2 086 896
Membres
103 404
dernier inscrit
sultan87