Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :
Trier les onglets
Nous avions déjà développé une solution pour
trier alphabétiquement les feuilles des
classeurs Excel . Ici, nous proposons de résoudre le même cas mais avec une méthode différente et plutôt originale. L'idée est de prélever les noms, de les coller sur une feuille et de trier la plage. Nous n'aurons plus qu'à récupérer ces noms ainsi réorganisés automatiquement pour
changer l'ordre des onglets , par le
code VBA Excel .
Classeur Excel à télécharger
Pour ce nouveau développement, nous suggérons de débuter à partir d'un
classeur Excel constitué de
quelques feuilles .
Télécharger le classeur reorganiser-les-feuilles.xlsm en cliquant sur ce lien ,
Cliquer droit sur le fichier réceptionné,
En bas du menu contextuel, choisir la rubrique Propriétés ,
En bas de la boîte de dialogue, cocher la case Débloquer et valider par Ok,
Puis, double cliquer sur le fichier pour l'ouvrir dans Excel ,
Nous débouchons sur la première feuille du classeur. Elle est nommée
Accueil . Elle offre un gros bouton pour
organiser le tri .
Précisément, en consultant les onglets en bas de la fenêtre Excel, vous notez la présence d'
autres feuilles . Et effectivement, elles ne sont pas du tout rangées par ordre alphabétique sur les noms.
Le bouton et sa procédure
C'est donc un
clic sur le bouton qui doit
trier les onglets du classeur . Une fois encore, si vous choisissiez d'enregistrer ce code dans le
modèle Excel , le
personal.xlsb , il serait disponible pour
toutes les utilisations d'Excel . Il serait alors judicieux de l'associer à un
bouton à greffer dans l'un des
rubans . Nous allons le voir, une
procédure est déjà associée à ce
bouton . Elle existe dans un module indépendant mais bien sûr, elle est encore vierge de
code VBA .
Cliquer avec le bouton droit de la souris sur le bouton,
Dans le menu contextuel, choisir la commande Affecter une macro ,
Dans la boîte de dialogue qui suit, cliquer sur le bouton Modifier ,
Nous basculons ainsi dans l'
éditeur VBA Excel , entre les bornes de la
procédure événementielle trierFeuilles .
Les variables
Quelques variables sont nécessaires, notamment pour parcourir les feuilles et maîtriser leurs noms.
Dans les bornes de la procédure, ajouter les déclarations suivantes :
...
Dim i As Byte: Dim nbF As Byte
Dim laFeuille As Worksheet: Dim nomF As String
...
Nous déclarons les deux premières variables comme des
entiers courts (Byte). Nous utiliserons la première comme
compteur de boucle . Nous exploiterons la seconde pour connaître le
nombre de feuilles . C'est elle qui déterminera donc la
borne de fin de cette
boucle . Grâce à l'
objet laFeuille , nous piloterons la
feuille Accueil pour y inscrire les
noms à trier . Puis, nous manipulerons les
onglets reconnus par leurs noms, grâce à la
variable nomF que nous typons comme un texte (String).
Nous pouvons maintenant pointer sur la
feuille active et prélever l'information sur le
nombre d'onglets qui composent ce classeur.
Après les variables, ajouter les deux affectations suivantes :
...
Set laFeuille = ActiveSheet
nbF = Sheets.Count
...
Grâce à l'
objet ActiveSheet , nous initialisons (Set) notre
objet laFeuille sur la
feuille active du classeur. Au moment du clic sur le bouton, il s'agira nécessairement de la
feuille nommée
Accueil . Puis, grâce à la
propriété Count de la
collection Sheets , nous enregistrons l'indication sur le
nombre de feuilles dans la
variable nbF .
Récolter les noms des feuilles
Maintenant que nous connaissons leur nombre, nous pouvons
parcourir les feuilles de ce classeur dans le but de récolter leurs noms et de les inscrire dans des cellules de la feuille active, les uns en dessous des autres. C'est ainsi que nous pourrons organiser plus facilement un
tri sur ces derniers.
A la suite du code, ajouter les instructions VBA suivantes :
...
For i = 1 To nbF
laFeuille.Cells(i, 1) = Sheets(i).Name
Next i
...
Nous enclenchons une
boucle For Next pour
parcourir les feuilles de la première (1) à la dernière (nbF). Sur la
feuille active (laFeuille), pour la ligne en cours (i) et en première colonne (1), nous inscrivons le nom (Name) de la feuille en cours d'analyse (Sheets(i)).
A ce stade et à titre de confirmation, nous pouvons déjà réaliser un essai du code VBA que nous venons d'accomplir.
Enregistrer les modifications (CTRL + S) et basculer sur a feuille Excel (ALT + Tab),
Cliquer dans l'une ou l'autre cellule pour désactiver la sélection du bouton,
Puis, cliquer justement sur ce bouton pour déclencher le code VBA ,
Comme vous pouvez l'apprécier, ce sont bien
tous les noms des onglets que nous récupérons et inscrivons dans des cellules indépendantes de la feuille. Pour l'instant l'ordre est naturellement conservé.
Trier les noms des onglets
Grâce à un
code VBA que nous pourrions facilement obtenir par une
macro automatique , nous allons maintenant
organiser ces noms dans l'
ordre alphabétique croissant . Et nous l'avions déjà appris, c'est la
méthode Sort appliquée sur une
plage qui permet d'
organiser les données d'un tableau .
Toujours à la suite du code, ajouter l'instruction VBA suivante :
...
laFeuille.Range("A1:A" & nbF).Sort Range("A1")
...
En partant de la
cellule A1 pour rejoindre la dernière inscrite (:A" & nbF) sur la feuille active (laFeuille), nous ordonnons la
réorganisation des données , soit des
noms des feuilles . Forcément, la
clé de tri porte sur l'unique colonne de cette plage (Key1:=Range("A1")).
Enregistrer les modifications (CTRL + S) et basculer sur la feuille Excel (ALT + Tab),
Puis, cliquer de nouveau sur le bouton,
Les noms des feuilles sont toujours récupérés mais cette fois-ci, ils sont triés dans l'enchaînement.
Parcourir tous les noms et trier
Puisque les
noms des onglets sont désormais explicitement énumérés et triés sur la feuille, nous pouvons les parcourir tous, grâce à une
nouvelle boucle , dans le but de
réorganiser les feuilles en respectant ce
nouvel ordre .
Toujours à la suite du code VBA, créer la nouvelle boucle suivante :
...
For i = 1 To nbF
nomF = laFeuille.Cells(i, 1).Value
Sheets(nomF).Move Sheets(i)
Next i
...
Nous parcourons de nouveau tous les noms des feuilles (For i = 1 To nbF), mais cette fois dans la plage de cellules et donc dans l'ordre. Et pour chacune d'entre elles, nous les ramenons sur la position logique (Before) qu'elles doivent occuper.
Enregistrer les modifications (CTRL + S) et basculer sur la feuille Excel (ALT + Tab),
Puis, comme précédemment, cliquer de nouveau sur le bouton,
Comme vous pouvez le voir, toutes les feuilles du classeur sont parfaitement réorganisées dans l'
ordre alphabétique croisant sur les noms. Certes, le focus est laissé sur la dernière feuille. Mais pour revenir automatiquement sur celle d'origine, il suffirait de l'activer par le
code VBA , après la dernière boucle, comme suit :
laFeuille.Activate .