Puis-je transformer des feuilles de calcul en fichiers ?
Bonjour à tous.
Je suis enseignant en collège et, pour chaque classe, j'ai créé un fichier excel où chaque élève correspond à une feuille de calcul. Ces feuilles me servent à gérer une évaluation par objectifs et compétences pour chaque élève et, en publipostage, elles me permettent de créer des bulletins trimestriels spécifiques à ma matière (car je ne mets plus de notes).
J'aimerai aujourd'hui que les parents et les élèves aient accés, depuis chez eux, au tableau récapitulatif de leur évaluation, en lien avec mon fichier source. Ils verraient ainsi, en temps réel, l'évolution de leur évaluation sans attendre le bulletin.
Je ferai cela grace au partage sur ma dropbox. Seulement, je ne peux pas donner accés à toutes les feuilles : chacun ne doit avoir accés qu'à ses propres résultats.
Est-il possible de protéger des feuilles et de donner accés à une seule feuille (utilisation d'un code ?) ?
Sinon, comment créer rapidement un fichier à partir de chaque feuille. Ayant beaucoup d'élèves (130 environ), je n'ai guère envie de répéter un copier-coller autant de fois.
Merci beaucoup pour votre aide.
Alain
Bonjour,
Exemple de procédure :
Sub Alainpol()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets 'boucle sur toutes les feuilles du classeur
Select Case ws.Name
Case "yyy", "zzz", "uuu" 'ici les noms de feuilles à ne pas exporter
Case Else 'feuilles à exporter
ws.Copy 'crée une copie de la feuille dans un nouveau classeur
With ActiveWorkbook
.SaveAs ws.Name & ".xlsx" 'enregistre classeur en lui donnant le nom de la feuille
.Close 'ferme le nouveau classeur
End With
End Select
Next ws
End SubIl faudra peut-être préciser un nom de dossier à l'enregistrement, sinon cela enregistre dans le dossier actif...
Cordialement.
Merci (en retard !) ça marche.
Mais je n'arrive pas à préciser le dossier d'enregistrement : la macro se lance automatiquement sans me le demander. mais ce n'est pas bien grave, elles s'enregistrent dans mes docs et je les déplace ensuite.
J'ai aussi une autre question :
j'ai une vingtaine de feuille que je ne souhaite pas transformer en fichier (voir plus), suis-je obliger d'écrire chacun de leurs noms dans la macro ou y-a-t-il un autre moyen ? Sinon je les laisses se créer et je les supprime ensuite.
Autre question de débutant : ma macro est enregistrer dans le fichier de la classe 5è6 (par exemple) et, quand je veux l'utiliser sur le fichier d'une autre classe, il faut que le fichier des 5è6 soit ouvert. Est-ce normal ? Puis-je éviter de l'ouvrir à chaque fois ?
Merci, à bientôt
Alain
Bon ma réponse s'est volatilisée ! et pas le temps de tout réécrire. Je résume :
Mettre une variable (String) pour le dossier d'enregistrement...
Le listage des feuilles à ne pas transférer est une méthode sûre dans tous les cas de figure, mais on peut opérer de quantité d'autres façons selon les moyens d'identification des feuilles....
Tu peux utiliser un classeur tiers, que tu n'ouvres que pour ce type d'opérations, ou créer un classeur de macro personnelles (voir dans l'Aide comment opérer pour cela...)
Merci pour ta réponse rapide.
Tu dis :
"Mettre une variable (String) pour le dossier d'enregistrement..."
Quand tu auras le temps, pourras-tu préciser ? Est-ce une nouvelle ligne à écrire dans la macro (je n'y connais vraiment rien !)
.SaveAs ws.Name & ".xlsx"Ci-dessus la ligne de commande d'enregistrement.
Le nom du fichier est défini par le nom de la feuille, et on ajoute l'extension.
S'il faut introduire un chemin du dossier, on le place dans cette ligne avant le nom du fichier.
.SaveAs chemin & ws.Name & ".xlsx"par exemple.
chemin est une variable que tu aura ajouté aux déclarations de variables en-tête de procédure, sous la forme :
..., chemin$ ou ..., chemin As String [c'est synonyme]
Puis que tu auras initialisé avant de l'utiliser :
Par exemple : chemin = "C:\Users\Moi\Documents\"
Il y a d'autres méthodes pour l'initialiser : tu peux te demander le chemin par une InputBox, et recueillir dans la variable le chemin que tu as écrit (si long, un peu fastidieux), ou le recueillir avec Application.GetSaveAsFilename, qui t'ouvre une boîte de dialogue type Enregistrer sous, avec laquelle tu vas indiquer le dossier en utilisant l'explorateur (tu recueilles le chemin et le nom pour ensuite finaliser l'opération)...
Mais si le chemin est connu, le mieux est d'initialiser directement une variable pour le lui affecter.
Cordialement.