Aller au contenu

Exercice — Macros : Gestion de l'inventaire pharmacie

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 :

FeuilleSuccursale
LavalPharmacie Laval-des-Rapides
VieuxPortPharmacie du Vieux-Port
BeaucePharmacie 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,...
Vue d'ensemble de l'exerciceMacro 1 — Transformationétape 1Découper les données brutes en colonnes structuréesMacro 2 — Mise en formeétape 2Appliquer en-têtes, formats, alignements et totauxMacro 3 — Graphiqueétape 3Générer un graphique de stock par catégorieMacro 4 — Signatureétape 4Inscrire le nom, la date

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.

Avant d’écrire quoi que ce soit, utilisez l’enregistreur de macros pendant que vous effectuez la conversion manuellement sur la feuille Laval :

  1. Démarrer l’enregistrement (Développeur → Enregistrer une macro, nom : TransformerDonnees)
  2. Sélectionner toute la colonne A
  3. Aller dans Données → Convertir
  4. Choisir Délimité, puis Virgule comme séparateur
  5. Terminer l’assistant et appliquer
  6. 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.

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.

ColonneEn-têteType
AID_ProduitTexte
BNom_ProduitTexte
CCategorieTexte
DFournisseurTexte
EPrix_UnitaireNombre
FQuantite_StockEntier
GSeuil_AlerteEntier
HDate_ExpirationDate
ILotTexte
JOrdonnance_RequiseTexte

Appliquer une mise en forme professionnelle et lisible au tableau structuré de chaque feuille. Cette macro s’exécute après la Macro 1.

Créer une macro MettreEnForme qui applique les éléments suivants :

  • Police en gras
  • Fond coloré (couleur au choix, cohérente entre les trois feuilles)
  • Texte centré
  • Hauteur de ligne augmentée (ex. : 22 pts)
ColonneFormat à appliquer
E — Prix_UnitaireMonétaire avec 2 décimales (#,##0.00 $)
F — Quantite_StockNombre entier sans décimale
G — Seuil_AlerteNombre entier sans décimale
H — Date_ExpirationDate courte (yyyy-mm-dd)
ZoneAlignement
Colonnes A, I, JCentré horizontalement
Colonnes B, C, DAligné à gauche
Colonnes E, F, GAligné à droite

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).


Générer automatiquement un graphique de stock par catégorie à partir d’une zone de données préparée à l’avance.

👉 À faire avant d’enregistrer la macro

Dans chaque feuille, créer une petite zone de données en colonnes L et M :

Colonne LColonne M
=UNIQUE(C2:C21) en L1Quantite_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.

Créer une macro CreerGraphique qui :

  1. Sélectionne la zone L1:M{dernière ligne des catégories}
  2. Insère un graphique de type Histogramme groupé
  3. Le positionne à droite du tableau (à partir de la colonne N environ)

Certifier que le traitement a été effectué en inscrivant le nom du technicien et la date.

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) :

CelluleContenu
Colonne ATraité par : (texte en gras)
Colonne BLe 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 String
nomTechnicien = InputBox("Entrez votre nom complet :", "Signature")