Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :
Facturation clients avec interface graphique VBA Excel
Ce que nous proposons de réaliser ici est un mini
logiciel ou
progiciel pour
facturer les clients à l'aide d'une
interface utilisateur conçue en
VBA Excel .
Le classeur de facturation
Il s'agit d'une
facturation automatisée et dynamique réalisée au titre de la
formation sur la fonction Decaler() pour adapter les formules des plages de cellules en fonction de leur contenu évolutif. La
liste déroulante permet de choisir un code article sur la base du catalogue de la feuille articles. Si le catalogue évolue avec de nouvelles références, la
liste déroulante les intègre car elle est conçue sur une plage de cellules qui s'ajuste au contenu grâce à la
fonction Decaler() . Les Désignations et prix unitaires sont importés automatiquement en fonction de cette référence grâce à la fonction
RechercheV() . Elle aussi s'ajuste au contenu évolutif du catalogue grâce à la
fonction Decaler() qui lui permet de réaliser la recherche dans un tableau qui peut évoluer. Il ne reste plus à l'utilisateur qu'à saisir les quantités achetées pour que les montants de la facture se calculent automatiquement. Comme vous le remarquez, il s'agit d'un classeur classique (
xlsx ). Cela signifie qu'il ne gère pas les
macros et donc le code
VBA . Or nous souhaitons programmer une vraie mini-application. Nous devons donc enregistrer ce classeur au format
xlsm .
Cliquer sur Fichier en haut à gauche de la fenêtre Excel ,
Choisir ensuite Enregistrer sous puis Parcourir ,
Dans la zone Type , choisir l'extension *.xlsm puis cliquer sur Enregistrer ,
Cette
facturation est presque parfaite sauf qu'elle ne permet pas de
gérer les stocks . Elle n'empêche pas de vendre un article en
rupture de stock ou dont la quantité est trop importante. Elle ne permet pas non plus de mettre à jour les quantités de
stocks après la validation de la
facture . C'est ce que nous proposons de réaliser avec une
interface utilisateur graphique en
VBA Excel . L'utilisateur doit pouvoir sélectionner une référence depuis l'
interface et définir la quantité à acheter. Si la quantité demandée est supérieure à celle présente en
stock , l'utilisateur en est averti et il ne peut pas ajouter l'article à la
facture . Dans le cas contraire, un bouton permet d'insérer une nouvelle ligne de facturation, mémorisant les informations pour pouvoir mettre à jour les
stocks lorsqu'Ã l'issue, l'utilisateur valide la facture et confirme ainsi l'achat.
L'interface graphique en VBA Excel
Cette interface graphique se nomme un
UserForm . Ce
Userform doit se charger à l'ouverture du classeur de manière à ce que l'utilisateur n'ait pas accès à la feuille directement. Toute la
facturation doit se gérer depuis l'
interface .
Basculer dans l'éditeur Visual Basic à l'aide du raccourci clavier ALT + F11 par exemple,
Cliquer ensuite sur le menu Insertion puis choisir UserForm ,
Le
UserForm apparaît au centre de la fenêtre. En bas à gauche, se situe la fenêtre de
propriétés de l'objet sélectionné au centre, soit le
UserForm à ce stade. Cette fenêtre permet de régler l'objet, le contrôle, l'interface ainsi sélectionnée pour modifier son apparence notamment.
Dans la fenêtre Propriétés, régler la propriété (Name) sur facture ,
Régler la propriété Height sur 250 et Width sur 300,
Par défaut ces
propriétés sont rangées par ordre alphabétique. La propriété
Height permet de modifier la hauteur de l'objet tandis que
Width influe sur sa largeur.
Choisir une couleur de fond pour l'interface avec la propriété BackColor ,
Modifier le texte de la barre de titre de l'interface en : Facturation Clients , à l'aide de la propriété Caption ,
Régler la propriété KeepScrollBarsVisible sur 0 – fmScrollBarsNone ,
Les barres de défilement ainsi n'apparaîtront pas sur l'
interface . Les dimensions que nous avons définies suffiront à afficher l'ensemble des
contrôles nécessaire pour cette
application de facturation .
Modifier la police de l'interface avec la propriété Font ,
Changer la propriété ForeColor avec l'onglet Palette qui se propose,
ForeColor désigne la couleur de premier plan. Il s'agit de la couleur qui sera affectée par défaut aux textes et contrôles que nous ajouterons sur l'interface.
Cliquer sur le Userform au centre de la fenêtre pour l'activer et enfoncer la touche F5 du clavier pour l'afficher en mode exécution,
Comme vous le remarquez, le
UserForm s'affiche au-dessus de la feuille du classeur, la feuille
facturation en l'occurrence ici. Cette
interface apparaît dans une fenêtre qui dispose par défaut de toutes les propriétés des fenêtres Windows classiques. Ainsi vous pouvez la déplacer en la cliquant et la glissant depuis sa barre de titre. Vous pouvez la fermer en cliquant sur sa croix rouge.
Fermer l'interface utilisateur,
L'exécution se stoppe et vous êtes de retour dans l'
éditeur Visual Basic sur le
UserForm . Nous souhaitons que cette
interface se déclenche automatiquement à l'ouverture du classeur. Le
UserForm est un
objet qui possèdent des
propriétés comme nous venons de le voir. Et comme l'enseigne la
formation pour débuter en VBA Excel , tout objet a aussi des
méthodes . Ces
méthodes permettent de réaliser des actions, comme ouvrir ou afficher le
formulaire . La
méthode du
UserForm pour ce faire est la
méthode Show qui s'appelle par le nom de l'
objet ,
facture ici, tel que nous l'avons modifié par la
fenêtre propriété . La ligne de code est donc la suivante :
facture.Show . Mais ce code doit être associé à un
évènement , pour qu'il se déclenche automatiquement. Nous souhaitons qu'il se déclenche à l'ouverture du classeur. Il est très simple en
VBA Excel de connaître les
évènements disponibles attachés aux feuilles et classeurs.
Double cliquer sur l'objet ThisWorkbook dans la fenêtre Projet sur la gauche de l'éditeur,
L'
objet ThisWorkbook désigne le classeur sur lequel nous sommes en train de travailler, littéralement, ce classeur.
Régler la liste de droite au-dessus de la page de code sur Open ,
La procédure
Private Sub Workbook_Open() est ainsi créée. Il s'agit de l'
évènement Open (Ouvrir) associé Ã
ThisWorkbook (Ce classeur). Concrètement, tout
code écrit entre les bornes de cette procédure se déclenchera automatiquement à l'ouverture du classeur. Il ne reste donc plus qu'à écrire la ligne de
code permettant d'afficher le
UserForm facture .
Ajouter la ligne : facture.Show , entre les bornes de la procédure,
Enregistrer le travail (CTRL + S ),
Fermer le classeur puis le rouvrir.
Vous remarquez en effet que l'
interface graphique se déclenche automatiquement à l'ouverture du classeur en se positionnant au-dessus de la feuille.
Fermer l'interface pour revenir dans le code .
Les contrôles de formulaire
Pour que l'utilisateur puisse gérer intégralement la
facturation depuis l'
interface graphique , nous devons ajouter plusieurs
contrôles . Il faut une
liste déroulante pour lui permettre de choisir une référence à acheter. Il faut une
zone de saisie pour qu'il puisse définir la quantité achetée pour cette référence. Il faut une
zone de texte (Label) pour communiquer avec lui, de manière à par exemple lui indiquer que le stock ne permet pas un achat d'une telle quantité. Enfin, il faut trois
boutons . Un
bouton pour ajouter la référence avec sa quantité sur la
facture . Il faut un
bouton pour lui permettre de réinitialiser la
facture en cas d'erreur. Et enfin il faut un
bouton pour valider la
facture , commander l'aperçu avant impression et mettre à jour les
stocks en fonction de ces nouveaux achats. A l'aide de la
boîte à outils qui s'affiche lorsque vous sélectionnez le
formulaire :
Ajouter comme le propose la capture, une liste déroulante ,
La nommer liste_ref à l'aide de sa propriété (Name) de la fenêtre Propriétés ,
Ajouter au-dessus un contrôle Intitulé (Label),
Modifier son texte en : Choisir une référence à l'aide de sa propriété Caption ,
Ajouter une zone de texte et définir son nom sur quantite ,
Juste au-dessus, ajouter un intitulé en réglant son texte sur Définir une quantité ,
En dessous, ajouter un nouvel intitulé avec comme texte Message utilisateur ! ,
Ajouter un premier bouton avec le nom ajouter et le texte Ajouter ,
Ajouter un deuxième bouton avec le nom reinitialiser et le texte Réinitialiser ,
Ajouter un dernier bouton avec le nom valider et le texte Valider la facture ,
Le code associé aux événements
Comme nous l'avons vu précédemment, les
codes que nous allons développer doivent être attachés à des
événements . Ainsi un clic sur un bouton déclenchera le code qui est écrit entre les bornes de la procédure gérant l'
événement associé au clic sur ce bouton. Mais avant cela, lorsque l'
interface s'affiche, elle doit proposer par le biais de la
liste déroulante , tous les codes articles présents dans le catalogue. Donc la
liste déroulante doit se charger de ses données en même temps que le
formulaire s'active. L'événement associé est
activate .
Depuis l'éditeur Visual Basic , double cliquer sur un emplacement vide du UserForm ,
Vous basculez dans le
code attaché au
formulaire , entre les bornes de la procédure
UserForm_Click() . Le
code écrit entre ces bornes se déclencherait donc au clic sur le
formulaire . Ce n'est pas cet événement qui nous intéresse, mais l'
événement Activate() .
Dans la liste de droite, en haut de la page de code, choisir Activate ,
Le code écrit dans les bornes de cet
événement s'exécutera en même temps que le
formulaire s'active, donc qu'il s'affiche. Pour remplir cette
liste déroulante , nous avons besoin de parcourir la colonne des codes articles de la feuille articles, en partant de la ligne 2 et tant que la cellule n'est pas vide. Donc il faut déclarer une variable que nous nommerons
ligne et l'initialiser à 2. Pour plus d'informations, vous pouvez vous référer à la
formation sur la déclaration de variables en VBA Excel .
Ajouter la déclaration et affectation suivantes dans les bornes de la procédure,
Dim ligne As Integer: ligne = 2
Il s'agit de parcourir les codes articles de la feuille articles.
ThisWorkbook est l'
objet VBA Excel qui désigne le classeur actif. Sa
propriété Worksheets avec en paramètre le nom de la feuille, permet de désigner une feuille précise du classeur. Pour parcourir tous les codes articles, ligne à ligne, tant que la cellule n'est pas vide pour les insérer dans la
liste déroulante du
formulaire , nous devons utiliser une
boucle . La
boucle qui permet de parcourir des éléments tant qu'une condition est vérifiée, est la
boucle While en
VBA Excel . La
formation VBA Excel sur les boucles For Next aborde ces
boucles While . Une
boucle While doit se terminer par le mot clé
Wend . Le critère à poser juste après le
While , consiste à vérifier que la cellule de la colonne 3 (C) n'est pas vide, signifiant qu'elle porte un code article.
Ajouter l'instruction While comme suit :
While ThisWorkbook.Worksheets('articles').Cells(ligne, 3).Value <> ''
Wend
La variable ligne doit être incrémentée à chaque passage pour pouvoir ainsi scruter chaque cellule de la colonne 3, tant qu'elle n'est pas vide. C'est l'
objet Cells() qui désigne une cellule avec son indice de ligne et son indice de colonne en paramètre. La
propriété Value de ce dernier renvoie son contenu qui doit être différent d'un contenu vide (<> ''). Dans la
boucle , il s'agit maintenant d'ajouter à la
liste déroulante , chaque code article ainsi trouvé. Le nom de notre
objet liste déroulante est
liste_ref . La
méthode qui permet d'ajouter des éléments à cet
objet est
AddItem avec en argument, la valeur à ajouter, celle de la cellule. Il ne faut pas ensuite oublier d'
incrémenter la
variable ligne . En effet, si la
boucle While tourne sans passer à la ligne suivante, le
critère sera toujours vérifié et la
boucle ne se terminera jamais. On parle de
boucle infinie .
Dans les bornes de la boucle, ajouter les deux lignes de code suivantes :
liste_ref.AddItem(ThisWorkbook.Worksheets('articles').Cells(ligne, 3).Value)
ligne = ligne + 1
Enfoncer la touche F5 pour tester le code .
Le
formulaire apparaît. Si vous déroulez la liste, vous remarquez qu'elle propose tous les codes articles du Catalogue. Et comme c'est une
boucle While qui s'en charge, si vous faites évoluer le catalogue en ajoutant des références à la suite, la
liste déroulante les proposera.
Ajouter enfin la ligne suivante afin de se placer sur la feuille facturation au démarrage :
ThisWorkbook.Worksheets('facturation').Activate
Le code complet que nous avons écrit est le suivant :
Private Sub UserForm_Activate()
Dim ligne As Integer: ligne = 2
While ThisWorkbook.Worksheets('articles').Cells(ligne, 3).Value <> ''
liste_ref.AddItem (ThisWorkbook.Worksheets('articles').Cells(ligne,3).Value)
ligne = ligne + 1
Wend
ThisWorkbook.Worksheets('facturation').Activate
End Sub
Après avoir sélectionné une référence, l'utilisateur doit définir la quantité achetée dans la zone de saisie située sur la droite. Pour mâcher le travail, nous allons régler la valeur par défaut à 1 pour cette zone de saisie.
Fermer le formulaire en cliquant sur sa croix,
Sélectionner la zone de saisie quantite sur le formulaire en mode conception,
Régler sa propriété Value sur 1 à l'aide de la fenêtre Propriétés ,
Le prochain
code que nous devons écrire doit être associé à l'
événement du clic attaché au
bouton ajouter . Ce
code doit premièrement vérifier que la quantité saisie est bien un
nombre pour éviter l'
incompatibilité de type , auquel cas le programme planterait. Ensuite, il doit comparer la référence article et la quantité demandée avec celle en
stock dans le catalogue pour cet article. Si la quantité demandée est inférieure ou égale, le code article et la quantité doivent être insérés dans la
facture , sinon un message doit alerter l'utilisateur sur le fait que le
stock n'est pas suffisant.
Sur le formulaire en mode conception, double cliquer sur le bouton ajouter ,
Vous basculez ainsi dans l'éditeur de code entre les bornes de la procédure suivante :
Private Sub ajouter_Click()
End Sub
Il s'agit de la procédure gérant l'
événement du clic sur le
bouton ajouter . Cela signifie que tout
code écrit entre ces bornes se déclenchera au clic sur ce bouton. Le premier
critère à vérifier est de savoir si l'utilisateur a bien sélectionné une référence à l'aide de la
liste déroulante . C'est
l'instruction If() en VBA Excel qui permet de poser des
conditions et d'engager des actions selon le cas. La
propriété SelText pour un
objet liste modifiable ,
liste_ref ici, renvoie le texte sélectionné dans la liste. Cette
propriété ne doit pas être vide.
Dans la procédure du bouton, ajouter l'instruction If() suivante :
If(liste_ref.SelText <> '') Then
End If
Si ce
critère est vérifié, le programme doit continuer. Si la saisie de la quantité n'est pas un nombre, nous devons en avertir l'utilisateur par un
MsgBox() puis arrêter l'exécution du programme (
Exit Sub ). C'est la propriété
Value d'un
objet zone de saisie (
quantite ici) qui renvoie son contenu. Dans le cas contraire (
else ), tout est en ordre, nous poursuivons.
Imbriquer le deuxième critère If() à l'intérieur du premier :
If (IsNumeric(quantite.Value) = False) Then
MsgBox ('La quantité saisie n'est pas un nombre, veuillez corriger')
Exit Sub
Else
End If
Nous devons maintenant nous assurer que les
stocks sont suffisants. Si c'est le cas, nous devons inscrire la référence et la quantité demandée sur la
facture . Ce
code doit donc être écrit dans la branche
else du
if() . Mais avant cela, comme précédemment, nous devons déclarer et affecter une variable
ligne , en début de procédure. C'est elle, dans la
boucle While qui nous permettra de parcourir les références du catalogue à la recherche du
stock correspondant.
Ajouter la déclaration suivante au début de la procédure du bouton :
Dim ligne As Integer: ligne = 2
Notre catalogue ne possède pas d'information sur les
stocks . Nous allons lui ajouter une colonne permettant de les gérer.
Revenir sur la feuille articles,
Ajouter une colonne Stocks au tableau comme l'illustre la capture ci-dessous :
De retour dans le
code , entre le
If et le
End If de l'instruction
If() imbriquée :
Ajouter la boucle While permettant de parcourir les références du catalogue tout en vérifiant (avec une nouvelle instruction If) si la référence est celle choisie sur l'interface.
While(ThisWorkbook.Worksheets('articles').Cells(ligne, 3).Value <> '')
If (ThisWorkbook.Worksheets('articles').Cells(ligne, 3).Value = liste_ref.SelText) Then
End If
ligne = ligne + 1
Wend
Si c'est le cas, nous devons encore
imbriquer un nouveau
test de manière à verifier si le
stock permet l'ajout de l'article. Dans le cas contraire, l'utilisateur doit en être averti et l'exécution du code stoppée.
Ajouter cette nouvelle instruction If() à l'intérieur du test imbriqué :
If (Int(quantite.Value) > Int(ThisWorkbook.Worksheets('articles').Cells(ligne, 6).Value)) Then
MsgBox 'La quantité en stock pour cette référence n'est que de ' & ThisWorkbook.Worksheets('articles').Cells(ligne, 6).Value
Exit Sub
Else
End If
Si la quantité demandée par l'utilisateur est supérieure à celle disponible en
stock (If (Int(quantite.Value) > Int(Cells(ligne, 6).Value))). Alors (Then), nous en avertissons l'utilisateur (MsgBox) et nous stoppons le programme (Exit Sub). Dans le cas contraire (Else), nous devons ajouter l'article et sa quantité sur la facture, puis sortir de la boucle puisqu'une fois la référence trouvée, il n'est plus nécessaire de continuer de parcourir le catalogue. Nous avons de nouveau besoin d'une variable à déclarer pour parcourir les cellules des codes articles de la facture. Dès qu'une cellule vide sera détectée, signifiant qu'aucune référence n'est insérée, nous utiliserons cette cellule pour intégrer le nouveau code article.
Au début de la procédure du bouton, ajouter la ligne suivante :
Dim lignef As Integer: lignef = 6
Lignef est la variable que nous allons utiliser pour parcourir les lignes de la facturation.
Dans le Else du dernier If imbriqué, ajouter les lignes suivantes :
While (ThisWorkbook.Worksheets('facturation').Cells(lignef,3).Value <> '')
lignef = lignef + 1
Wend
En partant de la ligne 6, nous déplaçons l'indice de la ligne (lignef = lignef + 1) jusqu'à trouver la première cellule vide de la colonne des codes article, de manière à pouvoir y insérer la nouvelle référence. Donc, une fois la boucle terminée, la variable
lignef doit porter l'indice de la première cellule dans laquelle nous pouvons saisir. Il s'agit de la colonne 3 pour la référence et de la colonne 5 pour la quantité. La feuille étant activée, nous utilisons l'objet
Cells avec ces indices pour y inscrire les nouvelles données. Pour ce faire :
Ajouter le code suivant, après le While et avant le End If :
ThisWorkbook.Worksheets('facturation').Cells(lignef,3).Value = liste_ref.SelText
ThisWorkbook.Worksheets('facturation').Cells(lignef, 5).Value = quantite.Value
Exécuter le code (F5 ),
Ajouter quelques articles avec des quantités valides,
A chaque fois que vous cliquez sur le bouton Ajouter, vous remarquez que la nouvelle ligne de
facturation se crée à la suite des autres. Les fonctions
RechercheV récupèrent les informations correspondant au code article ainsi inséré. Les formules réalisent les calculs de la
facture avec la quantité intégrée automatiquement. Tout se fait par le
formulaire VBA , plus aucune saisie sur la feuille n'est nécessaire. De plus la
facturation est sécurisée par le
contrôle des stocks en amont grâce au
code . Le code complet du bouton
ajouter associé à l'
événement Click est le suivant :
Private Sub ajouter_Click()
Dim ligne As Integer: ligne = 2
Dim lignef As Integer: lignef = 6
If (liste_ref.SelText <> '') Then
If (IsNumeric(quantite.Value) = False) Then
MsgBox ('La quantité saisie n'est pas un nombre, veuillez corriger')
Exit Sub
Else
While (ThisWorkbook.Worksheets('articles').Cells(ligne, 3).Value <> '')
If (ThisWorkbook.Worksheets('articles').Cells(ligne, 3).Value = liste_ref.SelText) Then
If (Int(quantite.Value) > Int(ThisWorkbook.Worksheets('articles').Cells(ligne,6).Value)) Then
MsgBox 'La quantité en stock pour cette référence n'est que de ' & ThisWorkbook.Worksheets('articles').Cells(ligne, 6).Value
Exit Sub
Else
While (ThisWorkbook.Worksheets('facturation').Cells(lignef, 3).Value <> '')
lignef = lignef + 1
Wend
ThisWorkbook.Worksheets('facturation').Cells(lignef, 3).Value = liste_ref.SelText
ThisWorkbook.Worksheets('facturation').Cells(lignef, 5).Value = quantite.Value
End If
End If
ligne = ligne + 1
Wend
End If
End If
End Sub
Le bouton Réinitialiser
Ce bouton consiste à supprimer tous les codes article et quantités de manière à purger la
facture en cas d'erreur.
Afficher le UserForm en conception,
Double cliquer sur le bouton reinitialiser ,
Vous créez ainsi la procédure
Sub reinitialiser_Click() , soit le code qui se déclenche au clic sur ce bouton.
Dans les bornes de cette procédure, ajouter les trois lignes suivantes :
ThisWorkbook.Worksheets('facturation').Activate
Range('C6:C26').Value = ''
Range('E6:E26').Value = ''
Nous activons premièrement la feuille sur laquelle nous souhaitons supprimer les données insérées. Comme nous connaissons les plages strictes des colonnes
Code article et
Quantité , nous les désignons avec l'objet
Range . La propriété
Value permet de désigner le contenu de chaque cellule à l'intérieur de cette plage que nous réinitialisons à '', soit un contenu vide.
Mise à jour des stocks
Le dernier bouton doit permettre de valider la
facture en mettant les
stocks à jour selon les quantités achetées. Nous allons parcourir les références de la
facture avec une boucle
While . A l'intérieur de cette
boucle , c'est-à -dire pour chaque référence de la
facture , nous allons les comparer aux références du catalogue avec une autre
boucle While imbriquée. Lorsque les références correspondront, nous soustrairons les quantités pour
mettre à jour les stocks .
En mode conception, double cliquer sur le bouton valider ,
Ajouter les trois lignes de déclarations et d'affectations suivantes :
Dim reponse As Byte
Dim ligne As Integer: ligne = 2
Dim lignef As Integer: lignef = 6
La variable
reponse déclarée comme un entier court servira à enregistrer la réponse de l'utilisateur à la question posée via un
MsgBox . Un clic sur un bouton renvoie en effet une valeur entière. Comme toujours les deux autres variables vont permettre de parcourir les lignes des deux feuilles.
Poursuivre avec le code proposé ci-dessous :
reponse = MsgBox('Souhaitez-vous valider la facture et mettre à jour les stocks', vbYesNo + vbQuestion)
If (reponse = 6) Then
End If
Le
Msgbox permet de demander à l'utilisateur s'il souhaite poursuivre. Comme on lui associe deux boutons de choix (vbYesNo), la boîte de dialogue renvoie une valeur en fonction du bouton cliqué, que nous stockons dans la variable
reponse . S'il clique sur Oui (If (reponse = 6)), alors (Then), nous devons engager la double boucle qui permettra de
mettre à jour les stocks . Il faut commencer par parcourir tous les codes article de la facture. Pour ce faire,
Ajouter la boucle While suivante :
While(ThisWorkbook.Worksheets('facturation').Cells(lignef, 3).Value <> '')
lignef = lignef + 1
Wend
Puis, pour chaque code article de la facture, il faut parcourir tous les codes articles du catalogue afin de les comparer. Pour ce faire :
Ajouter la boucle While imbriquée comme suit :
ligne = 2
While (ThisWorkbook.Worksheets('articles').Cells(ligne, 3).Value <> '')
ligne = ligne + 1
Wend
Avant d'entrer dans cette
boucle While , nous n'oublions pas de réinitialiser la valeur de la variable
ligne à 2, car cette
boucle doit repartir de ce point pour chaque code article de la
facture , c'est-à -dire à chaque passage dans la première
boucle . Pour
mettre à jour les stocks :
Ajouter le test If() dans le While comme suit :
If(ThisWorkbook.Worksheets('facturation').Cells(lignef, 3) = ThisWorkbook.Worksheets('articles').Cells(ligne, 3).Value) Then
ThisWorkbook.Worksheets('articles').Cells(ligne, 6).Value = ThisWorkbook.Worksheets('articles').Cells(ligne, 6).Value - ThisWorkbook.Worksheets('facturation').Cells(lignef, 5)
End If
Si les références de la facture et du catalogue correspondent, alors nous mettons à jour le
stock du catalogue pour cette référence en lui soustrayant la quantité achetée. Il ne reste plus qu'à en informer l'utilisateur en lui adressant un message de confirmation, cette fois par l'intermédiaire du label (Label1) que nous avions placé sur le formulaire.
Ajouter cette dernière ligne de code :
Label1.Caption = 'Les stocks ont été mis à jour. La facture peut être éditée.'
Exécuter le code (F5),
Ajouter plusieurs articles et cliquer sur Valider la facture.
Vous remarquez d'une part que la facture se construit parfaitement et automatiquement et d'autre part que les stocks sont mis à jour en fonction des quantités achetées. Le code complet pour ce bouton est le suivant :
Private Sub valider_Click()
Dim reponse As Byte
Dim ligne As Integer: ligne = 2
Dim lignef As Integer: lignef = 6
reponse = MsgBox('Souhaitez-vous valider la facture et mettre à jour les stocks', vbYesNo + vbQuestion)
If (reponse = 6) Then
While (ThisWorkbook.Worksheets('facturation').Cells(lignef, 3).Value <> '')
ligne = 2
While (ThisWorkbook.Worksheets('articles').Cells(ligne, 3).Value <> '')
If (ThisWorkbook.Worksheets('facturation').Cells(lignef, 3) = ThisWorkbook.Worksheets('articles').Cells(ligne, 3).Value) Then
ThisWorkbook.Worksheets('articles').Cells(ligne, 6).Value = ThisWorkbook.Worksheets('articles').Cells(ligne, 6).Value - ThisWorkbook.Worksheets('facturation').Cells(lignef, 5)
End If
ligne = ligne + 1
Wend
lignef = lignef + 1
Wend
End If
Label1.Caption = 'Les stocks ont été mis jour. La facture peut être éditée.'
End Sub