Tri feuilles selon mois et année
Résolu/Fermé
thealchemyst
Messages postés
18
Date d'inscription
jeudi 11 septembre 2014
Statut
Membre
Dernière intervention
30 mars 2015
-
3 oct. 2014 à 10:19
thealchemyst Messages postés 18 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 30 mars 2015 - 6 oct. 2014 à 11:35
thealchemyst Messages postés 18 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 30 mars 2015 - 6 oct. 2014 à 11:35
A voir également:
- Tri feuilles selon mois et année
- Tri excel - Guide
- Comment faire un livret avec des feuilles a4 - Guide
- Fusionner feuilles excel - Guide
- Logiciel tri photo gratuit - Guide
3 réponses
PlacageGranby
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
Modifié par pijaku le 3/10/2014 à 15:34
Modifié par pijaku le 3/10/2014 à 15:34
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.
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 248
3 oct. 2014 à 23:48
3 oct. 2014 à 23:48
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
thealchemyst
Messages postés
18
Date d'inscription
jeudi 11 septembre 2014
Statut
Membre
Dernière intervention
30 mars 2015
6 oct. 2014 à 11:35
6 oct. 2014 à 11:35
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.