J'utilise le code suivant qui fonctionne très bien. Toutefois, les modifications de la cellule devant déclencher cet événement sont effectuées à l'aide d'une formule et non d'une entrée dans la cellule. Si je tape l'entrée, tout fonctionne. Mais si j'utilise une formule pour récupérer les données d'une autre feuille de calcul, ce n'est pas le cas. Par exemple, les cellules dans AD ont des formules telles que =HR!P27
.
Qu'est-ce que je rate?
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Update 20140722
Dim WorkRng As Range
Dim Rng As Range
Dim xOffsetColumn As Integer
Set WorkRng = Intersect(Application.ActiveSheet.Range("AD:AD"), Target)
xOffsetColumn = -1
If Not WorkRng Is Nothing Then
Application.EnableEvents = False
For Each Rng In WorkRng
If Not VBA.IsEmpty(Rng.Value) Then
Rng.Offset(0, xOffsetColumn).Value = Now
Rng.Offset(0, xOffsetColumn).NumberFormat = "dd-mm-yyyy, hh:mm:ss"
Else
Rng.Offset(0, xOffsetColumn).ClearContents
End If
Next
Application.EnableEvents = True
End If
End Sub
Une formule qui renvoie un résultat différent ne constitue pas un changement de cellule. Selon la description de l'événement Worksheet_Change
, il:
Se produit lorsque les cellules de la feuille de calcul sont modifiées par l'utilisateur ou par un lien externe.
Ce comportement est logique lorsque vous constatez que le contenu de la cellule ne change pas réellement. Par exemple, la cellule contenait =HR!P27
avant et après que la formule a renvoyé un résultat différent. Seul le résultat de la formule a changé. Comme cette affaire l’affirme, Excel distingue les modifications qui affectent le contenu d’une cellule par rapport à sa sortie.
Si vous avez besoin que votre code soit exécuté chaque fois que votre formule est mise à jour, envisagez d'utiliser l'événement Worksheet_Calculate . Il se déclenche chaque fois que la feuille de calcul est recalculée.
Considérez la plage ("AD: AD") dans votre code VBA, je voudrais vous suggérer la raison derrière et aussi des solutions pour résoudre le problème
Si la plage est manuellement actualisée (ce que vous avez fait en réalité), l'événement de modification peut être utilisé.
Si la plage contient une formule , l'événement de calcul peut être utilisé.
Si la plage contient une valeur actualisée via une donnée externe ou une formule , dans Range ("AD" AD "), vous entrez = (" AD: AD ") et le Calculate Event peut également être utilisé.
Thaes sont les raisons possibles. Donc, si la plage est actualisée, alors AD: AD sera automatiquement calculé et l'événement sera déclenché.
Je suppose que vous n’avez pas entré le code sous ThisWorkbook. Le code doit obligatoirement être saisi sous Feuille , puis cela fonctionne.
Pour que la conclusion soit utilisée, calculez l'événement.
Vous trouverez ci-dessous deux exemples de méthodes de codage. Ils vous aideront à vous débarrasser de la situation.
Méthode 1:
Private Sub Worksheet_Calculate()
Dim target As Range
Set target = Range("AD:AD")
If Not Intersect(target, Range("AD:AD")) Is Nothing Then
PASTE YOUR VB CODE HERE.
End If
End Sub
Méthode 2:
Créez simplement ceci.
Private Sub Worksheet_Calculate()
Worksheet_Change Range("AD:AD")
End Sub
NB: Ce code traitera de votre exercice actuel "Événement de changement de feuille de calcul".
J'espère que cela vous aidera.