formateur informatique

Trier alphabétiquement les feuilles des classeurs Excel

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Trier alphabétiquement les feuilles des classeurs Excel
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 automatiquement les feuilles

Le VBA Excel autorise toutes les fantaisies et toutes les prouesses. Avec cette nouvelle astuce, nous allons l'exploiter pour réorganiser automatiquement et alphabétiquement les feuilles des classeurs.

Classeur Excel à télécharger
Pour développer ce code VBA, nous proposons d'appuyer les travaux sur un classeur hébergeant des feuilles quelque peu dispersées. En consultant la barre de navigation en bas de la fenêtre Excel, vous constatez que ce classeur est effectivement composé de plusieurs feuilles.

Onglets des feuilles Excel à réorganiser dans l-ordre alphabétique

On distingue la présence de deux séries avec des préfixes respectivement identiques. C'est la lettre en suffixe qui donne l'indication sur l'emplacement que doit occuper chaque feuille dans sa série. Les onglets verts représentent les feuilles qui devraient être en tête dans leur série. A l'inverse, les onglets en orange représentent les feuilles qui devraient apparaître en queue de liste dans leur série.

La procédure et le bouton
Comme cette fonctionnalité peut s'avérer intéressante à plus d'un titre, nous proposons de l'enregistrer dans le modèle Excel et de l'associer à un bouton de ruban. Ainsi, l'outil de réorganisation des feuilles sera disponible pour toutes les utilisations d'Excel.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel,
  • Dans l'explorateur de projet sur la gauche, cliquer sur l'élément VBAProject (PERSONAL.XLSB),
Ainsi, nous désignons le modèle.
  • En haut de la fenêtre de l'éditeur, cliquer sur le menu Insertion,
  • Dans les propositions, choisir l'option Module,
Ainsi, nous créons un nouveau module et sa feuille de code vierge pour l'instant, apparaît au centre de l'écran.
  • Dans cette feuille, créer la procédure trierFeuilles puis enregistrer les modifications,
Sub trierFeuilles()

End Sub


Maintenant qu'elle existe et avant de songer à l'implémenter, nous proposons de réaliser tout de suite la liaison avec un bouton à disposer dans un ruban.
  • Basculer sur la feuille Excel (ALT + Tab),
  • Cliquer droit n'importe où sur le ruban actif,
  • Dans le menu contextuel, choisir la commande Personnaliser le ruban,
La boîte de dialogue des options Excel apparaît.
  • Avec la première liste déroulante, choisir la catégorie Macros,
  • Glisser alors la macro PERSONAL.XLSB!trierFeuilles, dans un groupe d'un ruban sur la droite,
Ajouter la macro VBA pour trier les feuilles du classeur dans un ruban Excel

Ensuite, il convient d'exploiter le bouton Renommer en bas de la boîte de dialogue pour lui attribuer un intitulé et une icône explicites.
  • Cliquer sur le bouton Ok pour valider la création du nouveau bouton,
Désormais, si vous cliquez sur l'onglet de son ruban, vous le voyez apparaître dans la section où vous l'avez déposé. L'association est maintenant établie avec la procédure de code que nous allons nous empresser de développer.

La déclaration des variables
Pour être en mesure de réorganiser les feuilles du classeur par ordre alphabétique, l'idée est simple mais brillante. Nous devons les parcourir toutes dans une double boucle. La première doit les passer en revue de la première à l'avant dernière. La seconde doit débuter son analyse à partir de la feuille placée juste après celle en cours d'analyse dans la première boucle et la poursuivre jusqu'à la dernière. Dans cette seconde boucle, dès qu'un nom est "plus petit" que celui de la feuille en cours dans la première boucle, sa feuille doit être replacée devant. Comme elles seront ainsi toutes confrontées les unes par rapport aux autres tour à tour, nous obtiendrons la réorganisation alphabétique souhaitée. Nous avons donc besoin de variables de boucles ainsi que d'une variable pour prélever le nombre de feuilles composant le classeur actif.
  • Dans la procédure, ajouter les déclarations et affectations suivantes :
...
Dim nb As Integer, liste1 As Integer, liste2 As Integer
nb = Sheets.Count
...


Grâce à la propriété Count de la collection VBA Excel Sheets, nous retournons le nombre de feuilles du classeur dans la variable nb que nous avons préalablement déclarée comme un entier. Puis, nous déclarons les deux variables de boucle liste1 et liste2 que nous allons très vite utiliser.

Comparer chaque feuille aux autres
Grâce à ce dénombrement, nous allons maintenant pouvoir entreprendre la double boucle que nous évoquions. Chaque nom de feuille passé en revue doit être confrontré avec les noms de feuilles suivantes. Dès lors que l'une d'entre elle est jugée prioritaire dans le tri, elle doit être ramenée en avant, donc déplacée.
  • A la suite du code VBA, créer la double boucle suivante :
...
For liste1 = 1 To nb - 1
For liste2 = liste1 + 1 To nb

Next liste2
Next liste1
...


Pour chaque feuille, de la première à l'avant dernière passée en revue (For liste1 = 1 To nb - 1), nous parcourons toutes les feuilles suivantes jusqu'à la dernière cette fois (For liste2 = liste1 + 1 To nb).

Réorganiser les feuilles
Et justement, si dans le classement alphabétique l'un de ces noms de feuilles doit se positionner avant celle en cours d'analyse par la première boucle, nous devons la faire remonter devant. Pour cela, il suffit de tester une inégalité textuelle comme s'il s'agissait d'une inégalité numérique. Excel comprend, eu égard au classement des lettres dans l'alphabet.
  • Dans la double boucle, ajouter l'instruction conditionnelle suivante :
...
If UCase(Sheets(liste2).Name) < UCase(Sheets(liste1).Name) Then
Sheets(liste2).Move Sheets(liste1)
End If
...


Nous exploitons la fonction UCase (Upper Case) pour comparer les noms convertis en majuscules et ainsi éliminer tous les écarts induits par les différences de casse. Si le nom de la feuille située après dans la liste des onglets est "inférieur" à celui en cours d'analyse par la première boucle, nous le replaçons devant, grâce à la méthode Move de l'objet Sheets. En effet, son premier argument désigne la feuille avant laquelle effectuer ce déplacement tandis que son second désigne la feuille après laquelle il s'agit de réaliser ce déplacement.
  • Enregistrer les modifications (CTRL + S) et basculer sur le classeur Excel (ALT + Tab),
  • Activer le ruban hébergeant le bouton de tri créé précédemment,
  • Puis, cliquer sur ce dernier,
Réorganiser les feuilles du classeur Excel dans l-ordre alphabétique en VBA

Comme vous pouvez l'apprécier, toutes les feuilles sont instantanément reclassées dans l'ordre alphabétique et ce, en un temps record. Vous en conviendrez, le code VBA Excel que nous avons construit est très simple :

Sub trierFeuilles()
Dim nb As Integer, liste1 As Integer, liste2 As Integer
nb = Sheets.Count

For liste1 = 1 To nb - 1
For liste2 = liste1 + 1 To nb
If UCase(Sheets(liste2).Name) < UCase(Sheets(liste1).Name) Then
Sheets(liste2).Move Sheets(liste1)
End If
Next liste2
Next liste1

End Sub


 
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