Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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.
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,
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,
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