Automatiser la génération de relevés de notes avec une macro
Bonjour,
Je suis prof et je cherche à faire un classeur Excel pour générer automatiquement les relevés de notes des élèves en PDF.
La spécificité de ce classeur est que j'aimerais arriver à faire en sorte que chaque prof de l'établissement n'ait qu'à rentrer la liste de ses notes dans l'onglet correspondant à son cours, et qu'une macro reconstitue automatiquement le relevé de notes de chaque élève quand on clique sur un bouton. Cela nécessite que la macro aille chercher sur chaque onglet, la note d'un élève A, remplisse une feuille avec toutes les notes, l'imprime en PDF, puis passe à l'élève B, et ainsi de suite jusqu'à avoir générer les relevés de notes de tous les élèves.
Je joins un classeur sans macro pour illustrer un peu ce que je cherche à faire. Le classeur contient :
- un onglet "Relevé de notes" qui est l'aspect du relevé de notes
- un onglet "Liste des élèves" qui est la liste complète des élèves
- Des onglets intitulés "Liste_des_notes_du_prof_1", "Liste_des_notes_du_prof_2", etc. Ce sont dans ces onglets que les profs inscrivent les notes obtenues par les élèves.
Est-ce que vous sauriez comment je dois concevoir et programmer la macro ? (je suis débutant en VBA)
Je vous remercie par avance pour vos conseils et coups de main ! (Si vous avez des codes sources approchants, je suis preneur aussi.)
bonjour,
voici une proposition, il y a cependant quelques points qui doivent être précisés ou complétés tels que
examen1, 2 3, mention, crédits
le bonus
données concernant l'élève
voir dans les commentaires
Sub generereleve()
Set wsel = Sheets("Liste_des_élèves")
el = 2
' boucle sur la liste des élèves
While wsel.Cells(el, 2) <> ""
'copier modèle
Sheets("Relevé_de_notes").Copy After:=Sheets(Worksheets.Count)
Set wsn = Worksheets(Worksheets.Count)
' renommer la copie du modèle en incluant le nom de l'élève
wsn.Name = "notes_" & wsel.Cells(el, 1) & "_" & wsel.Cells(el, 2)
wsn.Range("B2") = wsel.Cells(el, 2) & " " & wsel.Cells(el, 1)
wsn.Range("B4") = wsel.Cells(el, 3)
'-----------
'les autres informations concernant l'élève ne sont pas disponibles
'-----------
wsn.Range("B3") = ""
wsn.Range("B5") = ""
wsn.Range("B6") = ""
wsn.Range("B7") = ""
wsn.Range("B8") = ""
'cl compteur de lignes note sur le relevé
cl = 9
'parcourir les cours
For Each wsln In Worksheets
If Left(wsln.Range("A1"), 5) = "Cours" Then
k = 5
Do While wsln.Cells(k, 1) <> ""
'selectionner l'élève
If wsln.Cells(k, 1) = wsel.Cells(el, 1) And wsln.Cells(k, 2) = wsel.Cells(el, 2) Then
'copier les notes
cl = cl + 1
wsn.Cells(cl, 1) = wsln.Range("B1")
wsn.Cells(cl, 3) = wsln.Cells(k, 3)
'-----------
' quid examen 2, 3, 4, 5, mention et crédits ?
'-----------
Exit Do
End If
' note suivante
k = k + 1
Loop
End If
Next
'sauver le relevé au format PDF
'-----------
' j'ai un doute qu'il faille le faire à ce moment-ci car il manque l'information bonus et donc le calcul de la moyenne ajustée
'-----------
Call sauvernotepdf
'eleve suivant
el = el + 1
Wend
End Sub
Sub sauvernotepdf()
For Each wsn In Worksheets
If Left(wsn.Name, 5) = "Notes" Then
wsn.ExportAsFixedFormat Type:=xlTypePDF, Filename:=wsn.Name & ".pdf"
End If
Next
End Sub