Comment exécuter une macro lorsque certaines cellules changent dans Excel

Résumé

Dans Microsoft Excel, vous pouvez créer une macro qui ne sera appelée que lorsqu’une valeur sera entrée dans une cellule d’une feuille spécifique, ou dans n’importe quelle feuille actuellement ouverte.

Gardez cependant à l’esprit que les macros ne doivent pas être appelées inutilement, parce qu’elles ralentissent les performances d’Excel.

Informations supplémentaires

Microsoft fournit des exemples de programmation à titre d’illustration uniquement, sans garantie expresse ou implicite. Cela inclut, sans y être limité, les garanties implicites de commercialisation et d’adaptation à un but en particulier. Cet article considère que vous connaissez le langage de programmation présenté et les outils utilisés pour créer et déboguer des procédures. Les techniciens du Support technique Microsoft peuvent vous expliquer les fonctionnalités d’une procédure particulière, mais ils ne peuvent pas modifier les exemples en vue de vous fournir des fonctionnalités supplémentaires ou de créer des procédures répondant à vos besoins spécifiques. Dans de nombreux cas, une macro ne doit s’exécuter que si un certain nombre de cellules comportent des valeurs saisies (appelées « cellules clés » dans ce document). Afin d’empêcher l’exécution d’une macro volumineuse chaque fois qu’une valeur est entrée dans une cellule d’une feuille, vous devez vérifier si la propriété ActiveCell est l’une des cellules clés. Pour ce faire, utilisez la méthode Intersect sur la cellule active et la plage contenant les cellules clés pour vérifier que la cellule active est l’une des cellules clés. Si la cellule active se trouve dans la plage contenant les cellules clés, vous pouvez appeler la macro.

Pour créer la macro Visual Basic :

  1. Cliquez avec le bouton droit sur l’onglet Feuil1, puis cliquez sur Afficher le code.

    La feuille de module derrière Feuil1 est ouverte.

  2. Tapez le code suivant dans la feuille de module :

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim KeyCells As Range
    
    ' The variable KeyCells contains the cells that will
        ' cause an alert when they are changed.
        Set KeyCells = Range("A1:C10")
    
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
               Is Nothing Then
    
    ' Display a message when one of the designated cells has been 
            ' changed.
            ' Place your code here.
            MsgBox "Cell " & Target.Address & " has changed."
    
    End If
    End Sub
    
  3. Cliquez sur Fermer et retourner à Microsoft Excel dans le menu Fichier.

Lorsque vous tapez une entrée dans les cellules A1:C10 dans Feuil1, une zone de message s’affiche.