Exercice — Macros : Gestion de l'inventaire pharmacie
Mise en contexte
Section intitulée « Mise en contexte »Vous travaillez comme technicien·ne en informatique pour un regroupement de trois pharmacies québécoises. Chaque succursale vous a transmis son inventaire de produits sous forme brute — une seule colonne de données CSV dans Excel, sans mise en forme ni structure.
Votre mandat : automatiser entièrement le traitement de ces données à l’aide de macros VBA, de façon à ce que la procédure puisse être relancée à chaque réception de nouvelles données.
Le fichier de départ contient trois feuilles :
| Feuille | Succursale |
|---|---|
Laval | Pharmacie Laval-des-Rapides |
VieuxPort | Pharmacie du Vieux-Port |
Beauce | Pharmacie Beauce-Centre |
Dans chacune, les données brutes se trouvent dans la colonne A, à partir de la ligne 1, sous la forme :
ID_Produit,Nom_Produit,Categorie,Fournisseur,Prix_Unitaire,Quantite_Stock,...PL001,Paracétamol 500 mg,Antalgiques,PharmaPlus,4.99,12,...Macro 1 — Transformation des données
Section intitulée « Macro 1 — Transformation des données »Objectif
Section intitulée « Objectif »Convertir les données brutes de la colonne A en un tableau structuré : une ligne par produit, une colonne par champ.
L’approche à utiliser est l’outil Convertir d’Excel (Données → Convertir). L’objectif de cette macro est d’enregistrer et d’automatiser cette opération.
Étape préalable : Enregistrer l’opération
Section intitulée « Étape préalable : Enregistrer l’opération »Avant d’écrire quoi que ce soit, utilisez l’enregistreur de macros pendant que vous effectuez la conversion manuellement sur la feuille Laval :
- Démarrer l’enregistrement (
Développeur → Enregistrer une macro, nom :TransformerDonnees) - Sélectionner toute la colonne A
- Aller dans
Données → Convertir - Choisir Délimité, puis Virgule comme séparateur
- Terminer l’assistant et appliquer
- Arrêter l’enregistrement
Examinez ensuite le code généré dans l’éditeur VBA (Alt + F11). Vous verrez apparaître un appel à TextToColumns — c’est l’instruction qui effectue la conversion.
Travail demandé
Section intitulée « Travail demandé »La macro s’exécute sur la feuille active. Vous la lancerez manuellement une fois par feuille, en vous positionnant sur chacune avant l’exécution.
Colonnes attendues après transformation
Section intitulée « Colonnes attendues après transformation »| Colonne | En-tête | Type |
|---|---|---|
| A | ID_Produit | Texte |
| B | Nom_Produit | Texte |
| C | Categorie | Texte |
| D | Fournisseur | Texte |
| E | Prix_Unitaire | Nombre |
| F | Quantite_Stock | Entier |
| G | Seuil_Alerte | Entier |
| H | Date_Expiration | Date |
| I | Lot | Texte |
| J | Ordonnance_Requise | Texte |
Macro 2 — Mise en forme
Section intitulée « Macro 2 — Mise en forme »Objectif
Section intitulée « Objectif »Appliquer une mise en forme professionnelle et lisible au tableau structuré de chaque feuille. Cette macro s’exécute après la Macro 1.
Travail demandé
Section intitulée « Travail demandé »Créer une macro MettreEnForme qui applique les éléments suivants :
2.1 En-tête
Section intitulée « 2.1 En-tête »- Police en gras
- Fond coloré (couleur au choix, cohérente entre les trois feuilles)
- Texte centré
- Hauteur de ligne augmentée (ex. : 22 pts)
2.2 Formats de colonnes
Section intitulée « 2.2 Formats de colonnes »| Colonne | Format à appliquer |
|---|---|
| E — Prix_Unitaire | Monétaire avec 2 décimales (#,##0.00 $) |
| F — Quantite_Stock | Nombre entier sans décimale |
| G — Seuil_Alerte | Nombre entier sans décimale |
| H — Date_Expiration | Date courte (yyyy-mm-dd) |
2.3 Alignement
Section intitulée « 2.3 Alignement »| Zone | Alignement |
|---|---|
| Colonnes A, I, J | Centré horizontalement |
| Colonnes B, C, D | Aligné à gauche |
| Colonnes E, F, G | Aligné à droite |
2.4 Ligne de synthèse
Section intitulée « 2.4 Ligne de synthèse »Sous la dernière ligne de données, ajouter une ligne de synthèse contenant :
- Colonne E : la moyenne des prix unitaires (
AVERAGE) - Colonne F : le total du stock (
SUM)
Cette ligne doit être mise en évidence (fond, bordure ou style distinct).
Macro 3 — Création de graphique
Section intitulée « Macro 3 — Création de graphique »Objectif
Section intitulée « Objectif »Générer automatiquement un graphique de stock par catégorie à partir d’une zone de données préparée à l’avance.
Préparatifs
Section intitulée « Préparatifs »👉 À faire avant d’enregistrer la macro
Dans chaque feuille, créer une petite zone de données en colonnes L et M :
| Colonne L | Colonne M |
|---|---|
=UNIQUE(C2:C21) en L1 | Quantite_Stock (en-tête) en M1 |
| Catégories déversées automatiquement | =SUMIF($C$2:$C$21,L2,$F$2:$F$21) en M2, copiée vers le bas |
Cette zone servira de source de données pour le graphique.
Travail demandé
Section intitulée « Travail demandé »Créer une macro CreerGraphique qui :
- Sélectionne la zone
L1:M{dernière ligne des catégories} - Insère un graphique de type Histogramme groupé
- Le positionne à droite du tableau (à partir de la colonne N environ)
Macro 4 — Signature (Bonus)
Section intitulée « Macro 4 — Signature (Bonus) »Objectif
Section intitulée « Objectif »Certifier que le traitement a été effectué en inscrivant le nom du technicien et la date.
Travail demandé
Section intitulée « Travail demandé »Créer une macro Signer qui effectue les opérations suivantes sur la feuille Laval (feuille index 1) :
Dans une zone clairement délimitée sous le tableau (laisser 2 lignes vides après la synthèse) :
| Cellule | Contenu |
|---|---|
| Colonne A | Traité par : (texte en gras) |
| Colonne B | Le nom saisi par l’utilisateur via une boîte de saisie |
| Colonne A (ligne suivante) | Date de traitement : (texte en gras) |
| Colonne B (ligne suivante) | La date du jour (format yyyy-mm-dd) |
La boîte de saisie doit utiliser InputBox :
Dim nomTechnicien As StringnomTechnicien = InputBox("Entrez votre nom complet :", "Signature")