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 :

  1. les données sont saisies ou importées dans le tableur ;
  2. le programme les lit ;
  3. il applique des règles de gestion ;
  4. 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 :

  1. des variables ;
  2. des affectations ;
  3. des entrées ;
  4. des calculs ;
  5. des sorties ;
  6. des tests ;
  7. 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

  • i prend 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 total cumule 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 :

  1. entrée ;
  2. traitement ;
  3. 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

  1. Lire les données ;
  2. stocker dans des variables ;
  3. appliquer les calculs ;
  4. tester les conditions ;
  5. répéter si besoin ;
  6. 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.