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
Rechercher des sujets similaires à "automatiser generation releves notes macro"