Exécution macro après changement de valeur cellule

Bonjour,

J'ai fait une macro de filtre sur une feuille nommée "Effectif" et je souhaite que cette macro s'active automatiquement quand la cellule D1 d'un autre onglet nommé "imprimer" est non-vide, que sa valeur change.

Merci d'avance pour votre aide,

Bonjour

un essai de code événementiel à mettre sur la feuille "imprimer" :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D1")) Is Nothing Then
        Dim Anc, Nouv
        Application.EnableEvents = True ' on arrête le surveillance événementielle
        Nouv = Target.Value
        Application .Undo
        Anc = Target.Value
        If Anc = Nouv Then Exit Sub
        Target.Value = Nouv
        If Nouv <> "" Then Call impression
        Application.EnableEvents = True
    End If
End Sub

En somme on détecte un changement de valeur sur la cellule D1.

On arrête la surveillance événementielle de la feuille.

On inscrit cette nouvelle valeur dans la variable Nouv.

On fait un "Undo" de l'application.

On inscrit l'ancienne valeur de la cellule D1 dans la variable Anc.

Si Anc et Nouv sont = on quitte la procédure

On "remet" en place la nouvelle valeur de D1

Si Nouv est différent de rien alors on imprime.

On remet en marche la surveillance événementielle.

Pas essayé...

@ bientôt

LouReeD

Merci de cette réponse rapide,

Cependant j'ai une "erreur de compilation", ".Undo" est placé en surbrillance.

Bonjour

un essai de code événementiel à mettre sur la feuille "imprimer" :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D1")) Is Nothing Then
        Dim Anc, Nouv
        Application.EnableEvents = True ' on arrête le surveillance événementielle
        Nouv = Target.Value
        Application .Undo
        Anc = Target.Value
        If Anc = Nouv Then Exit Sub
        Target.Value = Nouv
        If Nouv <> "" Then Call impression
        Application.EnableEvents = True
    End If
End Sub

En somme on détecte un changement de valeur sur la cellule D1.

On arrête la surveillance événementielle de la feuille.

On inscrit cette nouvelle valeur dans la variable Nouv.

On fait un "Undo" de l'application.

On inscrit l'ancienne valeur de la cellule D1 dans la variable Anc.

Si Anc et Nouv sont = on quitte la procédure

On "remet" en place la nouvelle valeur de D1

Si Nouv est différent de rien alors on imprime.

On remet en marche la surveillance événementielle.

Pas essayé...

@ bientôt

LouReeD

La macro a activer se nomme FiltreAd pas "impression" au fait

Bonjour,

Bonjour LouReeD,

Essaie ainsi :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Anc, Nouv
    If Target.Address = "$D$1" Then
        Application.EnableEvents = False    ' on arrête le surveillance événementielle
        Nouv = Target.Value
        Application .Undo
        Anc = Target.Value
        If Anc = Nouv Then Exit Sub
        Target.Value = Nouv
        If Nouv <> "" Then Call FiltreAd
        Application.EnableEvents = True
    End If
End Sub

Oui, petite erreur !!!

j'ai mis deux fois TRUE pour Application.EnableEvents !

Et en plus il y avait un espace avant le ; de Undo !

le code corrigé, qui modifie aussi la sortie "prématuré" du code car il faut remettre EnableEvets sur TRUE :

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D1")) Is Nothing Then
        Dim Anc, Nouv
        Application.EnableEvents = False ' on arrête le surveillance événementielle
        Nouv = Target.Value
        Application.Undo
        Anc = Target.Value
        If Anc = Nouv Then
            Application.EnableEvents = True
            Exit Sub
        End If
        Target.Value = Nouv
        If Nouv <> "" Then Call FiltreAd
        Application.EnableEvents = True
    End If
End Sub

Merci @ vous Jean-Eric

@ bientôt

LouReeD

Pas de message d'erreur mais ma macro ne s'active pas.

Pourtant quand je clique sur le bouton de ma macro "Filtre Avancé" dans l'onglet Effectif tout fonctionne.

Bonsoir,

