Wendy a une feuille de calcul qui contient pas mal de données, avec les données principales dans la plage C3: P312. Elle aimerait avoir une macro qui, si elle clique sur une cellule de cette plage de données, mettrait un «x» dans la cellule.

Il n’y a aucun événement qu’Excel peut reconnaître comme un «clic» sur une cellule.

L’événement le plus proche est peut-être l’événement SelectionChange, qui est déclenché chaque fois que la sélection de cellule change. Le gestionnaire d’événements pourrait alors vérifier pour s’assurer que la sélection de cellule est dans la plage C3: P312, puis placer un «x» dans la cellule si c’est le cas. Le gestionnaire d’événements suivant le fera:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim rInt As Range     Dim rCell As Range

Set rInt = Intersect(Target, Range("C3:P312"))

If Not rInt Is Nothing Then         For Each rCell In rInt             rCell.Value = "x"

Next     End If     Set rInt = Nothing     Set rCell = Nothing End Sub

Cependant, cette approche pose un problème: non seulement l’événement SelectionChange se déclenchera lorsque vous cliquez sur une cellule différente, mais il se déclenchera également si vous utilisez le clavier pour passer d’une cellule à une autre dans la feuille de calcul. Cela signifie que si vous utilisez le clavier pour vous déplacer dans la feuille de calcul, vous laisserez une trace de caractères «x» dans chaque cellule que vous transitez.

Une façon de contourner ce problème consiste à modifier l’événement qui déclenche la vérification et la modification des cellules. Alors qu’Excel n’a pas d’événement de «clic», il y a un événement de «double-clic». Cela signifie que vous pouvez changer la cellule sur laquelle vous double-cliquez, comme indiqué ici:

Private Sub Worksheet_BeforeDoubleClick( _             ByVal Target As Range, Cancel As Boolean)

Dim rInt As Range     Dim rCell As Range

Set rInt = Intersect(Target, Range("C3:P312"))

If Not rInt Is Nothing Then         For Each rCell In rInt             rCell.Value = "x"

Next     End If     Set rInt = Nothing     Set rCell = Nothing     Cancel = True End Sub

_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 (3378) s’applique à Microsoft Excel 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban d’Excel (Excel 2007 et versions ultérieures) ici:

link: / excelribbon-Putting_an_X_in_a_Clicked_Cell [Mettre un X dans une cellule cliquée].