Stockage de l’emplacement d’un utilisateur avant d’exécuter une macro (Microsoft Excel)
John a une macro qui effectue un certain traitement sur diverses feuilles de calcul dans un classeur. Il souhaite, au début de la macro, enregistrer la plage de cellules (ou la cellule unique) que l’utilisateur a sélectionnée. Il utilise ActiveCell.Address pour déterminer cela. Puis, à la fin de la macro, il souhaite revenir à l’utilisateur avec la même plage sélectionnée qu’il avait initialement sélectionnée.
Le problème est que la macro peut être terminée sur une feuille de calcul entièrement différente de celle où l’utilisateur a commencé, et ActiveCell.Address ne donne qu’une adresse de cellule, pas un nom de feuille de calcul et certainement pas une plage. John s’interroge sur la meilleure façon de stocker ce dont il a besoin afin de pouvoir retourner à l’emplacement d’origine de l’utilisateur à la fin de la macro.
Pour avoir les meilleures chances de ramener quelqu’un là où il a commencé, il existe trois éléments: un classeur, une feuille de calcul et une cellule. En fait, ce dernier élément (cellule) peut être un peu simpliste, car l’utilisateur aura toujours une cellule sélectionnée (c’est ce qui est retourné par ActiveCell.Address), mais peut en plus avoir une plage sélectionnée.
Voici comment vous obtenez les quatre éléments:
Dim rngOrigSelection As Range Dim rngOrigCell As Range Dim sOrigWS As String Dim sOrigWB As String Set rngOrigSelection = Selection Set rngOrigCell = ActiveCell sOrigWS = ActiveSheet.Name sOrigWB = ActiveWorkbook.Name
Lorsque vous souhaitez ultérieurement ramener l’utilisateur là où il se trouvait, vous pouvez utiliser ce type de code:
Workbooks(sOrigWB).Activate Sheets(sOrigWS).Select rngOrigSelection.Select rngOrigCell.Activate
Bien sûr, Excel a toujours plusieurs façons d’accomplir une tâche donnée. Dans ce cas, vous pouvez raccourcir votre code en ne vous rappelant que la cellule active et la plage sélectionnée:
Dim rngOrigSelection As Range Dim rngOrigCell As Range Set rngOrigSelection = Selection Set rngOrigCell = ActiveCell
Lorsque vous souhaitez restaurer l’utilisateur à l’emplacement, vous comptez sur l’objet Parent disponible dans VBA:
rngOrigSelection.Parent.Parent.Activate rngOrigSelection.Parent.Select rngOrigSelection.Select rngOrigCell.Activate
L’objet parent de la plage de sélection que vous avez enregistrée est la feuille de calcul dans laquelle se trouve cette plage et le parent de cet objet parent est le classeur dans lequel se trouve la feuille de calcul.
Une autre approche consiste simplement à créer, dans votre macro, une plage nommée qui fait référence à ce que l’utilisateur avait sélectionné:
ActiveWorkbook.Names.Add Name:="MyOrigPlace", RefersTo:=Selection
Après avoir effectué votre traitement, lorsque vous êtes prêt à revenir à ce que l’utilisateur avait sélectionné, vous utilisez ce code:
Application.Goto Reference:="MyOrigPlace" ActiveWorkbook.Names("MyOrigPlace").Delete
La première ligne revient à la sélection et la deuxième ligne supprime ensuite la plage nommée. Le seul inconvénient de cette approche est que la cellule active n’est pas retenue; le code suppose que vous souhaitez que la cellule supérieure gauche de la plage soit la cellule active une fois l’opération terminée. Vous devez également savoir que si votre traitement supprime les cellules qui composent la plage nommée, le code risque de ne pas fonctionner correctement – Excel ne peut pas accéder à un emplacement qui n’existe plus.
Bien sûr, vous n’aurez peut-être à vous souvenir d’aucun emplacement si vous codez correctement votre macro. Bien que VBA vous permette de «vous déplacer» et de sélectionner différentes zones de vos feuilles de calcul et de votre classeur, dans la plupart des cas, ce n’est pas nécessaire. Vous pouvez, par exemple, simplement travailler avec différentes plages, puis faire votre travail sur ces plages, sans jamais changer la sélection actuelle ou la cellule active. En effet, VBA vous permet de modifier, reformater, trier, supprimer et faire presque tout ce que vous pouvez imaginer sur des cellules sans avoir besoin de les sélectionner.
_Note: _
Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.
lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur]
.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (6161) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365. Vous pouvez trouver une version de cette astuce pour l’ancienne interface de menu d’Excel ici:
link: / excel-Storing_a_Users_Location_before_Running_a_Macro [Stockage de l’emplacement d’un utilisateur avant d’exécuter une macro]
.