j'ai peu utilisé le code ci dessous pour réaliser un tri de classeur en fonction du nom des onglets
Sub TriparnomOnglets() 'tri par nom onglet en tenant compte de la présence de la feuille "Synthèse"
Application.ScreenUpdating = False
Dim ShCount As Integer, i As Integer, j As Integer
ShCount = Sheets.Count
Sheets("Synthèse").Visible = False
For i = 1 To ShCount - 1
If Sheets(i).Visible Then
For j = i + 1 To ShCount
If UCase(Sheets(j).Name) < UCase(Sheets(i).Name) Then
Sheets(j).Move before:=Sheets(i)
End If
Next j
End If
Next i
Sheets("Synthèse").Visible = True
End Sub
Mais je souhaiterais aussi pouvoir réaliser le tri du classeur en fonction du contenu de la cellule "G4" de chaque onglet.
Option Explicit
Option Compare Text
Sub TriparnomOnglets() 'tri par nom onglet en tenant compte de la présence de la feuille "Synthèse"
Application.ScreenUpdating = False
Dim ShCount As Integer, i As Integer, j As Integer
ShCount = Sheets.Count
Sheets("Synthèse").Visible = False
For i = 1 To ShCount - 1
If Sheets(i).Visible Then
For j = i + 1 To ShCount
If Sheets(j).Range("g4") < Sheets(i).Range("g4") Then
Sheets(j).Move before:=Sheets(i)
End If
Next j
End If
Next i
Sheets("Synthèse").Visible = True
End Sub
Bonjour ( salut @cp4)
Si c'est pour trier les feuilles du classeur, le code ci-dessous devrait convenir :
VB:
Public Enum Sens
xlAscending = 1
xlDescending = 2
End Enum
Sub test()
TriOnglets ' xlDescending
With Sheets("Synthèse")
.Move before:=Sheets(1)
.Activate
End With
End Sub
Public Sub TriOnglets(Optional Sens As Sens = xlAscending)
For i = 1 To Sheets.Count
For j = 1 To Sheets.Count - 1
Select Case True
Case Sens = xlAscending And UCase$(Sheets(j).Name) > UCase$(Sheets(j + 1).Name): Sheets(j).Move after:=Sheets(j + 1)
Case Sens = xlDescending And UCase$(Sheets(j).Name) < UCase$(Sheets(j + 1).Name): Sheets(j).Move after:=Sheets(j + 1)
End Select
Next
Next
End Sub
Sinon, si c'est pour "trier" les données des feuilles ,
il faudrait un peu plus d'explications et surtout de données .
Est-ce un tri réel à faire ou une extraction filtrée à mettre sur la feuille synthèse ?
Bonjour ( salut @cp4)
Si c'est pour trier les feuilles du classeur, le code ci-dessous devrait convenir :
VB:
Public Enum Sens
xlAscending = 1
xlDescending = 2
End Enum
Sub test()
TriOnglets ' xlDescending
With Sheets("Synthèse")
.Move before:=Sheets(1)
.Activate
End With
End Sub
Public Sub TriOnglets(Optional Sens As Sens = xlAscending)
For i = 1 To Sheets.Count
For j = 1 To Sheets.Count - 1
Select Case True
Case Sens = xlAscending And UCase$(Sheets(j).Name) > UCase$(Sheets(j + 1).Name): Sheets(j).Move after:=Sheets(j + 1)
Case Sens = xlDescending And UCase$(Sheets(j).Name) < UCase$(Sheets(j + 1).Name): Sheets(j).Move after:=Sheets(j + 1)
End Select
Next
Next
End Sub
Sinon, si c'est pour "trier" les données des feuilles ,
il faudrait un peu plus d'explications et surtout de données .
Est-ce un tri réel à faire ou une extraction filtrée à mettre sur la feuille synthèse ?
C'est bien un tri de feuille que je souhaite, mais pas avec le nom des onglets, le tri doit se faire à partir d'une info située en G4 de chaque feuille.
C'est bien un tri de feuille que je souhaite, mais pas avec le nom des onglets, le tri doit se faire à partir d'une info située en G4 de chaque feuille.
C'est bien un tri de feuille que je souhaite, mais pas avec le nom des onglets, le tri doit se faire à partir d'une info située en G4 de chaque feuille.
Option Explicit
Option Compare Text
Sub TriparnomOnglets() 'tri par nom onglet en tenant compte de la présence de la feuille "Synthèse"
Application.ScreenUpdating = False
Dim ShCount As Integer, i As Integer, j As Integer
ShCount = Sheets.Count
Sheets("Synthèse").Visible = False
For i = 1 To ShCount - 1
If Sheets(i).Visible Then
For j = i + 1 To ShCount
If Sheets(j).Range("g4") < Sheets(i).Range("g4") Then
Sheets(j).Move before:=Sheets(i)
End If
Next j
End If
Next i
Sheets("Synthèse").Visible = True
End Sub
Option Explicit
Option Compare Text
Sub TriparnomOnglets() 'tri par nom onglet en tenant compte de la présence de la feuille "Synthèse"
Application.ScreenUpdating = False
Dim ShCount As Integer, i As Integer, j As Integer
ShCount = Sheets.Count
Sheets("Synthèse").Visible = False
For i = 1 To ShCount - 1
If Sheets(i).Visible Then
For j = i + 1 To ShCount
If Sheets(j).Range("g4") < Sheets(i).Range("g4") Then
Sheets(j).Move before:=Sheets(i)
End If
Next j
End If
Next i
Sheets("Synthèse").Visible = True
End Sub