VBA appliqué aux problèmes de gestion
Modifier ou compléter un programme VBA simple avec variables, affectations, entrées, calculs, sorties, tests simples ou imbriqués et boucles.
Objectifs de la leçon
Dans la leçon précédente, nous avons vu comment enregistrer une macro-commande et interpréter un programme simple dans le tableur. Ici, l’objectif est d’aller plus loin : exécuter, modifier ou compléter le code d’une macro-commande pour résoudre un problème de gestion.
Cette leçon s’inscrit dans la partie « La gestion des données du système d’information », plus précisément dans la compétence « Traiter des données via le tableur pour résoudre des problèmes ». Elle prolonge l’automatisation des calculs par formules en montrant quand et pourquoi un programme VBA devient utile.
À l’issue de cette leçon, vous devrez être capable de :
- comprendre la logique d’un programme VBA simple ;
- exécuter une macro-commande dans un classeur ;
- modifier des instructions existantes ;
- compléter un code avec des variables, des affectations, des entrées, des calculs, des sorties, des tests et des boucles ;
- relier le programme à un besoin concret de gestion.
1. Pourquoi utiliser VBA dans le tableur ?
Le tableur permet déjà beaucoup de choses avec les formules, les fonctions, les formats, les contrôles de cohérence et les modèles de feuilles de calcul. Cependant, certaines tâches de gestion deviennent vite répétitives ou difficiles à traiter uniquement avec des cellules.
1.1. Le besoin d’automatisation en gestion
Dans un contexte professionnel, on rencontre souvent des opérations comme :
- mettre en forme automatiquement un tableau mensuel ;
- parcourir une liste de factures et signaler les retards ;
- calculer une commission selon plusieurs conditions ;
- importer, nettoyer ou recopier des données ;
- générer un message d’alerte si un seuil est dépassé ;
- additionner uniquement certaines lignes répondant à un critère ;
- répéter une opération sur plusieurs feuilles.
Quand ces traitements deviennent répétitifs, la macro-commande permet d’automatiser l’action. Quand la macro enregistrée ne suffit pas, on modifie le programme avec VBA.
1.2. Pourquoi VBA plutôt qu’une simple formule ?
Une formule agit dans une cellule. Un programme VBA, lui, peut :
- agir sur plusieurs cellules et plusieurs feuilles ;
- enchaîner plusieurs étapes ;
- demander une valeur à l’utilisateur ;
- prendre une décision selon une condition ;
- répéter une action autant de fois que nécessaire ;
- afficher un résultat ou un message.
Autrement dit, VBA permet de piloter un traitement et pas seulement de calculer une valeur.
2. Place de VBA dans le traitement des données du système d’information
Dans l’UE 8, le tableur est un outil de traitement des données au service de la gestion. Il ne s’agit pas de développer des applications complexes, mais de savoir mettre en œuvre des programmes simples pour :
- automatiser un problème de gestion courant ;
- fiabiliser un traitement ;
- gagner du temps ;
- limiter les erreurs manuelles ;
- rendre le modèle plus reproductible.
VBA s’insère donc dans une logique de gestion des données du système d’information :
- les données sont saisies ou importées dans le tableur ;
- le programme les lit ;
- il applique des règles de gestion ;
- il produit une sortie exploitable.
Exemple simple :
- Entrée : montant HT, taux de remise, seuil de commission ;
- Traitement : calcul du net commercial, puis de la commission si objectif atteint ;
- Sortie : affichage du résultat dans une cellule et message d’information.
3. Rappels indispensables : macro-commande, procédure et fonction
3.1. La macro-commande
Une macro-commande est une suite d’instructions exécutées automatiquement dans le tableur.
Elle peut être :
- enregistrée automatiquement à partir d’actions réalisées dans le tableur ;
- écrite ou modifiée dans l’éditeur VBA.
3.2. La procédure
La procédure exécute une suite d’actions.
Exemple :
Sub MiseEnFormeTableau()
Range("A1").Value = "Chiffre d'affaires"
Range("A1").Font.Bold = True
End Sub
Ici, la procédure :
- écrit un texte dans A1 ;
- met ce texte en gras.
3.3. La fonction
Une fonction renvoie une valeur.
Exemple :
Function TVA(MontantHT As Double) As Double
TVA = MontantHT * 0.2
End Function
Cette fonction reçoit un montant HT et renvoie le montant de TVA.
Dans cette leçon, nous nous concentrons surtout sur la modification et le complément de procédures et fonctions simples.
4. Structure générale d’un programme VBA simple
Un programme VBA de base contient souvent :
- des variables ;
- des affectations ;
- des entrées ;
- des calculs ;
- des sorties ;
- des tests ;
- parfois des boucles.
4.1. Exemple complet très simple
Sub CalculRemise()
Dim montant As Double
Dim remise As Double
Dim net As Double
montant = InputBox("Saisir le montant brut")
If montant >= 1000 Then
remise = montant * 0.1
Else
remise = 0
End If
net = montant - remise
Range("B2").Value = net
MsgBox "Montant net : " & net
End Sub
Ce programme :
- déclare trois variables ;
- demande un montant à l’utilisateur ;
- applique une remise si le montant atteint 1 000 € ;
- calcule le net ;
- écrit le résultat dans une cellule ;
- affiche un message.
Cet exemple contient déjà les briques essentielles du programme VBA appliqué à la gestion.
5. Les variables : stocker une information pendant le traitement
5.1. Définition
Une variable est une zone mémoire nommée utilisée pour stocker une valeur pendant l’exécution du programme.
En gestion, on utilise par exemple des variables pour mémoriser :
- un montant ;
- une quantité ;
- un taux ;
- un numéro de ligne ;
- un total cumulé ;
- un libellé.
5.2. Déclaration d’une variable
La déclaration se fait avec Dim.
Dim montant As Double
Dim quantite As Integer
Dim client As String
5.3. Pourquoi déclarer les variables ?
Déclarer les variables permet :
- de rendre le programme lisible ;
- de limiter les erreurs ;
- d’indiquer la nature de l’information ;
- d’améliorer la fiabilité du traitement.
5.4. Types de variables utiles dans les problèmes simples de gestion
Sans entrer dans un niveau avancé, il faut savoir reconnaître quelques types fréquents :
String: texte ;Integer: nombre entier ;Double: nombre décimal ;Boolean: vrai/faux.
Exemple :
Dim nomClient As String
Dim montantHT As Double
Dim nbFactures As Integer
Dim retard As Boolean
6. Les affectations : donner une valeur à une variable
6.1. Principe
Une affectation consiste à attribuer une valeur à une variable.
montantHT = 2500
tauxTVA = 0.2
client = "Durand"
6.2. Affectation à partir d’une cellule
montantHT = Range("B2").Value
Le programme lit la valeur de la cellule B2 et la stocke dans la variable montantHT.
6.3. Affectation à partir d’un calcul
montantTTC = montantHT * (1 + tauxTVA)
6.4. Pourquoi l’affectation est essentielle ?
Parce qu’un programme de gestion suit toujours la même logique :
- il récupère une donnée ;
- il la stocke ;
- il la transforme ;
- il restitue un résultat.
L’affectation est le lien entre ces étapes.
7. Les entrées : faire entrer l’information dans le programme
L’entrée correspond à ce que le programme reçoit avant ou pendant le traitement.
7.1. Entrée depuis une cellule
C’est le cas le plus fréquent dans le tableur.
quantite = Range("B3").Value
prixUnitaire = Range("B4").Value
7.2. Entrée via une boîte de dialogue
montant = InputBox("Saisissez le montant")
Cette solution est utile quand la donnée n’est pas déjà dans le tableau.
7.3. Intérêt en gestion
Les entrées permettent d’adapter le traitement à la situation :
- un utilisateur saisit un seuil ;
- un gestionnaire indique un taux ;
- le programme lit les données du mois en cours.
7.4. Bon réflexe
Dans un programme simple, il faut toujours se demander :
D’où vient l’information ?
- d’une cellule ?
- d’une saisie utilisateur ?
- d’une valeur fixe dans le code ?
8. Les calculs : transformer les données en information utile
Le cœur d’un programme de gestion est souvent un calcul.
8.1. Exemples de calculs simples
ca = quantite * prixUnitaire
remise = ca * tauxRemise
net = ca - remise
8.2. Exemple de calcul de TVA
tva = montantHT * 0.2
montantTTC = montantHT + tva
8.3. Exemple de calcul de commission
If ca >= objectif Then
commission = ca * 0.05
Else
commission = 0
End If
8.4. Pourquoi VBA est utile ici ?
Parce que le calcul peut dépendre :
- de plusieurs étapes ;
- de conditions ;
- d’une répétition sur plusieurs lignes.
9. Les sorties : restituer le résultat du traitement
La sortie est la manière dont le programme communique son résultat.
9.1. Écriture dans une cellule
Range("D2").Value = montantTTC
9.2. Message à l’écran
MsgBox "Le montant TTC est de " & montantTTC
9.3. Sortie textuelle combinée
Range("E2").Value = "Commission accordée"
9.4. Intérêt en gestion
Une sortie peut servir à :
- alimenter un tableau ;
- produire un indicateur ;
- signaler une anomalie ;
- guider l’utilisateur.
10. Les tests : faire prendre une décision au programme
Le test permet au programme de choisir un traitement selon une condition.
10.1. Test simple : If ... Then ... Else
If montant >= 1000 Then
remise = montant * 0.1
Else
remise = 0
End If
10.2. Pourquoi utiliser un test ?
Parce que les règles de gestion sont rarement uniformes. Par exemple :
- remise si seuil atteint ;
- alerte si stock insuffisant ;
- commission différente selon la catégorie ;
- validation si la cellule n’est pas vide.
10.3. Tests imbriqués
Un test imbriqué permet de distinguer plusieurs cas.
If ca < 10000 Then
taux = 0.02
Else
If ca < 20000 Then
taux = 0.04
Else
taux = 0.06
End If
End If
Ici, le taux de commission dépend du niveau de chiffre d’affaires.
10.4. Lecture logique d’un test imbriqué
Pour bien comprendre un code, il faut le lire comme une règle de gestion :
- si le chiffre d’affaires est inférieur à 10 000, alors taux 2 % ;
- sinon, s’il est inférieur à 20 000, alors taux 4 % ;
- sinon, taux 6 %.
Le programme n’est donc que la traduction d’une règle de gestion.
11. Les boucles : répéter un traitement
La boucle sert à répéter automatiquement une action.
11.1. Pourquoi une boucle est utile ?
Dans un tableur de gestion, on travaille souvent sur des listes :
- lignes de factures ;
- salariés ;
- produits ;
- clients ;
- écritures ;
- ventes mensuelles.
Au lieu de traiter chaque ligne à la main, le programme répète l’opération.
11.2. Boucle For ... Next
Dim i As Integer
For i = 2 To 10
Range("C" & i).Value = Range("A" & i).Value * Range("B" & i).Value
Next i
Ce programme calcule, de la ligne 2 à la ligne 10, le produit de A par B et place le résultat en C.
11.3. Lecture de la boucle
iprend successivement les valeurs 2, 3, 4… 10 ;- à chaque passage, le programme calcule une ligne ;
- la boucle s’arrête après la ligne 10.
11.4. Exemple de cumul
Dim i As Integer
Dim total As Double
total = 0
For i = 2 To 6
total = total + Range("B" & i).Value
Next i
Range("B8").Value = total
Ce programme additionne les valeurs de B2 à B6 et place le total en B8.
11.5. Ce qu’il faut retenir
La boucle est indispensable lorsque le problème de gestion implique une série de données.
12. Lire, exécuter, modifier et compléter une macro-commande
C’est la compétence centrale de cette leçon.
12.1. Exécuter une macro-commande
Exécuter une macro consiste à lancer le programme pour qu’il réalise les actions prévues.
Concrètement, il faut surtout comprendre que :
- le code doit être associé au bon classeur ;
- les cellules utilisées par le programme doivent contenir les données attendues ;
- le résultat dépend de la logique écrite dans la macro.
12.2. Modifier une macro-commande
Modifier une macro, c’est changer une partie du code existant sans réécrire tout le programme.
Exemples de modifications fréquentes :
- changer l’adresse d’une cellule ;
- modifier un taux ;
- remplacer un seuil ;
- corriger une formule ;
- compléter une condition.
Exemple 1 : changer le taux de TVA
Code initial :
montantTTC = montantHT * 1.2
Si le traitement doit utiliser un autre taux, on peut écrire :
montantTTC = montantHT * 1.055
Exemple 2 : changer la cellule de sortie
Code initial :
Range("D2").Value = net
Nouveau besoin : écrire le résultat en E2.
Range("E2").Value = net
12.3. Compléter une macro-commande
Compléter une macro, c’est ajouter une partie manquante.
Exemple :
Sub PrimeVendeur()
Dim ca As Double
Dim prime As Double
ca = Range("B2").Value
' Compléter ici
Range("C2").Value = prime
End Sub
On doit ajouter la règle de calcul de la prime.
Solution possible :
If ca >= 15000 Then
prime = ca * 0.03
Else
prime = 0
End If
Programme complet :
Sub PrimeVendeur()
Dim ca As Double
Dim prime As Double
ca = Range("B2").Value
If ca >= 15000 Then
prime = ca * 0.03
Else
prime = 0
End If
Range("C2").Value = prime
End Sub
13. Méthode pour analyser un code VBA simple
Quand on vous donne une macro à interpréter ou à compléter, il faut adopter une méthode rigoureuse.
Étape 1 : repérer les variables
Demandez-vous :
- quelles informations sont stockées ?
- de quel type sont-elles ?
Étape 2 : repérer les entrées
- quelles cellules sont lues ?
- y a-t-il une
InputBox?
Étape 3 : repérer les calculs
- quelles opérations sont réalisées ?
- dans quel ordre ?
Étape 4 : repérer les tests
- quelle condition est vérifiée ?
- quels sont les cas possibles ?
Étape 5 : repérer les sorties
- où va le résultat ?
- cellule, message, cumul ?
Étape 6 : repérer les répétitions
- y a-t-il une boucle ?
- sur quelles lignes ou combien de fois ?
Cette méthode permet de comprendre un programme même si l’on ne l’a pas écrit soi-même.
14. Cas pratique 1 : calcul automatique d’une remise commerciale
14.1. Problème de gestion
Une entreprise souhaite automatiser le calcul d’une remise :
- si le montant brut est inférieur à 500 €, pas de remise ;
- entre 500 € et 1 999,99 €, remise de 5 % ;
- à partir de 2 000 €, remise de 10 %.
Le montant brut est en B2. Le net commercial doit être écrit en C2.
14.2. Programme VBA
Sub RemiseCommerciale()
Dim montantBrut As Double
Dim tauxRemise As Double
Dim netCommercial As Double
montantBrut = Range("B2").Value
If montantBrut < 500 Then
tauxRemise = 0
Else
If montantBrut < 2000 Then
tauxRemise = 0.05
Else
tauxRemise = 0.1
End If
End If
netCommercial = montantBrut * (1 - tauxRemise)
Range("C2").Value = netCommercial
End Sub
14.3. Analyse
- Entrée : cellule B2 ;
- Test imbriqué : détermine le taux ;
- Calcul : net commercial ;
- Sortie : cellule C2.
14.4. Pourquoi VBA ici ?
Parce que la règle tarifaire dépend de plusieurs cas. Le programme formalise une règle de gestion et la rend reproductible.
15. Cas pratique 2 : totaliser une série de montants
15.1. Problème de gestion
On veut calculer le total des ventes de la colonne B, de la ligne 2 à la ligne 12, et écrire le total en B13.
15.2. Programme VBA
Sub TotalVentes()
Dim i As Integer
Dim total As Double
total = 0
For i = 2 To 12
total = total + Range("B" & i).Value
Next i
Range("B13").Value = total
End Sub
15.3. Analyse
- la boucle parcourt les lignes ;
- la variable
totalcumule les montants ; - le résultat final est écrit en B13.
15.4. Intérêt en gestion
Ce type de traitement est fréquent pour :
- un total de ventes ;
- un total de charges ;
- un cumul d’heures ;
- un total de règlements.
16. Cas pratique 3 : alerte sur dépassement de seuil
16.1. Problème de gestion
Si le stock disponible en B2 est inférieur au stock minimum en C2, le programme doit afficher une alerte.
16.2. Programme VBA
Sub AlerteStock()
Dim stockDispo As Double
Dim stockMini As Double
stockDispo = Range("B2").Value
stockMini = Range("C2").Value
If stockDispo < stockMini Then
MsgBox "Alerte : stock insuffisant"
Else
MsgBox "Stock suffisant"
End If
End Sub
16.3. Ce que montre cet exemple
Un programme VBA n’est pas seulement fait pour calculer ; il peut aussi aider à la décision par un message simple.
17. Cas pratique 4 : compléter un code incomplet
Énoncé
On vous donne le code suivant :
Sub CalculPrime()
Dim ventes As Double
Dim prime As Double
ventes = Range("B2").Value
If ventes >= 10000 Then
' à compléter
Else
prime = 0
End If
Range("C2").Value = prime
End Sub
La règle de gestion est : si les ventes atteignent 10 000 €, la prime est égale à 4 % des ventes.
Correction
Sub CalculPrime()
Dim ventes As Double
Dim prime As Double
ventes = Range("B2").Value
If ventes >= 10000 Then
prime = ventes * 0.04
Else
prime = 0
End If
Range("C2").Value = prime
End Sub
Méthode de résolution
- identifier la variable à calculer :
prime; - lire la règle de gestion ;
- traduire cette règle en affectation ;
- vérifier que la sortie utilise bien la variable calculée.
18. Cas pratique 5 : modifier une boucle existante
Énoncé
Code initial :
Sub CalculMontants()
Dim i As Integer
For i = 2 To 6
Range("D" & i).Value = Range("B" & i).Value * Range("C" & i).Value
Next i
End Sub
Nouveau besoin : le calcul doit aller jusqu’à la ligne 10.
Correction
Sub CalculMontants()
Dim i As Integer
For i = 2 To 10
Range("D" & i).Value = Range("B" & i).Value * Range("C" & i).Value
Next i
End Sub
Ce qu’il faut comprendre
Modifier une macro ne signifie pas tout réécrire. Souvent, il faut seulement adapter :
- une borne de boucle ;
- une cellule ;
- un seuil ;
- un taux.
19. Erreurs fréquentes à éviter
19.1. Oublier d’affecter une valeur
Dim total As Double
Range("B10").Value = total
Ici, total n’a jamais été calculé.
19.2. Confondre lecture et écriture
montant = Range("B2").Value
Range("B2").Value = montant
Le premier lit la cellule, le second écrit dans la cellule.
19.3. Mauvaise logique de test
Il faut vérifier l’ordre des conditions, surtout dans les tests imbriqués.
19.4. Mauvaise borne de boucle
Une boucle mal bornée peut :
- oublier des lignes ;
- traiter trop de lignes ;
- écraser des totaux.
19.5. Résultat non restitué
Un programme peut calculer correctement mais ne rien afficher si aucune sortie n’est prévue.
20. Bonnes pratiques pour modifier ou compléter un programme VBA simple
Même à un niveau d’initiation, quelques règles sont essentielles.
20.1. Utiliser des noms de variables explicites
Préférer :
Dim montantHT As Double
Dim tauxRemise As Double
plutôt que :
Dim x As Double
Dim y As Double
20.2. Respecter la logique du traitement
Toujours raisonner dans l’ordre :
- entrée ;
- traitement ;
- sortie.
20.3. Tester le programme avec des valeurs simples
Par exemple :
- montant = 0 ;
- montant juste en dessous du seuil ;
- montant exactement au seuil ;
- montant largement au-dessus.
Cela permet de vérifier la cohérence du test.
20.4. Modifier un seul élément à la fois
Quand on corrige une macro, il vaut mieux changer une seule chose puis tester, afin d’identifier facilement l’effet de la modification.
21. Mémo de syntaxe minimale à connaître
Déclaration
Dim montant As Double
Dim nomClient As String
Dim i As Integer
Affectation
montant = 1250
montant = Range("B2").Value
Entrée utilisateur
montant = InputBox("Saisir un montant")
Sortie
Range("C2").Value = montant
MsgBox "Traitement terminé"
Test simple
If montant > 1000 Then
remise = 50
Else
remise = 0
End If
Boucle
For i = 2 To 10
total = total + Range("B" & i).Value
Next i
22. Mini-exercices d’application corrigés
Exercice 1
On lit en B2 un montant HT. Compléter le programme pour calculer une TVA à 20 % et écrire le TTC en C2.
Sub CalculTTC()
Dim montantHT As Double
Dim montantTTC As Double
montantHT = Range("B2").Value
' à compléter
Range("C2").Value = montantTTC
End Sub
Correction
montantTTC = montantHT * 1.2
Exercice 2
Modifier le programme suivant pour que le message affiche "Objectif atteint" si le chiffre d’affaires est au moins égal à 25 000.
Sub Objectif()
Dim ca As Double
ca = Range("B2").Value
If ca >= 20000 Then
MsgBox "Objectif atteint"
Else
MsgBox "Objectif non atteint"
End If
End Sub
Correction
If ca >= 25000 Then
Exercice 3
Compléter la boucle pour additionner les montants de B2 à B5.
Sub SommeMontants()
Dim i As Integer
Dim total As Double
total = 0
For i = 2 To 5
' à compléter
Next i
Range("B6").Value = total
End Sub
Correction
total = total + Range("B" & i).Value
23. Ce qu’il faut savoir faire concrètement
À ce stade, la compétence attendue n’est pas de développer une application complexe. Il faut surtout savoir :
- exécuter une macro existante ;
- lire un code VBA simple ;
- repérer variables, entrées, calculs, sorties, tests et boucles ;
- modifier un paramètre dans le code ;
- compléter une instruction manquante cohérente avec une règle de gestion ;
- traduire une règle simple en instructions VBA.
Cela correspond exactement à l’objectif du programme : mettre en œuvre des programmes au sein du tableur pour automatiser la résolution de problèmes de gestion.
24. Résumé
Le VBA dans le tableur sert à traiter des données et à automatiser des tâches de gestion que les formules seules ne suffisent pas toujours à prendre en charge.
Les éléments fondamentaux d’un programme simple sont :
- les variables : elles stockent les informations ;
- les affectations : elles donnent une valeur aux variables ;
- les entrées : elles alimentent le programme ;
- les calculs : ils appliquent la règle de gestion ;
- les sorties : elles restituent le résultat ;
- les tests : ils permettent de choisir entre plusieurs cas ;
- les boucles : elles répètent un traitement.
La compétence essentielle est de savoir exécuter, modifier ou compléter le code d’une macro-commande dans un contexte simple et concret de gestion.
Mémo final
Quand utiliser VBA ?
- tâche répétitive ;
- suite d’actions automatiques ;
- calcul conditionnel ;
- traitement sur plusieurs lignes ;
- message ou alerte à produire.
Structure logique d’un programme
- Lire les données ;
- stocker dans des variables ;
- appliquer les calculs ;
- tester les conditions ;
- répéter si besoin ;
- afficher ou écrire le résultat.
Syntaxes clés
Dim: déclarer une variable ;=: affecter une valeur ;Range("A1").Value: lire ou écrire une cellule ;InputBox: demander une saisie ;MsgBox: afficher un message ;If ... Then ... Else: condition ;For ... Next: boucle.
Réflexe méthodologique
Face à un code VBA simple, demandez-vous toujours :
- quelles sont les entrées ?
- quel est le traitement ?
- quelle est la sortie ?
- quelle est la règle de gestion traduite dans le programme ?
C’est cette lecture structurée qui permet de comprendre, corriger et compléter une macro-commande de manière fiable.