Classer les onglets par ordre alphabétique

  • Initiateur de la discussion Scalpa
  • Date de début
S

Scalpa

Guest
Bonjour tout le monde !

C'est peut être simple mais je ne vois pas comment classer des onglets de feuilles dans un ordre alphabétique !

J'ai 25 feuilles avec des prénoms et je voudrais classer ces feuilles suivant l'ordre alphabétique des prénoms !

Si quelqu'un(e) a la solution merci à lui (elle)

Bonne journée @+

Scalpa
 
M

Minick

Guest
Salut,

Tu peux essayer avec ceci.
Je ne suis pas certain que c'est l'algo le plus rapide mais avec 25 feuilles c'est rapide.


Sub TrieOnglet()
Dim Cpt1 As Byte, Cpt2 As Byte, Ordre As Byte

Application.ScreenUpdating = False
Cpt1 = 1
Do
Ordre = 0
For Cpt2 = Cpt1 + 1 To Sheets.Count
If Sheets(Cpt1).Name > Sheets(Cpt2).Name Then Ordre = Cpt2
Next
If Ordre <> 0 Then Sheets(Cpt1).Move after:=Sheets(Ordre) Else Cpt1 = Cpt1 + 1
Loop While Cpt1 < Sheets.Count
Application.ScreenUpdating = True
End Sub


@+ Minick
 
C

Celeda

Guest
Bonjour,

Il eixste aussi une macro xla ListeFeuille avec tri qui permet d'avoir dans le clic droit de la souris le menu des feuilles et le tri, de Zon

dans la centrale de téléchargment tu vas chercher le fichier DOUBLONS MACROS et elle se trouve dans un zip à part entière.

Celeda
 
P

Pascal

Guest
Bonsoir à tous.
J'ai le même besoin de classer des onglets dans l'ordre alphabétique mais je suis en Excel 5.0 ! Y a-t-il toutefois une solution ?
Merci par avance et bonne soirée !
Pascal.
 
P

Pascal

Guest
Bonjour à tous.
Bonjour Celeda.
Premièrement merci pour ta réponse.
Non, je n'ai pas essayé la macro de Minick, comme c'est en anglais, j'ai des
doutes.
Je vais tout de même essayer ce matin !
Je te (vous) tiens au courant dans la matinée.
Pascal.
 
C

Celeda

Guest
Bonjour,

Pascal,

voilà dans le fichier ci-joint tu as la macro de Minick :

en faisant Alt F11, tu ouvres VBE et tu vois un module dans lequel se trouve recopié le code (vba ne parle qu'en anglais)

ici j'ai assigné la macro TrieOnglet à un bouton (par la barre dessin)


je suis sur XP alors j'espère que sur excel 5.0 cela fonctionnera

si tu veux recopier le code, il te suffit de te positionner sur le module et de le faire glisser dans ton document, toujours en étant dans la fenêtre VBE.

Celeda
 

Pièces jointes

  • TriOnglet.zip
    6.3 KB · Affichages: 95
E

EMG

Guest
Bonjour Scalpa, Minick, Pascal, Celeda

Je ne fait que passer

voilà dans le fichier ci-joint tu as la macro de Minick : et un second Module de trie des onglets

Pascal vas avoir le choix non

Gérard
 

Pièces jointes

  • TriOnglet_V2.zip
    11 KB · Affichages: 98
M

Minick

Guest
Salut Pascal, Celeda,Gérard,

J'espere que Pascal ne recherche pas une Macro Excel 4,
car je n'ai pas pratiqué depuis longtemps et je ne me souviens pas
qu'il était possible de manipuler les onglets.
Mais bon c'est loin tout ca et je n'ai pas beaucoup travaillé
avec les macro Excel 4 alors je me trompe peut etre.

Bon Dimanche à tous

@+ Minick
 
T

Ti

Guest
En complément à ce qui a été dit ci-dessus, voici une solution particulièrement simple de renvoyer la liste triée des feuilles d'un classeur. On utilise la propriété .Sorted d'un contrôle ListView, ainsi quelques lignes suffisent. Cette méthode est susceptible de fonctionner également pour toutes sortes de collections de chaînes de texte (les nombres sont triés comme du texte).

Noter qu'ici je me contente de renvoyer la liste des feuilles (qu'on peut alors reprendre dans un ListBox etc.), je ne les trie pas physiquement, mais l'adaptation serait également rapide à réaliser.

