formateur informatique

Approvisionner les stocks en VBA Excel

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Approvisionner les stocks en VBA Excel
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :

Abonnez-vous gratuitement à la chaîne Youtube Rossetti Stéphane .
Sujets et formations similaires :


Approvisionnement des stocks

Etape par étape, nous construisons notre application VBA Excel de gestion et de facturation des clients. Nous avons déjà construit le système permettant de désigner le client à facturer et de spécifier les articles achetés. Nous avons de même conçu le mécanisme pour créer un nouveau client à la volée. Avant de penser à alimenter la commande, nous souhaitons aboutir la gestion des ressources. Ici, l'objectif consiste à approvisionner les stocks des articles issus de la base de données.



Source et problématique
Avant toute chose, nous devons réceptionner les travaux au dernier indice. Un message d'erreur apparaît. Cette sécurité se déclenche constatant qu'il s'agit d'une source externe. Elle neutralise le code VBA et génère une erreur sans impact.
  • Cliquer sur le bouton Fin pour l'ignorer,
  • Fermer Excel puis rouvrir le classeur,
Ce dernier est désormais identifié. Tous les codes déclenchés au chargement opèrent sans conflit.
  • En cellule G5, cliquer sur la flèche de la liste déroulante,
  • Choisir une référence parmi les propositions déroulées,
Instantanément, toutes les informations attachées à l'article sont importées dans les zones prévues à cet effet. Elles sont toutes issues de la base de données archivée dans la feuille Catalogue.

Charger les informations du produit au choix de la référence dans liste déroulante sur feuille Excel

Un bouton a été ajouté par rapport aux développements précédents.

Après la saisie d'une quantité en cellule I7, un clic sur le bouton +Com. doit alimenter la commande du nouvel article acheté. Ce bouton existait déjà sous une autre désignation. Il concerne un développement futur.

Après la saisie d'une quantité en cellule I7, un clic sur le bouton +Stock doit indexer la quantité en stock de l'article désigné par la liste déroulante. Cette actualisation correspond à l'approvisionnement. Elle doit intervenir dans la feuille Catalogue de ce classeur. Et c'est la fonctionnalité que nous souhaitons développer dans cette formation.



Valider la saisie d'une quantité
Avant d'enclencher l'exécution d'un code VBA Excel, des contrôles de validité peuvent être réalisés en amont. En I7, la donnée attendue est forcément numérique et entière. Nous proposons de régler la cellule pour que toute saisie ne correspondant pas à ces contraintes, soit refusée. Dès lors, pour s'exécuter, le code VBA saura que si la cellule n'est pas vide, l'information est conforme.
  • Cliquer sur la case de la quantité pour sélectionner la cellule I7,
  • En haut de la fenêtre Excel, cliquer sur l'onglet Données pour activer son ruban,
  • Dans la section Outils de données du ruban, cliquer sur le bouton Validation des données,
  • Dans la boîte de dialogue qui apparaît, activer l'onglet Options,
  • Dans la zone Autoriser, choisir Nombre entier,
  • Dans la zone Données, remplacer l'opérateur Compris entre par l'opérateur Supérieur à,
  • Dans la zone Minimum, taper le chiffre 0,
Règle de validité Excel sur cellule de quantité achetée pour nombre entier positif

De cette manière, nous indiquons explicitement que seule la saisie des nombres entiers strictement positifs est autorisée.
  • Activer l'onglet Alerte d'erreur de la boîte de dialogue,
  • Conserver le style réglé sur l'option Stop,
  • Dans la zone Titre, saisir le texte : Attention,
  • Dans la zone Message d'erreur, taper l'information : Une quantité est forcément un nombre entier et positif,
Paramétrer le message erreur Excel en cas de saisie non conforme dans la cellule

Le style Stop est impératif. Si nous le changions, il serait possible de saisir des données ne respectant les conditions imposées. Avec cette alerte personnalisée, nous guidons l'utilisateur en cas d'inscription non conforme.
  • Valider ces réglages en cliquant sur le bouton Ok de la boîte de dialogue,
  • En cellule I7, saisir une donnée interdite comme : 7,5 et valider par la touche Entrée,
Alerte erreur pour saisie non autorisée dans cellule Excel car nombre décimal

Instantanément, l'alerte surgit. La route est barrée. Même en insistant, tant que l'information n'est pas corrigée pour être en conformité avec la règle, la saisie est refusée. Bref, nous verrouillons et sécurisons l'application.



Actualiser les quantités en stock
Désormais, au clic sur le bouton +Stock, la quantité de l'article spécifié par la liste déroulante, doit être indexée du nombre entier indiqué. Bien entendu, le code VBA a pour mission d'isoler le produit reconnu par sa référence, dans la base de données.
  • En bas de la fenêtre Excel, cliquer sur l'onglet Catalogue pour activer sa feuille,
Base de données Excel des références articles à commander pour la facturation client

Comme vous pouvez le voir, la recherche de la référence doit être réalisée dans la colonne B, soit à l'indice 2. L'actualisation du stock correspondant doit être opérée en colonne G, soit à l'indice 7. Le code VBA doit débuter le traitement de sa recherche à partir de la ligne 3. Forts de ces acquis, nous sommes désormais en mesure d'amorcer le programme d'approvisionnement des stocks.
  • Revenir sur la feuille Facture,
  • En haut de la fenêtre Excel, cliquer sur l'onglet Développeur pour activer son ruban,
  • Dans la section Contrôles du ruban, cliquer sur le bouton Mode création,
Nous basculons ainsi en mode conception des contrôles ActiveX placés sur la feuille. En d'autres termes, nous pouvons les manipuler.
  • Cliquer sur le bouton +Stock pour le sélectionner,
  • Dans la section Contrôles du ruban Développeur, cliquer sur le bouton Propriétés,