avez vous copier/coller le code sur la feuille ?

Pour cela, faire un clic droit sur le nom de l'onglet de la feuille, puis "visualiser le code", et c'est là sur la fenêtre de droite de VBA Editor qu'il faut copier/coller le code, il ne faut pas le mettre dans un module car c'est un code "lié" à la feuille puisqu'il réagit en fonction de ce qui se passe dessus...

@ bientôt

LouReeD

Bonsoir,

avez vous copier/coller le code sur la feuille ?

Pour cela, faire un clic droit sur le nom de l'onglet de la feuille, puis "visualiser le code", et c'est là sur la fenêtre de droite de VBA Editor qu'il faut copier/coller le code, il ne faut pas le mettre dans un module car c'est un code "lié" à la feuille puisqu'il réagit en fonction de ce qui se passe dessus...

@ bientôt

LouReeD

J'ai copié le code en faisant comme tu dis mais ma macro de filtre ne se lance pas...

Bonsoir,

vu que le code se trouve sur la feuille "Imprimer", et que c'est de cette feuille que le code "filtre" est lancé,

quand il y a de codé ceci :

Sub FiltreAd()
'
' FiltreAd Macro
'

'
    Range("B9:K93").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
        Range("B5:K7"), Unique:=False
    ActiveWindow.SmallScroll Down:=-9
End Sub

vous devez spécifier sur quelle feuille le filtre doit avoir lieu donc si c'est la feuille "effectif" vous devriez essayer de changer le code "filtre" avec celui-ci :

Sub FiltreAd()
'
' FiltreAd Macro
'

'
    Sheets("Effectif").Range("B9:K93").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
        Sheets("Effectif").Range("B5:K7"), Unique:=False
    ActiveWindow.SmallScroll Down:=-9
End Sub

Je n'ai pas essayé...

@ bientôt

LouReeD

Bonsoir,

vu que le code se trouve sur la feuille "Imprimer", et que c'est de cette feuille que le code "filtre" est lancé,

quand il y a de codé ceci :

Sub FiltreAd()
'
' FiltreAd Macro
'

'
    Range("B9:K93").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
        Range("B5:K7"), Unique:=False
    ActiveWindow.SmallScroll Down:=-9
End Sub

vous devez spécifier sur quelle feuille le filtre doit avoir lieu donc si c'est la feuille "effectif" vous devriez essayer de changer le code "filtre" avec celui-ci :

Sub FiltreAd()
'
' FiltreAd Macro
'

'
    Sheets("Effectif").Range("B9:K93").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
        Sheets("Effectif").Range("B5:K7"), Unique:=False
    ActiveWindow.SmallScroll Down:=-9
End Sub

Je n'ai pas essayé...

@ bientôt

LouReeD

Ne marche pas non plus...

Je peux de te demander au moins si tu as une idée pour filtrer mon tableau des effectifs en fonction de:

- Au moins un des critères cochés est respecté?

Je coule.

Personne n'a été en mesure de communiquer une réponse jusque ici. Je ne peux me servir que de ce tableau et pas d'autre chose compte tenu des macros liées à ce tableau faite par mon chef.

Merci,

Je veux bien essayer, peut être pas ce soir...

Mais surtout, expliquez moi le fichier :

en D1 je présume que l'on sélectionne un mois, mais il n'y a pas de date sur la feuille effectif, alors à quoi sert le filtre avancé ?

@ bientôt

LouReeD

Je veux bien essayer, peut être pas ce soir...

Mais surtout, expliquez moi le fichier :

en D1 je présume que l'on sélectionne un mois, mais il n'y a pas de date sur la feuille effectif, alors à quoi sert le filtre avancé ?

@ bientôt

LouReeD

En D1 on sélectionne une ligne qui est dans l'onglet Données et correspond à une ligne de critères cochés.

La sélection ainsi faite, elle alimente la zone de critère au dessus du tableau des effectifs, et on informe sur le filtre à effectuer.

Merci infiniment,

Rechercher des sujets similaires à "execution macro changement valeur"