XL 2019 Tri onglets en fonction du contenu d'une cellule VBA

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

babie971

XLDnaute Nouveau
Bonjour 🙂,

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.


Merci d'avance de votre aide.
 
Solution
Bonjour @babie971 , @fanch55
VB:
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
Bonne journée.
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 ?
Bonjour fanch55,

Merci pour ton aide,

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.
 
D'accord, mais on trie quoi ? la donnée qui se trouve en G4 n'est pas un critère de tri ... !!!

Regarde la pièce jointe 1169894


En fait, j'aimerais que les onglets ne soient pas triés en fonction de leur nom mais de la cellule G4

Du coup par rapport à mon fichier exemple au lieu d'avoir AVION MAISON MOTO VELO VOITURE j'aimerais que le tri des onglets soit :
VOITURE (G4=DECAPOTABLE)
MOTO (G4=HARLEY)
AVION (G4=JETT)
MAISON (G4=VILLA)
VELO (G4=VTT)

grâce aux données situées en cellule G4 de chaque feuille

J'espère avoir été plus claire. @fanch55 @cp4 merci pour le temps que vous m'accordez

@cp4 j'avais rajouté un fichier suite à ta demande
 
Bonjour @babie971 , @fanch55
VB:
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
Bonne journée.
 
Bonjour @babie971 , @fanch55
VB:
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
Bonne journée.
Superrrrrr!!!!! c'est exactement ça Merci @cp4 !!!!😊
Bonne journée
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
521
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
46
Réponses
4
Affichages
335
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
482
Réponses
3
Affichages
572
Retour