Tri feuilles selon mois et année
Résolu
thealchemyst
Messages postés
18
Statut
Membre
-
thealchemyst Messages postés 18 Statut Membre -
thealchemyst Messages postés 18 Statut Membre -
Bonjour,
je voulais savoir s'il était possible de trier des feuilles selon le mois et l'année.
En faite, je demande à l'utilisateur, par InputBox d'entrer le nom du mois correspondant et une autre, l'année (Worksheets(1).Name = repmois & repannee).
Ce qui donne "février2013, janvier2014, avril2012" (les données à comparer sont sur trois années).
J'ai bien ce code pour le tri des mois :
Mais je ne trouve pas l'équivalent pour les trier de cette façon "avril2012, février2013, janvier2014.
Cela est-il possible ou dois-je m'y prendre différemment ?
D'avance, merci de vos réponses.
je voulais savoir s'il était possible de trier des feuilles selon le mois et l'année.
En faite, je demande à l'utilisateur, par InputBox d'entrer le nom du mois correspondant et une autre, l'année (Worksheets(1).Name = repmois & repannee).
Ce qui donne "février2013, janvier2014, avril2012" (les données à comparer sont sur trois années).
J'ai bien ce code pour le tri des mois :
Sub trionglet()
'Tri feuilles selon mois
y = 2 'la première feuille est mon formulaire
For x = 1 To 12 'pour les trois ans 1 To 36
For Each fl In Worksheets
If LCase(fl.Name) = LCase(MonthName(x)) Then
fl.Move before:=Sheets(y): y = y + 1
End If
Next fl
If y = Sheets.Count Then Exit For
Next x
End Sub
Mais je ne trouve pas l'équivalent pour les trier de cette façon "avril2012, février2013, janvier2014.
Cela est-il possible ou dois-je m'y prendre différemment ?
D'avance, merci de vos réponses.
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
- Youtube premium 2 mois gratuit - Accueil - TV & Vidéo
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.