Extraire feuille d'un classeur et l'enregistrer selon le nom d'une cellule

Bonjour à tous,

Je suis prof et j'ai avec excel créé un classeur dont le but est de générer automatiquement un exercice différent pour les élèves. La trame est la même pour tout le monde mais les données sont différentes pour chaque élève, de cette façon ils ne peuvent pas recopier l'exercice d'un petit copain, puisque les valeurs de départ et donc les résultats de chacun sont différents.

Oui je sais c'est un peu sadique, mais pour moi c'est le Graal, les élèves sont obligés de faire eux-mêmes les calculs.

He bien vous savez quoi, après des heures et des heures de tests, bug et autres mésaventures, j'y suis parvenu, cela fonctionne.

Le plus gros étant fait, je tente désormais d'améliorer les enregistrements.

J'ai sur ce fichier 3 feuilles actives, une feuille élève (exercice avec les données sans les résultats), une feuille prof (corrigé avec les résultats pour le prof) et une feuille BDD ou je stocke toutes les données des exercices.

Par ces temps de confinement je tente d'envoyer le travail à mes élèves, il faut donc que j'envoie un fichier avec uniquement la partie élève (donc la feuille "élevè" uniquement de mon classeur) et pour m'en sortir lors de l'envoi par mail comme les fichiers sont individuels, j'aimerai que le fichier porte le nom de l'élève.

J'ai regardé sur le forum et j'ai trouvé un post dans ce sens, une petite macro qui donne ceci :

Sub EnregistreFeuileNom()

ActiveWorkbook.SaveAs Filename:= _

"C:\Users\chris\Desktop\PJTMCA_COM\" & Range("B5")

End Sub

Cela fonctionne en partie, "C:\Users\chris\Desktop\PJTMCA_COM\" c'est l'emplacement d'enregistrement des fichiers sur mon ordinateur, et ici ("B5") est la cellule qui porte le nom de l'élève. J'y suis presque mais hélas dans le fichier enregistré au nom de l'élève dans le dossier de mon choix j'ai toutes les feuilles du classeur, donc avex la correction et cela c'est moins glop.

Alors j'ai eu une idée, j'ai regardé si l'on pouvait enregistrer une feuille uniquement dans un nouveau classeur vierge, il y a bien une procédure excel, clic droit sur l'onglet de la feuille (élève chez moi),=> déplacer ou copier => Choisir dans un nouveau classeur (cocher créer une copie) et valider, la feuille est bien isolée dans un nouveau classeur.

J'ai enregistré une macro sur cette procédure et j'ai récupéré le code VBA, cela donne cela :

Sub ExtraireEnrigistrerFeuilleEleveAvecNom()

'

' ExtraireEnrigistrerFeuilleEleveAvecNom Macro

Sheets("Elève").Select

Sheets("Elève").Copy

End Sub

Je me suis dit je prends le code cette dernière, je me positionne après la 3 eme ligne et je colle les deux lignes centrales de la première pour faire cela :

Sub ExtraireEnrigistrerFeuilleEleveAvecNom()

'

' ExtraireEnrigistrerFeuilleEleveAvecNom Macro

Sheets("Elève").Select

Sheets("Elève").Copy

ActiveWorkbook.SaveAs Filename:= _

"C:\Users\chris\Desktop\PJTMCA_COM\" & Range("B5")

End Sub

Sur un malentendu cela pourrait marcher, mais hélas le rêve se brise, message d'erreur, mais mes connaissances en VBA sont presque nulles, je pense ne pas être très loin, si qqun peut mettre un coup de baguette magique pour me débloquer cela serait merveilleux

Je mets en PJ (si il passe) le fichier.

Par avance merci pour vos réponses,

Cordialement,

Chris

10rrr-sans-macro.xlsx (118.20 Ko)

Bonsoir et

Ci-joint une proposition à tester.

Bouton "Go !"

=> sélection du répertoire de destination des fichiers

=> génération automatique des 18 fichiers, un par élève

Remarque :

L'onglet "Elève" comprend des formules basées sur l'onglet "Base". Dans les nouveaux fichiers générés, ces formules ne fonctionneront plus si l'on n'ajoute pas l'onglet "Base".

Sauf à faire une copie en valeurs (avec les cellules fusionnées à gérer ...)

Bouben

P.S. : Ayant plus d'amis profs que d'amis élèves, je cautionne la démarche

Bonsoir bouben,

Un grand merci pour cette solution, cela fonctionne et même au delà de mes espérances.

Mon objectif à terme est d'utiliser la base créée pour alimenter d'autres exercices.

Est ce que la macro pourra fonctionner, il y a t-il des modifications à prévoir ou des précautions à prendre.

Encore merci pour ton aide,

Cordialement,

Chris

Bonjour Chris,

Les seules contraintes (en dur) dans le code, sur la base de ton fichier :

> un onglet "Base"

> un onglet "Elève"

> une plage nommée "NomClient" (dans l'onglet "Base"), comprenant tous les clients (un fichier généré par client de cette plage)

> Le nom du client, modifié pour la génération de chaque extraction est en "B5" de l'onglet "Elève" (cette cellule n'est pas nommée actuellement). Idéalement, il faudrait nommer cette cellule, permettant par la suite de reprendre le même traitement, même si cette information n'est plus en B5.

Ex :

        'affecte le nom du client
        oShE.Range("B5").Value = oCell.Value
        'affecte le nom du client
        oShE.Range("ParamClient").Value = oCell.Value

Cordialement

Bouben

Rechercher des sujets similaires à "extraire feuille classeur enregistrer nom"