Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

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.

fanch55

XLDnaute Barbatruc
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 ?
 
Réactions: cp4

babie971

XLDnaute Nouveau
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.
 

babie971

XLDnaute Nouveau
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
 

cp4

XLDnaute Barbatruc
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.
 

babie971

XLDnaute Nouveau
Superrrrrr!!!!! c'est exactement ça Merci @cp4 !!!!
Bonne journée
 
Dernière édition:

Discussions similaires

Réponses
4
Affichages
450
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…