Cette action a pour effet d'afficher la feuille de propriétés du contrôle sélectionné, soit du bouton.
  • Dans la propriété (Name), remplacer l'intitulé CommandButton1 par : Stock,
Feuille de propriétés du bouton de feuille Excel pour modifier son nom

Nous attribuons ainsi un nom d'objet explicite au bouton à manipuler.
  • Désormais, double cliquer sur le bouton +Stock,
Instantanément, nous basculons entre les bornes de la procédure évènementielle Stock_Click. Son code sera exécuté au clic sur le bouton. Et il consiste à actualiser la quantité en stock de la référence mentionnée.
  • Entre les bornes de la procédure, ajouter les déclarations et affectations suivantes :
...
Dim continuer As Boolean: Dim la_qte As Integer
Dim la_ligne As Integer: Dim la_ref As String
Dim avt_stock As Integer: Dim aps_stock As Integer

continuer = True: la_qte = Range('I7').Value
la_ligne = 3: la_ref = Ref.Value

If (Range('I7').Value <> '') Then
While continuer = True

Wend
End If
...


La variable continuer doit servir d'indicateur pour poursuivre le traitement. Par défaut, nous l'initialisons à True. Cette valeur indique que le traitement peut débuter ou se poursuivre. Nous déclarons les variables la_qte et la_ref pour stocker les informations de la feuille Facture. C'est pourquoi nous les affectons avec les valeurs des cellules correspondantes de la quantité et de la référence. La variable la_ligne doit servir à parcourir les références de la base de données. Nous l'initialisons donc à l'indice 3, soit le point de départ des références dans la feuille Catalogue.

Ensuite, nous enclenchons une boucle While qui doit se poursuivre tant que l'indicateur vaut True. Mais comme vous le remarquez, ce traitement récursif est conditionné. La valeur de la quantité doit être mentionnée. Grâce à la règle de validité, à partir du moment où elle n'est pas vide, nous savons qu'elle est conforme. Les deux variables avt_stock et aps_stock doivent rendre compte de l'actualisation.

A l'intérieur de cette boucle, nous devons chercher la référence désignée. Si elle est trouvée, son stock doit être mis à jour.
  • Entre les bornes de la boucle While, ajouter les instructions VBA suivantes :
...
If (Sheets('Catalogue').Cells(la_ligne, 2).Value = Ref.Value) Then
avt_stock = Sheets('Catalogue').Cells(la_ligne, 7).Value
Sheets('Catalogue').Cells(la_ligne, 7).Value = Sheets('Catalogue').Cells(la_ligne, 7).Value + la_qte
aps_stock = Sheets('Catalogue').Cells(la_ligne, 7).Value
continuer = False
chercher Ref.Value, 'Catalogue'
MsgBox 'Le stock de la référence ' & Ref.Value & ' est passé de ' & avt_stock & ' à ' & aps_stock
End If

la_ligne = la_ligne + 1
If (la_ligne > 1000) Then continuer = False
...


Si la référence en cours d'analyse correspond, nous commençons par mémoriser le stock dans la variable avt_stock. Ensuite, en colonne G, soit à l'indice 7, nous effectuons la mise à jour selon la quantité saisie à ajouter. Puis, nous mémorisons le stock après actualisation dans la variable aps_stock. De fait et dans la foulée, nous basculons l'état de l'indicateur à False. Grâce à lui, le traitement récursif sera interrompu. Avec la fonction MsgBox, nous informons l'utilisateur du bon déroulement de l'opération.

Après l'instruction conditionnelle, nous n'oublions pas d'incrémenter la variable la_ligne. En effet, tant que la référence n'a pas été trouvée, l'analyse doit se poursuivre sur la ligne du dessous. Nous ajoutons néanmoins une sécurité pour limiter le traitement à 1000 passages.
  • Enregistrer les modifications et basculer sur la feuille Facture,
  • Dans le ruban Développeur, cliquer sur le bouton Mode création pour le désactiver,
  • Avec la liste déroulante en G5, choisir une référence,
  • Puis, saisir une quantité à ajouter en cellule I7,
  • Dès lors, cliquer sur le bouton +Stock,
Mise à jour des stocks en base de données Excel au clic sur un bouton de feuille, grâce au code VBA

Aussitôt le message de succès apparaît. Il confirme l'actualisation du stock pour la référence désignée. Le code complet de la procédure évènementielle de mise à jour est le suivant :

Private Sub Stock_Click()
Dim continuer As Boolean: Dim la_qte As Integer
Dim la_ligne As Integer: Dim la_ref As String
Dim avt_stock As Integer: Dim aps_stock As Integer

continuer = True: la_qte = Range('I7').Value
la_ligne = 3: la_ref = Ref.Value

If (Range('I7').Value <> '') Then
While continuer = True
If (Sheets('Catalogue').Cells(la_ligne, 2).Value = Ref.Value) Then
avt_stock = Sheets('Catalogue').Cells(la_ligne, 7).Value
Sheets('Catalogue').Cells(la_ligne, 7).Value = Sheets('Catalogue').Cells(la_ligne, 7).Value + la_qte
aps_stock = Sheets('Catalogue').Cells(la_ligne, 7).Value
continuer = False
chercher Ref.Value, 'Catalogue'
MsgBox 'Le stock de la référence ' & Ref.Value & ' est passé de ' & avt_stock & ' à ' & aps_stock &' unités'
End If

la_ligne = la_ligne + 1
If (la_ligne > 1000) Then continuer = False
Wend
End If

End Sub


Dans une prochaine étape, nous bâtirons le mécanisme de construction de la facture.

 
Sur Facebook
Sur G+
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Google+
Partager sur Twitter
Partager sur LinkedIn