formateur informatique

Trier les onglets des feuilles Excel dans l'ordre

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Trier les onglets des feuilles Excel dans l'ordre
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
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.

Bouton VBA Excel pour trier les feuilles du classeur

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,
Affecter une macro VBA Excel à une macro VBA

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,
Inscrire tous les noms de feuille du classeur Excel en 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,
Trier les noms des onglets du classeur Excel par ordre alphabétique

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,
Réorganiser automatiquement les feuilles du classeur Excel par le code VBA

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.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn