Chris a, au travail, une grande feuille de calcul qui comprend plusieurs macros. L’un d’eux supprime un bloc de cellules et déplace le reste vers le haut. Parfois, cependant, les utilisateurs n’utilisent pas la macro et, à la place, suppriment manuellement le bloc. C’est un désastre si la suppression déplace les cellules vers la gauche plutôt que vers le haut.

Chris se demande s’il existe un moyen d’utiliser les macros pour imposer le mouvement ascendant des cellules et empêcher le mouvement manuel des cellules vers la gauche.

Comme pour beaucoup de choses dans Excel, il existe plusieurs façons d’aborder ce problème. Je ne peux pas aller trop loin dans les détails ici, car toute approche finalement choisie dépendra de la nature des informations contenues dans la feuille de calcul et de ce que vous souhaitez autoriser ou interdire. Cependant, les sections suivantes peuvent fournir la clé dont vous avez besoin pour choisir l’approche qui vous convient le mieux.

Protéger la feuille de travail

Une approche simple (et efficace) consiste à concevoir votre feuille de calcul afin qu’elle puisse être protégée. Bien sûr, vous devez vous assurer que toutes les cellules dans lesquelles l’utilisateur doit entrer des informations ne sont pas protégées, mais sinon, votre macro peut garantir que lorsque la feuille de calcul est activée, elle est protégée.

Cela exclut la possibilité pour l’utilisateur de supprimer manuellement des cellules de la feuille de calcul.

Cela signifie que si la plage de cellules doit être supprimée, l’utilisateur est obligé (par la protection) de sélectionner votre macro à supprimer. La macro peut ensuite déprotéger la feuille de calcul, supprimer la plage de cellules et la reprotéger.

Interception des suppressions

Une autre approche basée sur les macros consiste à travailler avec l’événement BeforeDelete pour contrôler ce qui se passe réellement. Ce qui suit est un simple gestionnaire d’événements qui pourrait être la base de ce que vous utilisez réellement:

Private Sub Worksheet_BeforeDelete()

Dim delRng As Range     Dim selRng As Range

On Error Resume Next     Set delRng = Range("C2:D5")  ' Change the range to the block                                  ' of cells to be deleted (manually                                  ' or by macro)

Set selRng = Application.Selection  ' Cells selected manually                                         ' by the user     If MyRng.Address = delRng.Address Then         Selection.Delete shift:=xlUp     End If End Sub

Le gestionnaire d’événements compare simplement la plage que vous souhaitez supprimer uniquement vers le haut avec la plage que l’utilisateur a sélectionné pour supprimer. Si les plages sont identiques, le gestionnaire supprime la plage et la déplace vers le haut. Vous devrez évidemment modifier la plage affectée à la variable delRng pour qu’elle corresponde à la plage que vous souhaitez surveiller.

Remappage de la touche de suppression

En parlant de suppression, vous pouvez également remapper la touche Supprimer pour qu’elle fasse ce que vous voulez. Tout ce que vous avez à faire est d’inclure une macro comme celle-ci dans le module de code ThisWorkbook:

Private Sub Workbook_Open()

Application.OnKey "{DELETE}", "MyMacro()"

End Sub

Cela signifie que lorsque le classeur est ouvert, la touche Suppr est remappée afin que chaque fois qu’elle est enfoncée, MyMacro (remplacez-le par la macro souhaitée) est automatiquement exécuté.

Notez que cette approche affecte uniquement la pression de la touche Suppr; cela n’affecte pas les suppressions effectuées d’une autre manière. Pour ceux-ci, vos macros auraient encore besoin d’anticiper et de gérer la logique.

L’approche complète

Cela nous amène à l’approche complète. Cette approche consiste simplement à dresser une liste de toutes les différentes façons dont l’utilisateur pourrait lancer une suppression, puis à intercepter ces méthodes. La liste (et les interceptions) devrait nécessairement inclure certaines des approches déjà discutées, telles que la gestion de la touche Supprimer. Vous devrez également déterminer comment désactiver ou modifier ce qui se passe lorsque l’utilisateur clique avec le bouton droit de la souris ou lorsque l’utilisateur sélectionne une option de suppression dans le ruban.

(Vous pourriez même vouloir supprimer les options liées à la suppression de l’interface utilisateur.)

Cette approche peut être assez longue, car une liste exhaustive des méthodes de suppression pourrait être laborieuse à rassembler et à gérer.

_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 (13632) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365.