Comment insérer un bouton pour remonter tout en haut d’une feuille de calcul sur Excel
Aujourd’hui, je vous propose un petit tutoriel VBA dans lequel nous mettre en place un bouton placé en bas à droite de la fenêtre Excel qui permettra de remonter tout en haut de la feuille de calcul en un simple clic.
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. Présentation
Lorsque l’on travaille sur de grandes feuilles de calcul Excel, il peut arriver que nous ayons à scroller de nombreuses fois, notamment pour remonter tout en haut de la page.
Pour simplifier cette opération, nous allons vouloir mettre en place un bouton qui puisse permettre en un seul clic de remonter tout en haut de la feuille, un peu comme ce que nous pouvons utiliser quotidiennement sur de très nombreux sites internet :
2. Création du bouton
La première étape va consister à insérer le bouton sur la feuille de calcul.
Pour cela, nous allons simplement insérer une image représentant une flèche pointant vers le haut (Menu Insertion > Image) :
Une fois l’image correctement insérée sur la feuille, nous pouvons éventuellement la redimensionner et la placer en bas, à droite de la fenêtre :
Si nous le souhaitons, nous pouvons supprimer une couleur dans l’image pour que l’image prenne la forme du cercle.
Pour cela, nous cliquons sur l’image pour faire apparaître le menu « Mise en forme », et nous nous rendons dans le menu Couleur > Couleur transparente :
Le curseur de la souris prend alors la forme d’une petite pipette, il suffit alors de cliquer sur la couleur à faire disparaître :
Nous pouvons encore modifier la couleur du bouton en nous rendant à nouveau dans le menu Couleur, et en choisissant l’une des teintes proposées.
Et voilà, notre bouton est maintenant terminé, nous allons pouvoir lui affecter une macro très simple qui va permettre de remonter automatiquement tout en haut de la feuille de calcul.
Pour cela, nous effectuons un clic-droit sur l’image > Affecter une macro :
Dans la fenêtre qui s’affiche, nous saisissons un nom à donner à la macro (par exemple « remonter »), puis nous cliquons sur le bouton « Nouvelle » :
Lorsque nous validons en appuyant sur le bouton « Nouvelle », Excel lance VBE, qui est l’éditeur de code intégré dans les applications de la suite Office et qui permet de coder les macro-commandes :
La macro « remonter » est insérée automatiquement dans le Module1, lui aussi ajouté automatiquement.
Pour cela, il suffit simplement d’utiliser la propriété ScrollRow de l’objet ActiveWindow, et de lui donner la valeur « 1 » :
Sub remonter()
ActiveWindow.ScrollRow = 1
End Sub
À ce moment-là, nous pouvons maintenant tester le bouton en scrollant vers le bas, puis en cliquant sur le bouton :
Maintenant que le bouton est terminé et fonctionnel, il va nous rester une opération à mettre en place, qui va consister à faire en sorte que le bouton reste systématiquement en bas à droite de la fenêtre.
3. Fixer la position du bouton
Pour fixer correctement la position du bouton en bas à droite de la fenêtre, nous allons commencer par donner lui donner un nom, ce qui nous permettra ensuite de pouvoir manipuler l’image et notamment la déplacer.
Pour donner un nom à cette image, nous cliquons dessus pour faire apparaître à nouveau le menu Mise en forme dans le ruban.
Sauf que maintenant que nous avons affecté une macro sur cette image, nous ne pouvons pas nous contenter de cliquer dessus, ce qui aura pour effet de faire remonter la fenêtre…
L’astuce consiste alors de cliquer sur l’image en utilisant le clic-droit de la souris :
Depuis le menu mise en forme, nous cliquons sur le bouton Volet de Sélection qui permet de paramétrer les différents objets de la feuille :
À partir de là, nous pouvons renommer l’objet (« Top ») :
Cela étant fait, nous allons pouvoir créer la macro « placerBouton » en revenant dans VBE (en dessous de la macro remonter) :
La première chose à faire pour pouvoir déplacer le bouton va être de déterminer la position de la dernière cellule affichée à l’écran.
Pour cela, nous pouvons utiliser la propriété VisibleRange de l’objet ActiveWindow, qui permet de récupérer un objet de type Range dans lequel seront insérées toutes les cellules affichées !
Nous commençons donc par stocker ces cellules dans un objet que nous allons appeler r (pour Range) :
Dim r As Range
Set r = ActiveWindow.VisibleRange
Maintenant, nous allons modifier cet objet pour réduire la plage uniquement à la seule dernière cellule affichée à l’écran :
Dim r As Range
Set r = ActiveWindow.VisibleRange
Set r = r.Cells(r.Rows.Count, r.Columns.Count)
Il existe plusieurs méthodes pour arriver à nos fins, la plus simple étant d’utiliser la fonction Cells qui permet de sélectionner une cellule incluse dans une plage en donnant ces coordonnées en argument
Il ne reste plus qu’à modifier les coordonnées de l’objet Top (il s’agit d’un objet Excel Shape) :
With ActiveSheet.Shapes("top")
.Top = r.Top
.Left = r.Left
End With
Ici, nous plaçons l’objet aux mêmes coordonnées que la dernière cellule affichée.
Nous pouvons lancer la macro pour nous rendre compte que l’image… a pratiquement disparu :
Pour la faire apparaître, il suffit alors d’effectuer un décalage :
With ActiveSheet.Shapes("Top")
.Top = r.Top - 100
.Left = r.Left - 100
End With
Bien entendu, le décalage va dépendre de la taille de l’image et des cellules de la feuille.
Maintenant, pour que l’image se replace automatiquement lors du scroll, nous pouvons opter pour deux manières possibles :
- Soit utiliser l’évènement WorkSheet_SelectionChange pour relancer la macro à chaque fois que nous sélectionnons l’une des cellules de la feuille,
- Soit utiliser un Timer pour relancer régulièrement la macro
La première méthode étant la plus simple, c’est celle-ci que nous allons découvrir ici (mais si vous souhaitez que je vous présente également la seconde méthode, n’hésitez pas à m’en faire part)
Donc, nous allons créer cet évènement, qui permet comme nous l’avons vu dans le chapitre dédié de la formation sur l’apprentissage du langage VBA, de lancer une série d’instructions, dès que quelque chose s’exécute sur une feuille de calcul, ou un classeur.
Pour créer cet évènement, nous revenons dans VBA, puis plus spécifiquement dans le module de feuille en double cliquant sur celui-ci :
Puis, nous utilisons les menus déroulant pour sélectionner respectivement Worksheet, puis SelectionChange :
Il ne reste plus ensuite, qu’à appeler la macro-commandes placerBouton :
4. En bonus : créer un second bouton pour descendre sur la dernière ligne
Maintenant que nous avons comment ce bouton, nous pouvons facilement insérer un second bouton qui permettra cette fois-ci de descendre sur la dernière ligne de la feuille.
Pour cela, nous commençons par créer une nouvelle macro :
Sub descendre()
ActiveWindow.ScrollRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
End Sub
Puis nous affectons cette macro sur le deuxième bouton :
Pour finir, nommons le bouton Bottom, et nous adaptons la macro pour en modifier l'emplacement :
With ActiveSheet.Shapes("Bottom")
.Top = r.Top - 100
.Left = r.Left - 180
End With