Macro automatique avec formule dans cellule

Fermé
Bipbip03 - 19 mars 2020 à 14:46
 bipbip03 - 21 mars 2020 à 16:11
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.
A voir également:

3 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié le 21 mars 2020 à 09:06
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
0
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.
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
21 mars 2020 à 13:48
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
0
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é.
:)
0