Comment trier les feuilles de calcul sur Excel (tri aléatoire ou alphabétique) ?
Dans ce tutoriel, je vais vous montrer comment automatiser l’organisation des onglets au sein du classeur en suivant un ordre aléatoire ou alphabétique, de manière totalement automatique, en appuyant sur un simple bouton.
Téléchargement
Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :
Tutoriel Vidéo
1. Introduction
Comme nous venons de le voir, nous allons maintenant découvrir comment trier rapidement les feuilles de calcul du classeur, en appuyant sur un simple bouton.
Évidemment, Excel ne propose pas de fonctionnalité de ce type par défaut, nous allons donc devoir coder de toutes petites macro-commandes en VBA pour y parvenir.
Bien entendu, pour que ce tutoriel soit accessible pour tout le monde, même si vous n’avez aucune notion dans le développement en VBA, nous allons détailler chacune des lignes pas à pas.
Mais, si ce tutoriel vous donne envie d’en savoir plus sur le langage VBA, et sur toutes les possibilités d’amélioration des fonctionnalités proposées par Excel, vous pouvez découvrir mon livre dédié à ce langage en cliquant ici.
2. VBA et la notion d’objets
Pour commencer, nous allons chercher à trier les feuilles de calculs du classeur de manière aléatoire.
Cela nous permettra en effet de découvrir en douceur comment contrôler l’objet Worksheet en VBA.
Mais tout d’abord, revenons sur cette notion d’objet.
Il faut en effet savoir que le langage VBA est dit « orienté objet ».
Pour faire simple, comprenez par là que celui-ci nous permet d’agir sur des briques de fonctionnalités reprenant un certain nombre de fonctionnalités que nous appelons des propriétés (paramètres de l’objet) et des méthodes (actions à effectuer par l’objet).
L’objet principal est l’objet nommé « Application », il permet de gérer Excel, puisque nous développons une macro VBA d’Excel, mais si nous étions sur une autre application, telle que Word ou PowerPoint, l’objet « Application » permettra de gérer celle-ci.
De cet objet principal « Application » découle toute une série d’objets et de sous-objets permettant chacun de contrôler différents aspects d’Excel.
Ici, nous allons nous intéresser à l’objet « Workbook » qui gère le classeur et à son sous-objet « Worksheet » qui permet quant à lui de gérer les feuilles de calculs.
3. Comment trier les feuilles de calcul de manière aléatoire
Après ce rapide tour de présentation de la notion d’objet, nous pouvons maintenant nous attaquer au sujet qui nous intéresse ici : créer notre macro pour trier les feuilles de calcul.
Tout d’abord, pour lancer VBE, l’outil qui permet de développer des macros en VBA.
Pour le lancer, il existe plusieurs méthodes, dont la plus simple et la plus rapide consiste à utiliser le raccourci clavier [Alt]+[F11] :
VBE se lance alors directement sur le projet en cours, c’est-à-dire le classeur ouvert au moment où nous l’avons lancé.
Pour créer notre macro, nous allons insérer un nouveau module, qui est une feuille blanche dans laquelle nous allons pouvoir saisir des lignes de code.
Pour cela, nous nous rendons dans le menu Insertion > Module :
Une fois le module inséré, pour y ajouter notre macro, nous saisissons le mot-clé « Sub », suivi du nom de la macro, ici « triFeuilleAleatoire » :
Lorsque nous validons en appuyant sur la touche [Entrée], Excel ajoute la ligne « End Sub » qui marque la fin de la macro, et tout ce que nous allons saisir entre ces deux lignes va s’exécuter à chaque fois que nous appellerons cette macro.
Ensuite, nous allons créer un objet Worksheet dans cette macro, qui permettra comme nous l’avons vu dans la partie précédente de manipuler une feuille de calculs.
Pour créer un objet, ou une variable, nous utilisons le mot-clé « Dim », suivi du nom que nous souhaitons lui donner et enfin du type de ce dernier :
Le mot-clé « As », permet ici de définir que l’objet feuille est de type Worksheet.
Ensuite, nous allons nous servir de cet objet pour passer en revue toutes les feuilles du classeur en utilisant une boucle For Each.
Une boucle est un outil de programmation qui permet de répéter une opération un nombre défini de fois, ici jusqu’à ce que l’objet feuille ait passé en revue toutes les feuilles du classeur.
Pour en savoir plus sur la boucle For Each, vous pouvez consulter l’article dédié en cliquant ici.
For Each feuille In ActiveWorkbook.Worksheets
Next
Ensuite, nous allons créer une nouvelle variable, dans laquelle nous allons enregistrer la position à donner à la feuille, laquelle correspondra à un nombre aléatoire compris entre 1 et le nombre de feuilles contenues dans le classeur :
Dim position As Integer
position = Int((ActiveWorkbook.Worksheets.Count * Rnd) + 1)
Pour obtenir ce nombre, nous utilisons la fonction VBA Rnd() qui permet de tirer un nombre décimal compris entre 0 et 1 que nous multiplions avec le nombre de feuilles totales du classeur que nous obtenons avec la propriété Count de l’objet Worksheet.
Ensuite, nous ajoutons 1 à ce résultat et nous encapsulons ce résultat dans la fonction Int() qui permet de n’en conserver que la partie entière.
Cela étant fait, il ne reste plus qu’à déplacer la feuille avec la méthode Move :
feuille.Move before:=ActiveWorkbook.Worksheets(position)
Ici nous déplaçons la feuille juste avant celle qui est positionnée à la position retournée par la valeur de la variable position.
Pour tester la macro, il suffit d’appuyer sur la touche [F5] et d’aller observer l’ordre des feuilles de calcul sur le classeur :
4. Comment trier les feuilles de calcul de manière alphabétique
Maintenant que nous venons de voir comment classer les feuilles de calcul en fonction d’un critère aléatoire, voyons comment les reclasser par ordre alphabétique.
Étant donné que nous allons partir de la même base, nous pouvons effectuer un simple copier-coller de la macro précédente, sur laquelle nous viendrons modifier le nom en triFeuilleAlphabetique, puis nous supprimons le contenu de la boucle For Each :
Sub triFeuilleAlphabetique()
Dim feuille As Worksheet
For Each feuille In ActiveWorkbook.Worksheets
Next
End Sub
Ensuite, à l’intérieur de cette boucle, nous allons à nouveau effectuer une revue de toutes les feuilles, que nous stockerons cette fois-ci dans une seconde variable feuille2 (nous créons donc une seconde variable pour celle-ci) :
Sub triFeuilleAlphabetique()
Dim feuille As Worksheet, feuille2 As Worksheet
For Each feuille In ActiveWorkbook.Worksheets
For Each feuille2 In ActiveWorkbook.Worksheets
Next
Next
End Sub
De cette manière, il ne reste plus qu’à comparer le nom de ces deux variables feuille et feuille2, et lorsque la seconde est supérieure à la première suivant un ordre alphabétique, alors nous pouvons déplacer feuille juste avant feuille2 :
For Each feuille In ActiveWorkbook.Worksheets
For Each feuille2 In ActiveWorkbook.Worksheets
If feuille2.Name > feuille.Name Then
feuille.Move before:=feuille2
End If
Next
Next
Avant de pouvoir tester la macro, nous allons juste nous assurer de sortir de la boucle encapsulée avec une instruction Exit For qui va éviter de continuer l’analyse en vain :
For Each feuille In ActiveWorkbook.Worksheets
For Each feuille2 In ActiveWorkbook.Worksheets
If feuille2.Name > feuille.Name Then
feuille.Move before:=feuille2
Exit For
End If
Next
Next
Puis, nous appuyons sur la touche [F5] pour vérifier que les onglets sont bien ordonnés suivant l’ordre alphabétique :