Macro lorsque la cellule Excel change - Conseils Excel

Table des matières

Plusieurs lecteurs ont posé des questions qui obligent Excel à exécuter une section de macro à chaque fois qu'une valeur change dans la feuille de calcul Excel.

Tout d'abord, la méthode améliorée disponible uniquement dans XL97: Excel 97 dispose de nouveaux gestionnaires d'événements qui permettent à une macro d'être exécutée chaque fois qu'une cellule change.

Disons que chaque fois qu'une valeur supérieure à 100 est entrée dans la colonne A, vous souhaitez formater la cellule à côté d'elle pour qu'elle soit rouge.

  • Ouvrez Visual Basic Edit (Outils> Macro> Visual Basic Editor)
  • Dans la fenêtre de gauche, cliquez avec le bouton droit sur Sheet1 et sélectionnez Afficher le code.
  • En haut de la boîte de dialogue Book1 - Sheet1 Code, il y a deux listes déroulantes. Dans le menu déroulant de gauche, sélectionnez Feuille de calcul. Dans le menu déroulant de droite, sélectionnez Modifier.
  • Entrez les lignes de code suivantes:

    Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Column = 1 Then ThisRow = Target.Row If Target.Value> 100 Then Range("B" & ThisRow).Interior.ColorIndex = 3 Else Range("B" & ThisRow).Interior.ColorIndex = xlColorIndexNone End If End If End Sub

Chaque fois qu'une valeur dans une cellule est modifiée, cette macro sera exécutée. La variable Target vous indiquera quelle cellule et la nouvelle valeur de la cellule. Étonnamment, l'utilisation de cette méthode ne ralentit pas considérablement le processus.

Notez que la macro restera active tant que la feuille de calcul est ouverte ou jusqu'à ce que vous exécutiez une macro contenant la ligne suivante:

Application.EnableEvents = False

/ p> Dans Excel 95 / 7.0: vous devez utiliser la méthode OnEntry. Vous spécifiez une macro que vous souhaitez exécuter après la saisie d'une valeur. Dans ce cas, la variable Application.Caller contient l'adresse et la valeur qui ont changé. Entrez ce qui suit dans un nouveau module:

Sub AutoOpen() Worksheets("Sheet1").OnEntry = "CheckIt" End Sub Sub CheckIt() If Application.Caller.Column = 1 Then ThisRow = Application.Caller.Row If Application.Caller.Value> 100 Then Range("B" & ThisRow).Interior.ColorIndex = 3 Else Range("B" & ThisRow).Interior.ColorIndex = xlColorIndexNone End If End If End Sub

La vérification OnEntry restera active jusqu'à ce que vous exécutiez une macro avec le code suivant:

Worksheets("Sheet1").OnEntry = False

Articles intéressants...