Trier les onglets d'un classeur excel - Logiciels - Windows & Software
Marsh Posté le 25-09-2007 à 17:54:26
Est-ce que tu les crées dans l'ordre (auquel cas par défaut il te les place dans l'ordre alpha inverse...) ?
Marsh Posté le 25-09-2007 à 19:41:08
Non, on me les demande au fur et à mesure dans n'importe quel ordre.
(alphabétique et numérique) et dans un nombre variable...
Et comme la macro génère automatiquement la feuille qui est unique, je ne peux pas relancer systématiquement toutes les feuilles
Marsh Posté le 26-09-2007 à 13:43:48
Dans ce cas il ne te reste plus qu'à utiliser un genre de tri à bulle, et à placer la feuille au bon endroit dès la création...
Marsh Posté le 01-10-2007 à 08:16:57
Idoine a écrit : Dans ce cas il ne te reste plus qu'à utiliser un genre de tri à bulle, et à placer la feuille au bon endroit dès la création... |
Bonjour,
Pas nécessairement.Petitfilet, tout dépend de ton nombre de feuilles.Je te propose deux solutions qui ne sont pas forcément idéales.S'il y en a beaucoup, elles te permettront de gagner néanmoinsdu temps.
1ère solution
Tu dois récupérer le nom de toutes feuilles. Pour cela, tu vas utiliser l'enregistreur de macros. Tu vas dans Outils/Macro/Nouvelle macro. Un nom par défaut apparaît macro 1.Tu peux le changer sous réserve de ne pas mettre d'espace ou de caractères spéciaux mais comme ça n'a pas vraiment d'importance, il vaut mieux garder le nom par défaut. Ensuite, tu te positionnes sur le nom de la feuille active. Tu ouvres le menu contextuel de la souris par un click droit et tu choisis Sélectionner toutes les feuilles.
Tu retournes dans Outils/Macro et tu sélectionnes Arrêter l'enregistrement. Une nouvelle fois, tu vas dans Outils/Macros et tu ouvres la macro en question, soit Macro 1 en double-cliquant sur Pas à pas détaillé. Une fenêtre s'ouvre et fait apparaître un code composé d'instruction du type
Sub Macro1()
Des commentaires en vert et commençant par une apostrophe:
Macro enregistrée le par..
En dessous, tu dois voir un code du type Sheets(Array"nom de chacune des feuilles" )
Tu copies uniquement les noms des feuilles et tu fermes la fenêtre de code. Tu retombes sur la feuille active et tu colles sur un document word. Tu supprimes les " et , par Ctrl+H Rechercher " Remplacer par rien. Tu tries cette liste et tu l'imprimes.Remarque, je pense qu'il existe un moyen plus simple de récupérer le nom des feuilles mais je n'ai pas eu le temps de chercher.
Tu as maintenant le classement par ordre alphabétique des noms. Tu vas pouvoir maintenant classer tes feuilles selon cette liste.
Tu as deux possibilités mais il faut savoir qu’il faut toujours partir de l'avant dernier mot de la liste. Je m'explique en prenant un exemple. On a la liste des feuilles suivantes telle qu'elles doivent apparaître par ordre alphabétique: article, assaut, boîte, canette, dromadaire….tarte,xérès, zanzibar. Mais tes feuilles, elles, sont en désordre par exemple canette, assaut, tarte, article, boîte, zanzibar, xérès, tarte. Tu te positionnes sur l'avant dernière liste qui est xérès et tu la mets avant zanzibar. Ensuite, tu déplaces tarte qui est devenu avant dernier sur la liste avant xérès et ainsi de suite.
La deuxième possibilité passe par la macro suivante mais elle n'est pas parfaite ce qui te contraint à taper les mots de la liste toujours selon de mon principe selon lequel on part de l'avant dernier.
Sub ClasserFeuillesParOrdreAlphabetique()
For i=1 To nb d'onglets ou de feuilles-1
'S'il y a 10 onglets
'For i=1 To 9
n = InputBox("Entrer nom feuille" )
m = InputBox("Entrer nom feuille" )
Sheets(n).Move Before:=Sheets(m)
Next i
End Sub
Tu lances la macro, une fenêtre s'ouvre et te demande de saisir un nom de feuille à déplacer: tu tapes xérès, soit l'avant dernier mot. La fenêtre te demande de saisir un nouveau nom: tu tapes zanzibar, soit le dernier mot. Cette fenêtre te demandera de saisir en fait tous les noms. Tu commences toujours par l'avant dernier. Je sais que ce n'est pas forcément la super solution mais elle fonctionne.
2ème solution
Tu récupères toujours la liste des noms de feuilles.
Voir disquette fichier format excel
En A1, tu colles Sheets(" et tu recopies sur la colonne
En B1, tu colles la liste des noms par ordre alphabétique mais par ordre décroissant en partant de l'avant dernier mot
En C1, tu colles " ).Move Before:=Sheets("
En E1, tu colles la liste des noms par ordre alphabétique mais par ordre décroissant en partant bien du dernier mot
En F1, tu colles " )
En G1, tu concatènes A1&B1&C1&E1&F1
Tu copies la formule sur la colonne
Tu copies ta plage et tu la colles en dehors et tu colles en passant par le menu Edition/Collage spécial et en cochant l'option Valeurs.
Tu copies cette liste de valeur et tu la colles dans une macro
Sheets("avant dernier mot).Move Before:=Sheets("dernier mot" ) Sheets("avant dernier mot" ).Move Before:=Sheets("dernier mot" )
Sheets("avant dernier mot" ).Move Before:=Sheets("dernier mot" ) Sheets("avant dernier mot" ).Move Before:=Sheets("dernier mot" )
Sheets("avant dernier mot" ).Move Before:=Sheets("dernier mot" ) Sheets("avant dernier mot" ).Move Before:=Sheets("dernier mot" )
Sheets("avant dernier mot" ).Move Before:=Sheets("dernier mot" )
Sheets("avant dernier mot" ).Move Before:=Sheets("dernier mot" )
Sheets("avant dernier mot" ).Move Before:=Sheets("dernier mot" )
Marsh Posté le 25-09-2007 à 17:49:18
Bonjour
Avec une macro, je crée des onglets à la demande sous un nom du type AB0000.
(A et B représentant des lettres et les 0 des chiffres)
Par contre, je n'arrive pas à les trier par ordre alphabétique.
Y aurait-il un moyen?
Merci