Tri de feuilles dans un classeur [Résolu]

Signaler
Messages postés
9
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
30 mai 2015
-
 SeniorVb -
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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
Messages postés
9
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
30 mai 2015

Je reviens après avoir fait les recherches conseillées.
J'ai trouvé ce code qui marche parfaitement dans mon application :
Messages postés
9
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
30 mai 2015

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
>
Messages postés
9
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
30 mai 2015

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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).
>
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
Bravo.