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.
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
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.
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
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