Sub Màj_Semaine()
     Init_Semaine
     Import_Tâches_Mois
End Sub
'Remise à zéro et redimensionnement des tableaux de la feuille "Planificateur Semaine"
Sub Init_Semaine()
     JoursPleins = Array("tb_Lundi", "tb_Mardi", "tb_Mercredi", "tb_Jeudi", "tb_Vendredi")
     JoursRéduits = Array("tb_Samedi", "tb_Dimanche")
    
     Application.ScreenUpdating = False
     Application.EnableEvents = False
    
     'Effacer le contenu des tableaux
     For Each Lo In Sh_Semaine.ListObjects
          With Sh_Semaine.Evaluate(Lo.Name)
               .Columns(1).ClearContents
               .Columns(2).ClearContents
          End With
     Next
     'Dimension initiale des tableaux
     For Each jour In JoursPleins                 '12 lignes
          With Sh_Semaine.Evaluate(jour)
               nb = .Rows.Count
               If nb > 12 Then
                    For i = 13 To nb
                         .ListObject.ListRows(1).Delete
                    Next i
               Else
                    For i = nb + 1 To 12
                         .ListObject.ListRows.Add
                    Next i
               End If
          End With
     Next
     For Each jour In JoursRéduits                '5 lignes
          With Sh_Semaine.Evaluate(jour)
               nb = .Rows.Count
               If nb > 5 Then
                    For i = 6 To nb
                         .ListObject.ListRows(1).Delete
                    Next i
               Else
                    For i = nb + 1 To 5
                         .ListObject.ListRows.Add
                    Next i
               End If
          End With
     Next
     With Sh_Semaine.[tb_Tâches]                  '20 lignes
               nb = .Rows.Count
               If nb > 20 Then
                    For i = 21 To nb
                         .ListObject.ListRows(1).Delete
                    Next i
               Else
                    For i = nb + 1 To 20
                         .ListObject.ListRows.Add
                    Next i
               End If
     End With
     With Sh_Semaine.[tb_Notes]                   '18 lignes
               nb = .Rows.Count
               If nb > 18 Then
                    For i = 19 To nb
                         .ListObject.ListRows(1).Delete
                    Next i
               Else
                    For i = nb + 1 To 18
                         .ListObject.ListRows.Add
                    Next i
               End If
     End With
    
     Application.EnableEvents = True
     Application.ScreenUpdating = True
End Sub
'Importer les tâches non terminées du mois dans la feuille "Planificateur Semaine"
Sub Import_Tâches_Mois()
    
     Dim Lo As ListObject, Nom$, tb, tb_à_faire(), nb%, nbPlus%, jour
     'Liste des jours dont le nombre de lignes peut évoluer
     Jours = Array("tb_Lundi", "tb_Mardi", "tb_Mercredi", "tb_Jeudi", "tb_Vendredi", "tb_Samedi")
     'Mois courant
     Nom = "tb_" & WorksheetFunction.Proper(Format([Date_Début], "mmmm"))
     'Valeurs du tableau du mois courant
     tb = Sh_Mensuel.Evaluate(Nom).Value
    
     'stocker les éléments non terminés
     nb = 0
     For i = 1 To UBound(tb)
          If tb(i, 4) = "" And tb(i, 1) <> "" Then  'si la ligne contient un élément à faire non terminé
               nb = nb + 1: ReDim Preserve tb_à_faire(1 To nb): tb_à_faire(nb) = tb(i, 1)
          End If
     Next
     If nb = 0 Then MsgBox "Aucune tâche planifiée pour le mois de " & Replace(Nom, "tb_", ""): Exit Sub 'Pas d'élément ce mois-ci : sortir
    
     Application.ScreenUpdating = False
     Application.EnableEvents = False
    
     If nb > 20 Then 'Si nb éléments à faire > 20 : redimensionner le tableau des tâches (par un multiple de 3)
          nbPlus = ((nb - 21) \ 3) + 1
          'Ajouter un multiple de 3 lignes au tableau des tâches
          For i = 1 To nbPlus * 3
               Sh_Semaine.ListObjects("tb_Tâches").ListRows.Add
          Next i
          'Ajuster la hauteur des jours de la semaine en conséquence
          For Each N In Jours
               For i = 1 To nbPlus
                    Sh_Semaine.ListObjects(N).ListRows.Add
               Next
          Next N
     End If
     'Ecrire les tâches à faire
     Sh_Semaine.[tb_Tâches].Columns(1).Resize(nb).Value = WorksheetFunction.Transpose(tb_à_faire)
    
     Application.EnableEvents = True
     Application.ScreenUpdating = True
    
End Sub
Sub Effacer_Contenu_Tableau()
    
     Dim Lo As ListObject
     Set Lo = Selection.Cells(1).ListObject
     If Lo Is Nothing Then Exit Sub
     If MsgBox("Effacer le contenu du tableau " & Lo.Name & " ?", vbYesNo) = vbNo Then Exit Sub
    
     Application.ScreenUpdating = False
     Application.EnableEvents = False
     For Each Col In Lo.ListColumns
          Col.Range.ClearContents
     Next
     Application.EnableEvents = True
     Application.ScreenUpdating = True
    
End Sub
Sub Ajouter_Lignes()
     Dim Lo As ListObject
     Set Lo = Selection.Cells(1).ListObject
     If Lo Is Nothing Then Exit Sub
     Application.ScreenUpdating = False
     Application.EnableEvents = False
     For i = 1 To 10
          Lo.ListRows.Add
     Next i
     Application.EnableEvents = True
     Application.ScreenUpdating = True
End Sub