Bonjour Alex,
Si j'ai bien compris, dans ton classeur, tu as des feuilles ayant un nom sous cette forme : Mois (en toutes lettres) + espace + Année (en chiffres)
Par exemple :"juin 2004", "décembre 2003", etc...
1 / La procédure suivante permet de ne visualiser que les feuilles correspondant à l'année recherchée :
----------------------------------
Sub SelectionnerFeuilles()
Dim Sh As Worksheet
Dim NF As Byte
Dim FInv As Byte
Dim R As String
R = InputBox("Année souhaitée :" & vbCrLf & "(ne rien saisir pour tout réafficher)", "Sélection de feuilles", "2004")
'Afficher toutes les feuilles
AfficherFeuilles
If Val(R) < 1 Then Exit Sub
NF = Worksheets.Count
'Pour chaque feuille
For Each Sh In Worksheets
If IsDate(Sh.Name) Then
'Masquer les feuilles correspondants à une autre année
If Val(R) <> Year(DateValue(Sh.Name)) Then
FInv = FInv + 1
If FInv < NF Then
Sh.Visible = xlSheetHidden
Else
AfficherFeuilles
MsgBox "Aucune feuille trouvée"
Exit Sub
End If
End If
End If
Next Sh
End Sub
----------------------------------
Sub AfficherFeuilles()
Dim Sh As Worksheet
For Each Sh In Worksheets
Sh.Visible = xlSheetVisible
Next Sh
End Sub
----------------------------------
2/ La procédure ci-dessous trie les onglets en fonction des dates représentées :
----------------------------------
Sub TrierFeuilles()
Dim Sh As Worksheet
Dim N As Byte
Dim F As Byte
AfficherFeuilles
'254 feuilles maximum
If Worksheets.Count >= 254 Then
MsgBox "Trop de feuilles (254 maxi pour cette macro) !"
Exit Sub
End If
Application.ScreenUpdating = False
'Créer une nouvelle feuille temporaire
Sheets.Add
ActiveSheet.Name = "Temp"
With Sheets("Temp")
'Pour chaque feuille
For Each Sh In Worksheets
N = N + 1
'Stocker le nom ainsi que sa valeur sous format "Date"
.Cells(N, 1).Value = Sh.Name
If IsDate(Sh.Name) Then
.Cells(N, 2).Value = DateValue(Sh.Name)
Else
.Cells(N, 2).Value = 0
End If
Next Sh
'Trier les noms (en fonction de la valeur Date)
Columns("A:B").Sort Key1:=Range("B1")
For F = 1 To N
Sheets(.Cells(F, 1).Value).Move Before:=Sheets(F)
Next F
'Supprimer l'onglet temporaire
Application.DisplayAlerts = False
.Delete
Application.DisplayAlerts = True
End With
Application.ScreenUpdating = True
End Sub
----------------------------------
Espérant t'avoir aidé.
Cordialement.
Didier_mDF