Dupliquer un fichier et le nommer d’après une liste

J'aurais aussi pu intituler cet article : « Créer un fichier Excel® par candidat »

Je reviens d'une séance de correction d'épreuve... Désormais, l'évaluation se faisant par compétences, nous devons remplir une feuille Excel® par candidat.

On pourrait envisager une seule feuille Excel© avec autant d'onglets que de candidat, ça simplifierait la récolte pour analyse finale et la génération des onglets en interne par script, mais comme nous sommes plusieurs correcteurs nous ne pouvons pas tous travailler sur le même document (je sais qu'il existe des alternatives, mais on ne fait pas toujours ce qu'on veut).

Donc un fichier Excel® par candidat... soit  un peu moins de 250 fichiers à créer. Cette fois ci nous les avons fait à la main : copier le modèle / coller / renommer pour chacun des candidats par le premier correcteur de la copie.

De retour, je me dis que je vais croiser cette situation de plus en plus régulièrement maintenant, et qui si je pouvais automatiser ça ce serait pratique. Ça pourrait aussi me servir à d'autres occasions.

Comme la plupart des PC des établissements ou rectorats que je croise sont sur Windows®, j'ai fais un script batch tournant sous Windows®...

Méthode

Dans un répertoire, créez :

  • un fichier « Original.xlsx » qui correspond au modèle vierge à copier (allez au bout de la préparation, jusqu'au aperçu avant impression...)
  • un fichier « Liste.txt » contenant la liste des candidats (ou autre)

  • un fichier « Génération des fichiers.bat » contenant le code suivant :
@echo off
REM --------------------------------------------------------------
REM Génération de fichiers à partir d'une liste et d'un modèle
REM Éric Bugnet (eric.bugnet.fr)
REM --------------------------------------------------------------

REM - - - VARIABLES - - -
set _model=Original.xlsx
set _list=Liste.txt
set _dir=Fichiers générés

REM Check files
if not exist "%_rep%%_model%" goto:original
if not exist "%_rep%%_list%" goto:liste

REM Set variables
set /A _count=0
set _rep=%~dp0
for /f "tokens=1,2 delims=." %%a IN ("%_model%") do (
    set _ext=.%%b
)

REM Create directory if not exist
if not exist "%_rep%%_dir%" mkdir "%_rep%%_dir%"

REM Copy and rename files
for /f "delims=" %%a in ('type "%_list%"') do (
    if not exist "%_rep%%_dir%\%%a%_ext%" copy "%_rep%%_model%" "%_rep%%_dir%\%%a%_ext%"
    set /A _count +=1
)

echo OK : %_count% fichiers créés.
    pause
    goto:end

:original
    echo Le fichier %_model% n'existe pas. Il est nécessaire pour la bonne exécution du code.
    pause
    goto:end

:liste
    echo Le fichier %_list% n'existe pas. Il est nécessaire pour la bonne exécution du code.
    pause
    goto:end

:end

Une fois les fichiers prêts, double clic sur le fichier « Génération des fichiers.bat » pour l’exécuter :

Surement améliorable, mais ça marche !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.