Impossible d'activer la macro lorsque des changements cellulaires actifs à travers la formule

voix
0

Mon but est de déclencher la macro filtre avancé change lorsque la cellule B2 (une partie des critères de filtrage). B2 est liée à une autre cellule (dans une autre feuille de calcul) qui obtient dynamiquement des données à partir de sources externes. Le problème que je suis face est que la macro ne déclenche pas automatiquement. Seulement quand je change manuellement quelque chose dans B2 est la macro activée. Sinon, les anciens critères reste en place. A1 à G1 a 7 catégories et A2-G2 a les entrées du filtre. Seuls les changements B2 efficacement. Je n'ai pas codé en VBA avant donc la plupart de ce code est copié à partir de sites et modifiés pour mon classeur. Voici mon code. Apprécierait toute aide à ce sujet.

Option Explicit
 'Create variable to hold values
Dim Monitored

Sub Advanced_Filtering()
Range(A7:G730).AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Range(A1:G2), _
CopyToRange:=Sheets(Sheet3).Range(L1:R1)
End Sub



Private Sub Worksheet_Activate()
    Monitored = Range(B2).Value 'Read in value prior to any changes
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
     'Check target to determine if macro is triggered
    If Intersect(Target, Range(B2)) Is Nothing Then Exit Sub
     'Prevent looping of code due to worksheet changes
    Application.EnableEvents = False
     'Compare monitored cell with initial value
    If Range(B2).Value <> Monitored Then
         'Do things as a result of a change
       Call Advanced_Filtering
         'Reset Variable with new monitored value
        Monitored = Range(B2).Value
    End If
     'Reset events
    Application.EnableEvents = True
End Sub
Créé 09/10/2019 à 12:59
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Probablement le plus facile solution serait de placer l'événement Worksheet_Change dans les cellules qui génèrent la valeur de votre cellule B2, comme des changements dans les valeurs de formule ne déclenchent pas l'événement change ... ou vous pouvez le modifier à l'événement Worksheet_Calculate au lieu, cela détecter les changements dans les résultats de la formule comme suit:

Option Explicit
 'Create variable to hold values
Dim Monitored

Sub Advanced_Filtering()
    Range("A7:G730").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("A1:G2"), CopyToRange:=Sheets("Sheet3").Range("L1:R1")
End Sub

Private Sub Worksheet_Activate()
    Monitored = Range("B2").Value 'Read in value prior to any changes
End Sub

Private Sub Worksheet_Calculate()
    Dim Xrg As Range
    Set Xrg = Range("B2")

    If Not Intersect(Xrg, Range("B2")) Is Nothing Then
        Application.EnableEvents = False
         'Compare monitored cell with initial value
        If Range("B2").Value <> Monitored Then
             'Do things as a result of a change
           Call Advanced_Filtering
             'Reset Variable with new monitored value
            Monitored = Range("B2").Value
        End If
         'Reset events
        Application.EnableEvents = True
    End If
End Sub
Créé 09/10/2019 à 13:20
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more