Existe-t-il un moyen simple de demander à Excel d’exécuter automatiquement une macro chaque fois qu’une cellule est modifiée?
La cellule en question serait en Worksheet("BigBoard").Range("D2")
Ce que je pensais être une simple enquête Google s’avère plus compliqué - chaque échantillon impliqué intersecte (qu’il s’agisse de celui-ci), le formatage des couleurs ou tout autre élément qui semble hors de propos.
Oui, cela est possible en utilisant des événements de feuille de calcul:
Dans Visual Basic Editor, ouvrez la feuille de calcul qui vous intéresse (par exemple, "BigBoard") en double-cliquant sur le nom de la feuille de travail dans l'arborescence 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!"
End If
Finalize:
Application.EnableEvents = True
End Sub
Une autre option est
Private Sub Worksheet_Change(ByVal Target As Range)
IF Target.Address = "$D$2" 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 calcul change beaucoup.
Dans une tentative de trouver un moyen de transformer la cellule cible pour la méthode d'intersection en un tableau de table de noms, je suis tombé sur un moyen simple d'exécuter quelque chose lorsque TOUTE cellule ou ensemble de cellules d'une feuille particulière change. Ce code est également placé dans le module de feuille de calcul:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 0 Then
'mycode here
end if
end sub
Pour tenter de repérer un changement quelque part dans une colonne particulière (ici dans "W", c'est-à-dire "23"), j'ai modifié la réponse de Peter Alberts à:
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