La feuille "parametres" du classeur blesses.xlsm contient
la liste des années disponibles ainsi que deux boutons automatisant l'importation
des classeurs annuels :
Deux automatisations sont proposées :
-
le bouton "Importer classeur" permet d'importer un classeur annuel.
-
le bouton "Importer dossier" (voir exercice 3) permet
d'importer tous les classeurs du dossier dont le nom est fixé dans la cellule D1 de la feuille
"parametres".
Les macros associés à ces deux boutons, nommées respectivement importerClasseur et importerDossier, sont disponibles dans le module
Module2 du classeur. Nous allons commenter la première des deux, qui est une adaptation d'un programme créé
par l'enregistreur macro (voir question 3 de l'exercice 3) :
Sub importerClasseur()
' choix de l'annee (et donc du fichier)
annee = InputBox("annee à ajouter")
dossier = Worksheets("parametres").Range("D1") & "\"
fichier = "annee" & annee & ".xlsx"
If (Dir(dossier & fichier) = "") Then
MsgBox (fichier & " est inexistant")
Exit Sub
End If
' attention, à faire avant l'ouverture du classeur annuel
Set f = Worksheets("stockage")
' ouverture du classeur annuel
Workbooks.Open Filename:=dossier & fichier
' transfert des donnees
n = WorksheetFunction.CountA(f.Columns("A")) + 1 ' position d'insertion
Worksheets("Feuil1").Range("A2:D13").Copy f.Cells(n, 2)
' ajout des clés (colonne 1) et des totaux de blessés (colonne 6)
For lig = n To n + 11
f.Cells(lig, 1) = f.Cells(lig, 3) & "/" & f.Cells(lig, 2)
f.Cells(lig, 6) = f.Cells(lig, 4) + f.Cells(lig, 5)
Next lig
' fermeture du classeur annuel
ActiveWorkbook.Close
End Sub
L'utilisateur doit tout d'abord saisir l'année dans une boîte de dialogue, à partir de laquelle
est déterminé le nom du fichier : s'il entre 1991, le fichier à importer se nommera
"D:\accidents\donnees\annee1991.xlsx".
Si le fichier n'est pas trouvé, un message d'erreur est affiché et le programme est interrompu.
L'instruction Set f = Worksheets("stockage") doit impérativement être effectuée
avant l'ouverture du classeur annuel, car sinon f désignerait la feuille "stockage"
de ce classeur annuel et non la feuille "stockage" du classeur blesses.xlsm
(contenant le tableau de bord et la macro).
Pour obtenir la position d'insertion (B86 dans la macro enregistrée) dans la feuille stockage,
on calcule le nombre de valeurs de la colonne A auquel on ajoute 1.