Macro automatique avec formule dans cellule

Signaler
-
 bipbip03 -
Bonjour,

J'espère être assez clair :

Je souhaite exécuter une macro dans une feuille qui me permet de filtrer toutes les lignes de mon tableau à partir de la valeur d'une cellule qui elle même est déterminer par une formule qui vient chercher la valeur d'une cellule d'une autre feuille. Malheureusement si je ne clique pas sur la cellule, la macro ne s'exécute pas.

Private Sub Worksheet_Change(ByVal Target As Range)

' Si le changement à lieu en cellule "C3"
If Not Application.Intersect(Target, Range("C3")) Is Nothing Then
ThisWorkbook.Sheets("Pré-requis").AutoFilterMode = False
If Target.Value = "TST AER" Then
' Filtre en Caisse TST AER, sur la colonne 9, avec comme critère la valeur entrée
ThisWorkbook.Sheets("Pré-requis").Range("A7").AutoFilter Field:=9, Criteria1:=Target.Value
End If
If Target.Value = "TST EME" Then
' Filtre en Caisse TST EME, sur la colonne 9, avec comme critère la valeur entrée
ThisWorkbook.Sheets("Pré-requis").Range("A7").AutoFilter Field:=9, Criteria1:=Target.Value
End If
If Target.Value = "TST SOU" Then
' Filtre en Caisse TST SOU, sur la colonne 9, avec comme critère la valeur entrée
ThisWorkbook.Sheets("Pré-requis").Range("A7").AutoFilter Field:=9, Criteria1:=Target.Value
End If
If Target.Value = "TST EP" Then
' Filtre en Caisse TST EP, sur la colonne 9, avec comme critère la valeur entrée
ThisWorkbook.Sheets("Pré-requis").Range("A7").AutoFilter Field:=9, Criteria1:=Target.Value
End If
If Target.Value = "TST BAT" Then
' Filtre en Caisse TST BAT, sur la colonne 9, avec comme critère la valeur entrée
ThisWorkbook.Sheets("Pré-requis").Range("A7").AutoFilter Field:=9, Criteria1:=Target.Value
End If
If Target.Value = "TST TER" Then
' Filtre en Caisse TST TER, sur la colonne 9, avec comme critère la valeur entrée
ThisWorkbook.Sheets("Pré-requis").Range("A7").AutoFilter Field:=9, Criteria1:=Target.Value
End If
If Target.Value = "BR" Then
' Filtre en Caisse BR, sur la colonne 9, avec comme critère la valeur entrée
ThisWorkbook.Sheets("Pré-requis").Range("A7").AutoFilter Field:=9, Criteria1:=Target.Value
End If
If Target.Value = "BC" Then
' Filtre en Caisse BC, sur la colonne 9, avec comme critère la valeur entrée
ThisWorkbook.Sheets("Pré-requis").Range("A7").AutoFilter Field:=9, Criteria1:=Target.Value
End If
If Target.Value = "Electricien" Then
' Filtre en Caisse Electricien, sur la colonne 9, avec comme critère la valeur entrée
ThisWorkbook.Sheets("Pré-requis").Range("A7").AutoFilter Field:=9, Criteria1:=Target.Value
End If
If Target.Value = "BE" Then
' Filtre en Caisse BE, sur la colonne 9, avec comme critère la valeur entrée
ThisWorkbook.Sheets("Pré-requis").Range("A7").AutoFilter Field:=9, Criteria1:=Target.Value
End If
If Target.Value = "TEL" Then
' Filtre en Caisse TEL, sur la colonne 9, avec comme critère la valeur entrée
ThisWorkbook.Sheets("Pré-requis").Range("A7").AutoFilter Field:=9, Criteria1:=Target.Value
End If
End If
End Sub

Pouvez-vous m'aider ? Sachant qu'il y a certainement moyen de simplifier la macro !!!

Merci par avance.

3 réponses

Messages postés
15146
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
5 avril 2020
1 248
Bonjour,
En effet marche et c'est un peu normal.
Code a mettre dans le VBA de la feuille de la cellule de la formule. Adapter la cellule a verifier.
Si vous avez des infos a ajouter pensez a mettre a jour la variable (TVal1 ou TVal2) que vous utiliserez

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim TVal1, TVal2
    
    TVal1 = "TST AER_TST EME_TST SOU_TST EP_TST BAT_TST TER_BR_BC_Electricien_TEL"
    'TVal2 = Array("TST AER", "TST EME", "TST SOU", "TST EP", "TST BAT", "TST TER", "BR", "BC", "Electricien", "TEL")
    
    If Target.Value = "" Or Target.Count > 1 Then Exit Sub
    'adapter la cellule de la feuille qui change
    If Not Application.Intersect(Target, Range("C3")) Is Nothing Then
        'ThisWorkbook.Sheets("Pr?-requis").AutoFilterMode = False
        '--------------------- recherche dans une chaine de caracteres ------------
        If InStr(1, TVal1, Target.Value) > 0 Then
            ' Filtre en Caisse Electricien, sur la colonne 9, avec comme crit?re la valeur entr?e
            ThisWorkbook.Sheets("Pr?-requis").Range("A7").AutoFilter Field:=9, Criteria1:=Target.Value
        End If
        '------------------- recherche dans un tableau ---------
        'Ok = Application.Match(Target.Value, TVal2, 0)
        'If IsNumeric(Ok) Then    'test si trouve
        '    ' Filtre en Caisse Electricien, sur la colonne 9, avec comme crit?re la valeur entr?e
        '    ThisWorkbook.Sheets("Pr?-requis").Range("A7").AutoFilter Field:=9, Criteria1:=Target.Value
        'End If
        '----------------------------------------------------------
    End If
End Sub
Bonjour,

Merci pour votre réponse.
J'ai utilisé votre correctif et cela ne fonctionne toujours pas.
En effet, lorsque je renseigne la valeur dans ma première feuille, je suis toujours obliger de double cliquer dans l'autre feuille sur la cellule équivalente pour que la macro fonctionne.
Voici mon fichier sous le lien suivant :
https://www.cjoint.com/c/JCvkQUQxrfv
D'avance merci pour votre aide.
Messages postés
9252
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
4 avril 2020
1 745
Bonjour à tous les deux

C'est dans e module de la feuille Caisse TST qu'il faut mettre le code (qui remplace le tien)

Cdlmnt
Merci à vous deux cela fonctionne parfaitement.
Merci mille fois pour votre temps et bon courage en cette période de trouble de la société.
:)