Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim sh As Worksheet, shSynthese As Worksheet
Dim derLigne As Integer
Dim tmp()
Dim dl As Long

Application.Calculation = xlCalculationManual

Application.ScreenUpdating = False ' pas de visibilité à l'écran
Set shSynthese = Sheets("Synthèse_élèves") ' Crée l'alias  de la feuille synthèse
stpevt = True
If shSynthese.ListObjects("tb_synthese").ListRows.Count > 0 Then ' Vérifie que le tableau "tb_synthese" n'est pas vide
  shSynthese.ListObjects("tb_synthese").DataBodyRange.Delete ' Si c'est le cas  on le vide
End If

  
  For Each sh In Worksheets ' Pour chaque feuille
    If Left(sh.Name, 6) = "Classe" Then ' Si  le nom commence par "Classe"
      With Sheets(sh.Name)
        derLigne = .Cells(.Rows.Count, 1).End(xlUp).Row ' On cherche le numéro de la dernière ligne de la colonne des noms
        If derLigne >= 10 And .Cells(derLigne + 1, 2) > 0 Then ' On vérifie qu'il y bien des élèves dans cette classe
          tmp = .Range(.Cells(10, 2), .Cells(derLigne, 23)).Value2 ' On transfère les données en mémoire
          derLigne = shSynthese.ListObjects("tb_synthese").ListRows.Count ' On cherche la dernière ligne non vide de la feuille synthèse
          Range("tb_synthese").Cells(derLigne + 1, 2).Resize(UBound(tmp), UBound(tmp, 2)) = tmp ' Et on écrit les donéées stockées en mémoire sur la feuille à la ligne suivante
        End If
      End With
    End If
  Next sh ' On fait la même chose pour la feuille suivante

With Sheets("Synthèse_élèves")
    dl = .Cells.SpecialCells(xlLastCell).Row
    .Range("B2:B" & dl).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
End With
stpevt = False

Application.ScreenUpdating = True ' retour de visibilité à l'écran
Application.Calculation = xlCalculationAutomatic

Sheets("Classe 1").Select
Range("D1").Select

End Sub

Private Sub Workbook_SheetBeforeDoubleClick(ByVal sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim plage As Range

If stpevt = True Then Exit Sub

If Left(sh.Name, 6) = "Classe" Then

    Sheets(sh.Name).Unprotect pw
    
    Set plage = Union(Range("Y10:AA44"), Range("AC10:AD44"), Range("AF10:AH44"), Range("AL10:AQ44"), Range("S10:S44"))
    
    If Not Intersect(Target, plage) Is Nothing Then
        stpevt = True
        Cancel = False
        If Target.Column = 19 Then 'colonne S
            With Target
                If IsEmpty(.Value) Then
                    .Value = "Abs"
                Else: .Value = vbNullString
                End If
            End With
        Else:
            With Target
                If IsEmpty(.Value) Then
                    .Font.Name = "Wingdings"
                    .Font.Size = 20
                    .Value = "ü"
                Else: .Value = vbNullString
                End If
            End With
        End If
        Cancel = True
    End If
    stpevt = False
    Sheets(sh.Name).Protect pw
End If
End Sub

Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)
Dim i As String

If stpevt = True Then Exit Sub

If Left(sh.Name, 6) = "Classe" Then
    Sheets(sh.Name).Unprotect pw
    
    If Not Intersect(Target, Range("H10:H" & Range("B" & Rows.Count).End(xlUp).Row)) Is Nothing Then
        Application.ScreenUpdating = False
        stpevt = True
        Dim plage As Range, cel As Range, ligne As Byte
        
        ligne = Target.Row
    
        Set plage = Union(Range("Y" & ligne & ":AA" & ligne), Range("AC" & ligne & ":AD" & ligne), Range("AF" & ligne & ":AH" & ligne), Range("AL" & ligne & ":AP" & ligne))
        plage.ClearContents
        
        Select Case Target.Value
            Case Is = 2
                Set plage = Union(Range("Y" & ligne & ":AA" & ligne), Range("AC" & ligne & ":AD" & ligne), Range("AF" & ligne & ":AH" & ligne))
                i = "ü"
            Case 0 To 1: i = ""
            Case Is = 3: i = "ü"
        End Select
        
        With plage
            .Font.Name = "Wingdings"
            .Font.Size = 20
            .Value = i
        End With
        stpevt = False
    End If
    Sheets(sh.Name).Unprotect pw
End If
Application.ScreenUpdating = True
End Sub
