excel VBA lancer macro automatiquement chaque fois qu'une cellule est changée

y a-t-il un moyen simple pour que Excel exécute automatiquement une macro chaque fois qu'une cellule est changée?

La cellule en question serait d' Worksheet("BigBoard").Range("D2")

ce que je pensais être une simple enquête Google s'avère être plus compliqué - chaque échantillon impliqué intersections (quelles qu'elles soient) ou formatage couleur ou tout autre nombre de choses qui semblent être hors de propos.

18
demandé sur Community 2013-03-11 15:05:50

4 réponses

Oui, c'est possible en utilisant la feuille de calcul événements:

dans le Visual Basic Editor Ouvrez la feuille de travail qui vous intéresse (c.-à-d." BigBoard") en double cliquant sur le nom de la feuille de travail dans l'arbre en haut à gauche. Placez le code suivant dans le module:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Me.Range("D2")) Is Nothing Then Exit Sub
    Application.EnableEvents = False 'to prevent endless loop
    On Error Goto Finalize 'to re-enable the events      
    MsgBox "You changed THE CELL!"
Finalize:        
    Application.EnableEvents = True
End Sub
33
répondu Peter Albert 2016-10-24 17:55:16

une autre option est

Private Sub Worksheet_Change(ByVal Target As Range)
    IF Target.Address = "$D" Then
        MsgBox("Cell D2 Has Changed.")
    End If
End Sub

je crois que cela utilise moins de ressources que Intersect, ce qui sera utile si votre feuille de travail change beaucoup.

16
répondu user2140261 2015-07-22 13:54:00

dans une tentative de trouver un moyen de rendre la cellule cible pour la méthode intersect un tableau de table de nom, je suis tombé sur une manière simple d'exécuter quelque chose quand N'importe quelle cellule ou ensemble de cellules sur une feuille particulière change. Ce code est également placé dans le module feuille de travail:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 0 Then
'mycode here
end if
end sub
4
répondu Zediiiii 2015-07-24 17:15:51

Dans une tentative de repérer un changement quelque part dans une colonne particulière (ici en "W", c'est à dire "23"), j'ai modifié Pierre Albert réponse à:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Target.Column = 23 Then Exit Sub
    Application.EnableEvents = False             'to prevent endless loop
    On Error GoTo Finalize                       'to re-enable the events
    MsgBox "You changed a cell in column W, row " & Target.Row
    MsgBox "You changed it to: " & Target.Value
Finalize:
    Application.EnableEvents = True
End Sub
0
répondu Bendaua 2018-04-10 09:01:43