Function TriListeWs(Optional Wb As Workbook) As Collection
'Ti
Dim Liste As New ListView, Ws As Worksheet, Bcle%
If Wb Is Nothing Then Set Wb = ActiveWorkbook
With Liste
.Sorted = True
For Each Ws In Wb.Worksheets
.ListItems.Add Text:=Ws.Name
Next Ws
Set TriListeWs = New Collection
For Bcle = 1 To .ListItems.Count
TriListeWs.Add .ListItems(Bcle).Text
Next Bcle
End With
End Function

Sub ListeFeuilles()
Dim Feuilles As Collection
'renvoi de la liste des feuilles triées du classeur actif
Set Feuilles = TriListeWs

'pour lister les feuilles d'un classeur particulier, on pourrait
'appeler la fonction ainsi :
'Set Feuilles = TriListeWs(Workbooks("NomDuClasseur"))

'Feuilles est une collection, c'est à dire qu'on peut manipuler ses éléments
' dans une boucle For Each ... In et qu'on peut en connaître le
'nombre avec sa propriété Count.

'Dim Item
'For Each Item In Feuilles
' MsgBox Item
'Next Item

'ou alors :

'Dim Bcle%
'For Bcle = 1 To Feuilles.Count
' MsgBox Feuilles(Bcle)
'Next Bcle
End Sub

******************

une évolution de la méthode précédente permet de renvoyer tout aussi simplement une liste triée sans doublons. Pour simplifier cet exemple, j'utilise des nombres (qui ne seront pas triés correctement puisqu'ils sont considérés comme du texte) mais en situation réelle, on remplacera ces nombres aléatoires par des chaînes de texte.

Function TriListe(Col As Collection) As Collection
'Ti
Dim Liste As New ListView, Item, Bcle%
With Liste
.Sorted = True
For Each Item In Col
.ListItems.Add Text:=Item
Next Item
Set TriListe = New Collection
For Bcle = 1 To .ListItems.Count
TriListe.Add .ListItems(Bcle).Text
Next Bcle
End With
End Function

Sub ListeTriee()
Dim Feuilles As Collection, Bcle%, Nbre%
Set Feuilles = New Collection
On Error Resume Next
For Bcle = 1 To 5000
Nbre = Int((5000 * Rnd) + 1)
Feuilles.Add Nbre, CStr(Nbre)
Next Bcle

'pour vérifier combien de doublons ont été éliminés
MsgBox 5000 - Feuilles.Count & " doublons ont été éliminés sur 5000 valeurs"
Set Feuilles = TriListe(Feuilles)
End Sub
 
P

Pascal

Guest
Merci à tous pour vos contibutions.
Lorsque j'utilise la macro de Minick j'ai, à la ligne 'Dim Cpt1 as Byte' la boîte de dialogue 'Projet ou bibliothèque introuvable'.
Lorsque j'utilise la macro de EMG j'ai les mêmes messages après les lignes 'VbNewline' et 'LesFeuilles'.
J'ai l'impression de tourner en rond et surtout d'emm.... le monde un dimanche.
J'ai même ouvert la macor Minick, l'ai enregistrée sous format Ecxel 5.0/95 et cela ne fonctionne pas non plus !
Que fais-je ?
 
E

EMG

Guest
Re: Classer les onglets par ordre alphabétique(Pascal)

Re à tous et toutes

Pascal,

Si je me souvient bien la ligne de code vbNewline ne fonctionne pas sous Excel version 5, j’ai modifier le code avec le saut de ligne traditionnel « Chr(13) ». Fait un essai en copiant le code ci-dessous dans ton nouveau module et donne nous le résultat.


Public Const MG As String = "Bibliothèque Macros pour Excel"

Sub Trier_Feuilles()
If MsgBox("Voulez vous trier toutes les feuilles par :" & Chr(13) & _
Chr(13) & "Ordre alphabétique ?", vbQuestion + vbOKCancel, MG) = vbCancel Then Exit Sub
On Error GoTo Sortir
Application.ScreenUpdating = False
LesFeuilles = ActiveWorkbook.Worksheets.Count
For M = 1 To LesFeuilles
For n = M To LesFeuilles
If UCase(Worksheets(n).Name) < UCase(Worksheets(M).Name) Then
Worksheets(n).Move before:=Worksheets(M)
End If
Next n
Next M
Sortir:
Application.ScreenUpdating = True
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 789
Messages
2 092 125
Membres
105 226
dernier inscrit
Pepecham