Tri des onglets (Janvier, Février, etc.)

Bonjour,

Je me permets de créer un nouveau sujet par rapport à une nouvelle problématique.

J'ai un fichier (calendrier) présentant un mois par feuille.

Jusque là ces feuilles étaient nommées "Janvier", "Février", etc. et je n'avais pas de soucis pour les ranger avec ce code :

Sub Tri_des_onglets()
Dim i As Integer, Cnt As Integer
Dim Sh As Worksheet

Application.ScreenUpdating = False
Cnt = Application.Min(12, Sheets.Count)
For i = Cnt To 1 Step -1
    For Each Sh In ThisWorkbook.Worksheets
        If UCase(Sh.Name) = UCase(MonthName(i)) Then Sh.Move After:=Worksheets(1)
    Next Sh
Next i
End Sub

Cependant j'ai fini par tourner mon fichier différemment et les noms de feuilles sont désormais sous la forme "Janvier-19", "Janvier-20", "Février-21", etc. (le numéro correspondant bien sûr à l'année).

J'aimerais votre aide là dessus car je ne sais pas comment parvenir à les classer par année et par mois comme ceci :

Janvier-19 ; Février-19 ; [...] ; Janvier-20 ; Février-20 ; [...] ; Janvier-21 ; Février-21 ; [...]

De plus, tous les mois ne seront pas forcément créés donc impossible de fixer par exemple Janvier-19 sur la feuille 2, Février-19 sur la feuille 3 etc.

Je vous joins à ma demande un petit fichier pour imager tout ça, sur l'onglet Notice vous trouverez :

- un bouton pour désordonner les onglets (histoire d'éviter de faire ça à la main pour les tests )

- un bouton de tri

D'avance merci pour vos éventuelles réponses !

Bonjour

EDIT, testé non fonctionnel code ci-dessous de plus, je ne peux pas mettre de Ucase sur une année pffff grrr

Sub Tri_des_onglets()

Dim i, j, Cnt, Cnu  As Integer
Dim Sh, Sh1 As Worksheet
Dim annee19, annee20, annee21 As String

Application.ScreenUpdating = False
Cnu = Application.Min(36, Sheets.Count)
For j = Cnu To 1 Step -1
    For Each Sh1 In ThisWorkbook.Worksheets
        If UCase(Sh1.Name) = Year(j) Then Sh1.Move After:=Worksheets(1)
    Next Sh1
Next j

annee19 = "-19"
annee20 = "-20"
annee21 = "-21"

Application.ScreenUpdating = False
Cnt = Application.Min(36, Sheets.Count)
For i = Cnt To 1 Step -1
    For Each Sh In ThisWorkbook.Worksheets
        If UCase(Sh.Name) Like UCase(MonthName(i)) & "*" & (j) Then Sh.Move before:=Worksheets(1)
    Next Sh
Next i

ThisWorkbook.Worksheets("NOTICE").Activate

End Sub

crdlt,

André

EDIT, arf, non j'avais pas vu autant de feuilles oupss

Re,

merci à 'Benoit Marchand, mpfe

testé fonctionne

ci-joint,

crdlt,

André

Bonjour Andre13,

Effectivement j'étais en train de tester et tenter d'adaper le code fourni plus haut mais impossible à faire fonctionner correctement !

Je teste votre fichier et je vous fais un retour de suite

Andre13,

Ce code semble tourner assez bien !

Merci pour le partage, j'avais pourtant fouiller sur le net mais j'étais pas tombé là dessus il me semble.

A première vue, le tri se fait parfaitement sur la zone numérique (le 18 sont bien avant les 19 etc.), mais je crois qu'il y a un petit soucis pour classer les mois à l'intérieur d'une année (Avril-19 se place devant Janvier-19 par exemple).

Il va me falloir un peu de temps pour l'assimiler et l'adapter à mon fichier de base, mais c'est une excellente base !

Je vais tâcher de le décortiquer et de voir comment ça fonctionne.

Encore merci

Je laisse pour l'instant le sujet ouvert, je le fermerai après avoir bien retravaillé ce code

EDIT : En fait non ce n'est pas un soucis ahah le code classe en ABC, je crois qu'il me suffit d'y incorporer la fonction MonthName quelque part, je vais regarder

Re,

Pas de souci merci de ton retour

Salut SlimShady69,

Salut André,

For x = 2 To Sheets.Count
    For y = 2 To Sheets.Count - 1
        If CInt(Split(Sheets(y).Name, "-")(1)) > CInt(Split(Sheets(y + 1).Name, "-")(1)) Then Sheets(y).Move after:=Sheets(y + 1)
        If CInt(Split(Sheets(y).Name, "-")(1)) = CInt(Split(Sheets(y + 1).Name, "-")(1)) And _
            Month(CDate(Sheets(y).Name)) > Month(CDate(Sheets(y + 1).Name)) Then Sheets(y).Move after:=Sheets(y + 1)
    Next
Next

A+

re,

merci Curiculis57, je regarderai demain tête reposé

En tout cas bravo

Je vais essayer de voir le raisonnement de ce code.

Bonjour le forum

Curulis57, impressionnant

Je ne connaissais pas tout ça mais c'est très efficace ahah

Si je comprends bien, le code scinde le nom de l'onglet en deux et compare à l'onglet suivant pour le déplacer en fonction de la valeur année, puis mois.. Super astucieux !!!

Andre13, je garde quand même le fichier que tu m'as fourni sous le coude, je compte m'en servir sur autre chose

Merci à vous deux, toujours un régale de découvrir plein de choses ici !

Rechercher des sujets similaires à "tri onglets janvier fevrier etc"