Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (Incrément)
Dim PA As String 'déclare la variable PA (Plage Années)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim TD() As Variant 'déclare la variable TD (Tableau des Dates)
Dim TMP As String 'déclare la variabe TMP (TeMPoraire)
Application.ScreenUpdating = False 'masque les raffraîchissements d'écran
Set OS = Worksheets("Feuil1") 'définit l'onglet OS
Application.DisplayAlerts = False 'masque les messages d'Excel
For Each OD In Sheets 'boucle sur tous les onglets OD du classeur
If OD.Name <> "Feuil1" Then OD.Delete 'si le nom de l'onglet de la boucle n'est pas "Feui1", supprime l'onglet
Next OD 'prochain onglet de la boucle
Application.DisplayAlerts = True 'affiche les messages d'Excel
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
PA = (TV(I, 6) \ 3) * 3 & "-" & (TV(I, 6) \ 3) * 3 + 2 & " ans" 'définit la plage des années PA relative à la donnée ligne I colonne 6 de TV
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set OD = Worksheets(PA) 'définit l'onglet OD de la plage des années (génère une erreur si cet onglet n'existe pas)
If Err <> 0 Then 'condition : si une erreur a été générée
Err.Clear 'supprime l'erreur
Worksheets.Add 'ajoute un onglet vierge
Set OD = ActiveSheet 'définit l'onglet destination OD
OD.Name = PA 'renomme l'onlget OD
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
OD.Range("A1").Resize(1, 11).Value = Application.Index(TV, 1) 'renvoie la ligne de titres du tableau des valeurs TV dans la première ligne de l'onglet OD
Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellue de destination DEST
DEST.Resize(1, 11).Value = Application.Index(TV, I) 'renvoie la ligne I du tableau des valeurs TV dans DEST
OD.Columns(6).NumberFormat = "0" 'format colonne 6
OD.Columns(8).NumberFormat = "0" 'format colonne 8
OD.Columns("A:K").AutoFit 'largeur des colonnes
OD.Columns(4).HorizontalAlignment = xlCenter 'colonne 4 centrée
OD.Columns(6).HorizontalAlignment = xlCenter 'colonne 6 centrée
OD.Columns(8).HorizontalAlignment = xlCenter 'colonne 8 centrée
Next I 'prochaine ligne de la boucle
'tri alphabétique des onglets en pasant par le tableau des dates TD
ReDim TD(1 To Sheets.Count - 1) 'redimensionne le tableau des dates TD
J = 1 'initialise la variable J
For I = 1 To Sheets.Count 'boucle 1 : sur tous les onglets I du classeur
If Sheets(I).Name <> "Feuil1" Then TD(J) = Sheets(I).Name: J = J + 1 'si le nom de l'ponglet I n'est pas "Feuil" définit la variable TD(J), incrémente J
Next I 'prochain onglet de la boucle
For I = 1 To UBound(TD) 'boucle 1 : sur toutes les date I du tabeau des dates TD
For J = 1 To UBound(TD) 'boucle 2 : sur toutes les date J du tabeau des dates TD
If I <> J Then 'condition : si I est différente de J
If CInt(Split(TD(I), "-")(0)) < CInt(Split(TD(J), "-")(0)) Then 'condition 2 : si le premier chiffre avant le tiret a date TD(I)est supérieur au premier chiffre avant le tiret de la date TD(J)
TMP = TD(J): TD(J) = TD(I): TD(I) = TMP 'définit la temporaire TMP, TD(J) devient TD(I),TD(I) devient la temporaire TMP (soit TMP(J)), inversion de l'ordre des dates
End If 'fin de la condition 2
End If 'fin de la condition 1
Next J 'prochaine date de la boucle 2
Next I 'prochaine date de la boucle 1
For I = 1 To UBound(TD) 'boucle sur tous les dates I du tableau des dates TD
Worksheets(TD(I)).Move Before:=Sheets(I) 'déplace l'onglet de la date I en position I
Next I 'prochaine date de la boucle
OS.Move Before:=Sheets(1) 'place l'onglet OS en première position
Application.ScreenUpdating = True 'affiche les raffraîchissements d'écran
OS.Activate 'active l'onglet source OS
End Sub