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

XL 2016 macro tri alphabétique des onglets

halecs93

XLDnaute Impliqué
Bonjour à toutes et à tous,

Avec les nombreux conseils glanés sur le forum, j'ai poursuivi mon outil planning.

J'ai ajouté une macro (tri_onglet) qui permet de classer par ordre alphabétique les onglets du classeur en omettant ceux nommés "modele" et "PLANNING". Curieusement, j'ai un onglet "Élodie A" qui refuse de se classer et reste toujours en dernier.

Sans doute mon code est-il perfectible ?

Merci beaucoup.
 

Pièces jointes

  • PLANNING - exceldownloads.xlsm
    557.7 KB · Affichages: 13

halecs93

XLDnaute Impliqué
Bonjour,
Rajouter en début de votre module de tri :
Option Compare Text
Bonjour et merci.

J'ai ajouté en début de module, mais j'obtiens l'erreur suivante :

Erreur de compilation Instruction incorrecte dans une procédure


VB:
Sub tri_onglet()
    Option Compare Text
    Dim i As Integer, j As Integer, num As Integer, nom As String
    Dim modeleIndex As Integer, planningIndex As Integer
    modeleIndex = -1
    planningIndex = -1
  
    ' Tri des onglets par ordre alphabétique
    For i = 2 To Sheets.count
        For j = i + 1 To Sheets.count
            If UCase(Sheets(j).Name) < UCase(Sheets(i).Name) Then
                Sheets(j).Move before:=Sheets(i)
            End If
        Next j
    Next i
  
    ' Trouver les index de "modele" et "PLANNING"
    For i = 1 To Sheets.count
        If Sheets(i).Name = "modele" Then
            modeleIndex = i
        ElseIf Sheets(i).Name = "PLANNING" Then
            planningIndex = i
        End If
    Next i
  
    ' Déplacer "modele" au début
    If modeleIndex > 0 Then
        Sheets(modeleIndex).Move before:=Sheets(1)
    End If
  
    ' Déplacer "PLANNING" après "modele"
    If planningIndex > 0 Then
        Sheets(planningIndex).Move after:=Sheets(1)
    End If
End Sub
 

Franc58

XLDnaute Occasionnel
Salut, voici ma proposition:

VB:
Option Compare Text

Sub TrierOnglets()
    Dim i As Integer
    Dim j As Integer
    Dim iMin As Integer
    
    Application.ScreenUpdating = False

    ' Déplacer les onglets "modele" et "PLANNING" en premier
    Sheets("modele").Move Before:=Sheets(1)
    Sheets("PLANNING").Move After:=Sheets("modele")

    ' Trier les autres onglets
    For i = 3 To Sheets.count
        iMin = i
        For j = i + 1 To Sheets.count
            If Sheets(j).Name < Sheets(iMin).Name Then
                iMin = j
            End If
        Next j

        If i <> iMin Then
            Sheets(iMin).Move Before:=Sheets(i)
        End If
    Next i
    
    Application.ScreenUpdating = True
    
End Sub
 

halecs93

XLDnaute Impliqué
Merci également
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…