Tri onglet spécial
Résolu
nihcoc
Messages postés
194
Statut
Membre
-
nihcoc Messages postés 194 Statut Membre -
nihcoc Messages postés 194 Statut Membre -
Bonjour,
Peut-on par vba faire un tri des onglets de manière a ce que l'onglet 23 se retouve a la fin quand vous avez les onglets
Feuil1
Feuil2
feuil3
Feuil23
. dans les macros que j'ai trouvé la feuille 23 se trouve après tri entre la Feuil2 et la Feuil3
Merci d'avance a tous pour votre travail.
j'ai excel 2000
Peut-on par vba faire un tri des onglets de manière a ce que l'onglet 23 se retouve a la fin quand vous avez les onglets
Feuil1
Feuil2
feuil3
Feuil23
. dans les macros que j'ai trouvé la feuille 23 se trouve après tri entre la Feuil2 et la Feuil3
Merci d'avance a tous pour votre travail.
j'ai excel 2000
A voir également:
- Tri onglet spécial
- Caractere special - Guide
- Comment faire un tri personnalisé sur excel - Guide
- Dossier spécial - Guide
- Rouvrir onglet fermé chrome - Guide
- Logiciel tri photo - Guide
3 réponses
Bonjour,
Oui, parce que dans le code que vous avez, le tri doit se faire sur l'index feuille et non sur le nom de la feuille
Ou c'est normal car pour un classement "correct", il faut feuil01 pour feuil1 etc
Mais si vous ne voulez pas changer le nom des feuilles il faut modifier le code
Oui, parce que dans le code que vous avez, le tri doit se faire sur l'index feuille et non sur le nom de la feuille
Ou c'est normal car pour un classement "correct", il faut feuil01 pour feuil1 etc
Mais si vous ne voulez pas changer le nom des feuilles il faut modifier le code
Merci pour la réponse mais pourriez vous me renvoyer le code modifié
End Sub
Sub TriNomsOnglets()
Dim I As Integer, J As Integer
For I = 1 To Sheets.Count
For J = 1 To I - 1
If UCase(Sheets(I).Name) < UCase(Sheets(J).Name) Then
Sheets(I).Move Before:=Sheets(J)
Exit For
End If
Next J
Next I
End Sub
merci pour tout.
End Sub
Sub TriNomsOnglets()
Dim I As Integer, J As Integer
For I = 1 To Sheets.Count
For J = 1 To I - 1
If UCase(Sheets(I).Name) < UCase(Sheets(J).Name) Then
Sheets(I).Move Before:=Sheets(J)
Exit For
End If
Next J
Next I
End Sub
merci pour tout.
Re,
Oui, mais pas de melange. Fait pour les deux types de nom: Feuil1 ou 1
Oui, mais pas de melange. Fait pour les deux types de nom: Feuil1 ou 1
Sub Tri_onglet_croissant()
Dim Liste_N() As Long, NbO As Long, N As Long
Dim Flg_F As Boolean, NmF As String
NbO = Worksheets.Count
ReDim Liste_N(1 To NbO)
'Feuil ou pas dans le nom d'onglet
If InStr(Worksheets(1).Name, "Feuil") > 0 Then
Flg_F = True
NmF = "Feuil"
Else
Flg_F = False
NmF = ""
End If
'mise en tableau des noms d'onglet
For N = 1 To NbO
If Flg_F Then
Liste_N(N) = CLng(Split(Worksheets(N).Name, "Feuil")(1))
Else
Liste_N(N) = CLng(Worksheets(N).Name)
End If
Next N
Call ShellSort(Liste_N(), LBound(Liste_N), UBound(Liste_N)) 'Proc récursive tri croissant
'tristribution des onglets par nom numero croissant
For N = 1 To NbO
Worksheets(NmF & Liste_N(N)).Move After:=Sheets(Sheets.Count)
Next N
End Sub
'--------------------------------
' Tri de Shell - Shell Sort
'--------------------------------
Public Sub ShellSort(t() As Long, Optional ByVal loBound As Long = -1, Optional ByVal upBound As Long = -1)
Dim i As Long, j As Long, h As Long, v As Long
If loBound = -1 Then loBound = LBound(t())
If upBound = -1 Then upBound = UBound(t())
h = loBound
Do: h = 3 * h + 1:
Loop Until h > upBound
Do
h = h / 3
For i = h + 1 To upBound
v = t(i): j = i
Do While t(j - h) > v
t(j) = t(j - h): j = j - h
If j <= h Then Exit Do
Loop
t(j) = v
Next i
Loop Until h = loBound
End Sub