Tri feuilles selon mois et année
Résolu
thealchemyst
Messages postés
18
Date d'inscription
Statut
Membre
Dernière intervention
-
thealchemyst Messages postés 18 Date d'inscription Statut Membre Dernière intervention -
thealchemyst Messages postés 18 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Tri feuilles selon mois et année
- Comment faire un livret avec des feuilles a4 - Guide
- Comment faire un tri personnalisé sur excel - Guide
- Logiciel tri photo - Guide
- Bruler des feuilles de laurier - Guide
- Fusionner feuilles excel - Guide
3 réponses
Bonjour,
Je te joint l'algo que j'ai pour trier mes onglets.
Si tu as une feuille formulaire que tu veux garder en premier, tu peux toujours tricher un peu et la renommer _Formulaire le underscore va faire en sorte qu'elle sera toujours première.
Mon exemple c'est un sort alphabétique seulement, mais j'imagine que tu peux le bidouiller un peu. Si ca ne fonctionne pas, je regarderai ca plus tard.
Je te joint l'algo que j'ai pour trier mes onglets.
Sub SortWorksheets() '//////////////////////////////////////// '// Algorithme de tri pour les onglets // '//////////////////////////////////////// Dim N As Integer Dim M As Integer Dim FirstWSToSort As Integer Dim LastWSToSort As Integer Dim SortDescending As Boolean SortDescending = False If ActiveWindow.SelectedSheets.Count = 1 Then 'Change the 1 to the worksheet you want sorted first FirstWSToSort = 1 LastWSToSort = Worksheets.Count Else With ActiveWindow.SelectedSheets For N = 2 To .Count If .Item(N - 1).Index <> .Item(N).Index - 1 Then MsgBox "You cannot sort non-adjacent sheets" Exit Sub End If Next N FirstWSToSort = .Item(1).Index LastWSToSort = .Item(.Count).Index End With End If For M = FirstWSToSort To LastWSToSort For N = M To LastWSToSort If SortDescending = True Then If UCase(Worksheets(N).Name) > UCase(Worksheets(M).Name) Then Worksheets(N).Move Before:=Worksheets(M) End If Else If UCase(Worksheets(N).Name) < UCase(Worksheets(M).Name) Then Worksheets(N).Move Before:=Worksheets(M) End If End If Next N Next M End Sub
Si tu as une feuille formulaire que tu veux garder en premier, tu peux toujours tricher un peu et la renommer _Formulaire le underscore va faire en sorte qu'elle sera toujours première.
Mon exemple c'est un sort alphabétique seulement, mais j'imagine que tu peux le bidouiller un peu. Si ca ne fonctionne pas, je regarderai ca plus tard.
Bonjour,
il faudra que tu ajoutes un espace entre le mois et l'année :
eric
il faudra que tu ajoutes un espace entre le mois et l'année :
Sub triOngletsDate() 'tri par date sur nom d'onglet Dim sh As Worksheet Dim nom(), tmp(2), cpt As Long, fini As Boolean, depl As Boolean ReDim nom(1 To 2, 1 To 1) For Each sh In Worksheets ' recup onglets date If IsDate(sh.Name) Then cpt = cpt + 1 ReDim Preserve nom(1 To 2, 1 To cpt) nom(1, cpt) = sh.Name nom(2, cpt) = CDate(sh.Name) End If Next sh ' tri à bulle Do fini = True For cpt = 2 To UBound(nom, 2) If nom(2, cpt) < nom(2, cpt - 1) Then tmp(1) = nom(1, cpt): tmp(2) = nom(2, cpt) nom(1, cpt) = nom(1, cpt - 1): nom(2, cpt) = nom(2, cpt - 1) nom(1, cpt - 1) = tmp(1): nom(2, cpt - 1) = tmp(2) fini = False depl = True End If Next cpt Loop Until fini ' déplacer If depl Then Application.ScreenUpdating = False For cpt = 1 To UBound(nom, 2) Sheets(nom(1, cpt)).Move After:=Sheets(Sheets.Count) Next cpt End If End Sub
eric
Merci PlacageGranby et Eriiic pour votre intérêt à mon problème.
J'ai testé les deux codes et les ils marchent parfaitement, mais celui d'Eriiic correspond mieux à ce que je recherchais. J'ai modifié mon code de base en ajoutant à Worksheets(1).Name = repmois & " " & repannee et ça marche du tonnerre :).
Merci encore pour votre aide, je pense que je vais réutiliser ton code PlacageGranby et le bidouiller, je pourrai l'utiliser pour d'autres projets, merci.
J'ai testé les deux codes et les ils marchent parfaitement, mais celui d'Eriiic correspond mieux à ce que je recherchais. J'ai modifié mon code de base en ajoutant à Worksheets(1).Name = repmois & " " & repannee et ça marche du tonnerre :).
Merci encore pour votre aide, je pense que je vais réutiliser ton code PlacageGranby et le bidouiller, je pourrai l'utiliser pour d'autres projets, merci.