Tri de feuilles dans un classeur

Résolu
SeniorVb Messages postés 9 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 30 mai 2015 - 23 janv. 2015 à 09:36
 SeniorVb - 24 janv. 2015 à 10:57
VBA Excel - Comment dans une macro, changer la disposition des feuilles d'un classeur. Par exemple les placer par ordre alphanumérique, alors qu'elles sont au départ dans un ordre aléatoire ?

Merci pour votre réponse.

3 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 23/01/2015 à 10:13
Bonjour,
Quelle est ta difficulté exacte ?
1) celle de trier des noms de feuilles (mettre toujours le plus grand en dernier ou toujours le plus petit en premier) ?
ou
2) celle de les déplacer (Worksheet.Move, méthode à lire dans ton aide VBA)

En te rappelant que les feuilles sont les éléments de la collection Worksheets et que leur nom est la valeur de leur propriété Name

Qu'as-tu au moins essayé de faire (code) ?

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
Bonjour ucfoutu et merci pour avoir "dégainé" si vite.
Tu m'as déjà dépanné un jour.

Aujourd'hui, j'ai besoin dans une macro VBA de trier des feuilles sur leur nom (alphanumérique), et de les déplacer selon le résultat du tri dans le classeur. Donc le 1) et le 2) de ta réponse.

Pour l'instant je sais compter les feuilles (Count) ainsi que connaître leur numéro (Index), peut-être leur nom (Name à la place d'Index ?).

Pour le reste, je suis sec. Je te précise que j'ai 80 ans (SeniorVb) et que mes facultés de compéhension se sont pas mal amenuisées !

L'application sur laquelle je travaille n'a aucun degré d'urgence, . . . heureusement !

Encore merci SeniorVb
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 23/01/2015 à 10:57
L'âge n'a rien à voir dans cette affaire ! Tu es âgé ? Et alors ?
Si cela peut te rassurer, tu n'es pas le seul dans ce cas ... et mon âge ne me gêne pas !
Je dirais même que tu devrais faire comme moi : exercer tes méninges le plus possible.
Ce que je vais te conduire à faire, donc.
1) ce ne sont pas les codes de tri de tableaux dynamiques ou d'arrays qui manquent sur ce forum. Tu en trouveras même dans les snippets qui y sont déposés.
2) il te suffit dès lors de commencer par mettre dans un tableau dynamique les noms de tes feuilles puis de le trier.
Pour mettre dans un tableau dynamique ===>>> facile ===>>
ReDim tabl(Worksheets.Count)
For i = 1 To Worksheets.Count
tabl(i - 1) = Worksheets(i).Name
Next

Je te laisse donc maintenant choisir (parmi les snippets) un tri et l'appliquer à ce tableau.
Reviens lorsque tu auras passé cette première étape/.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
SeniorVb Messages postés 9 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 30 mai 2015
23 janv. 2015 à 18:11
Je reviens après avoir fait les recherches conseillées.
J'ai trouvé ce code qui marche parfaitement dans mon application :
0
SeniorVb Messages postés 9 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 30 mai 2015
23 janv. 2015 à 18:13
Fausse manip dans mon précédent message.

Voici le code en question :

Sub Tri_feuilles()
Dim X As Variant
Dim I As Variant
For Each X In ActiveWorkbook.Sheets
For I = 2 To ActiveWorkbook.Sheets.Count
If Sheets(I-1).Name>Sheets(I).Name Then
Sheets(I-1).Move After:=Sheets(I)
End If
Next I
Next X
End Sub

Il trie les onglets en un clin d'oeil et sans erreur.

Merci pour ton aide

SeniorVb
0
SeniorVb > SeniorVb Messages postés 9 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 30 mai 2015
23 janv. 2015 à 21:10
Ce code déplace les feuilles de mon classeur de façon à ce qu'elles se présentent en ordre alphanumérique de gauche à droite.

Autrement dit, les onglets des feuilles sont maintenant placés en ordre alphanumériques en partant de la gauche.

C'est grâce à toi que j'ai trouvé çà ! Je ne savais pas où chercher.

Merci. SeniorVB
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 23/01/2015 à 22:29
Ne sois pas modeste. Tu t'es fort bien débrouillé et a mérité plus que mon estime.
On va juste ajouter une petite touche (pas grand-chose) à ton code.
La raison ? ===>>
Il se trouve que le tri compare des chaînes alphabétiques et que la comparaison se fait de gauche à droite, par code des caractères alphanumériques. Or, par exemple, "a" est > "Z", puisque la valeur ascii de "a" est 97 alors que celle de "Z" est 90. Ainsi, donc, "anatole" viendrait, dans l'ordre ascendant, après "Béatrice" (et je devine que tu veux l'éviter).
Solution : comparer les deux chaines en majuscules ===>>
remplacer donc :
If Sheets(I-1).Name>Sheets(I).Name Then 

par
If Ucase(Sheets(I-1).Name) > Ucase(Sheets(I).Name) Then 

Attention également aux noms se terminant par des chiffres. Pour les mêmes raisons que celles évoquées au-dessus, par exemple : toto4 est plus grand que toto231
Pour éviter cela, prendre la précaution de nommer les feuilles éventuellement concernées ainsi :
toto004 (au lieu de toto4)
et toto231 (qui, lui, est plus grand que toto004
Voilà, ami. Je te souhaite une excellente nuit (tu l'as méritée).
0
SeniorVb > ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018
24 janv. 2015 à 10:57
Tes explications sur les précautions à prendre pour le tri vont beaucoup plus loin que ma question initiale, et je t'en remercie.
J'ai inséré ton texte dans ma doc personnelle à la lettre T (comme Tri).
Du coup, entre autres, j'ai appris le mot clé 'Ucase' pour passer en majuscule.

J'en ferai profiter des copains qui "pianotent" un peu, comme moi, sur Excel VBA. Nous formons un groupe de développeurs qu'on pourrait appeler "les pieds nickelés du VBA" !
Nous réalisons, bénévolement bien sûr, de petites applications pour un club omnisport.

J'espère que j'ai bien clôturé notre discussion en disant que le problème est résolu. Je ne suis pas à l'aise avec les procédures de Codes-sources, faute peut-être de ne pas y recourir souvent.

Merci, SeniorVb
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 janv. 2015 à 18:27
Bravo.
0
Rejoignez-nous