SeniorVb
Messages postés9Date d'inscriptionjeudi 3 avril 2008StatutMembreDernière intervention30 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 ?
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 !
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
SeniorVb
Messages postés9Date d'inscriptionjeudi 3 avril 2008StatutMembreDernière intervention30 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 :
SeniorVb
Messages postés9Date d'inscriptionjeudi 3 avril 2008StatutMembreDernière intervention30 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
SeniorVb
>
SeniorVb
Messages postés9Date d'inscriptionjeudi 3 avril 2008StatutMembreDernière intervention30 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.
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).
SeniorVb
>
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 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.
23 janv. 2015 à 10:44
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