XL 2016 Filtre dynamique et suppression valeur cellule si le premier filtre est effacée

albatore78

XLDnaute Nouveau
Bonjour @tous,

Pour mieux comprendre ce que je souhaite faire, je vous mets en pièce jointe un modèle.

Dans ce modèle, il y a 3 listes ("Titre_colonne" - "Prénoms" - "Métiers") - filtre dynamique.

Ce que je souhaite, c'est que si le menu déroulant Titres colonnes (case E3) est égal à "" alors information (case E5) doit être égal à "" (et donc effacer les valeurs s'il y en a une dans la cellule). De plus, il faudrait interdire la saisie dans cette cellule tant que la case E3 n'est pas renseignée.

En vous remerciant de votre concours :)
 

Pièces jointes

  • exemple.xlsx
    10.6 KB · Affichages: 12
Solution
En PJ on ne plus rien écrire en E5 si E3 est vide. Avec :
VB:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    Application.EnableEvents = False
    If Not Intersect(Target, Range("E3")) Is Nothing Then
        Range("E5") = ""
    End If
    If Not Intersect(Target, Range("E5")) Is Nothing Then
        If Range("E3") = "" Then Range("E5") = ""
    End If
    Application.EnableEvents = True
End Sub
EnableEvents= false permet d'éviter toute réentrance.

albatore78

XLDnaute Nouveau
Bonsoir Sylvanu,

Cela ne peut pas fonctionner dans mon cas, car une fois que l'ensemble des données est saisi, je viens à l'aide d'une macro, copier l'ensemble de ces valeurs dans une nouvelle feuille et je fais des tableaux croisés dynamiques pour obtenir des statistiques.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
On a le droit aux macro ! :D
Alors en PJ avec ceci :
VB:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("E3")) Is Nothing Then
        If Target = "" Then Range("E5") = ""
    End If
End Sub
Elle s'active si changement en E3, si vide alors on efface E5.
 

Pièces jointes

  • exemple (42) (1).xlsm
    15.1 KB · Affichages: 4

albatore78

XLDnaute Nouveau
On peut se lâcher en VBA et comme ça je vais apprendre pleins de choses. Je suis super preneur :).

On est sur un bon début pour la première partie de ma demande. Cependant, en plus de ça il faudrait (j'avoue que je n'avais pas prévu) que lorsque l'on change la valeur dans la case E3, la case E5 se mette à vide car la valeur n'est plus conforme au filtre dynamique.

Pour la 2ème partie de ma demande peut-on bloquer la cellule E5 si E3 n'est pas renseignée ?
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
C'est encore plus simple :
VB:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("E3")) Is Nothing Then
        Range("E5") = ""
    End If
End Sub
Dès qu'on touche à E3, on vide E5.

Pour la seconde question ..... c'est déjà le cas avec la liste en E5 :
=SI($E$3="";"";INDIRECT($E$3))
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
En PJ on ne plus rien écrire en E5 si E3 est vide. Avec :
VB:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    Application.EnableEvents = False
    If Not Intersect(Target, Range("E3")) Is Nothing Then
        Range("E5") = ""
    End If
    If Not Intersect(Target, Range("E5")) Is Nothing Then
        If Range("E3") = "" Then Range("E5") = ""
    End If
    Application.EnableEvents = True
End Sub
EnableEvents= false permet d'éviter toute réentrance.
 

Pièces jointes

  • exemple (42) (3) .xlsm
    15.3 KB · Affichages: 2

Statistiques des forums

Discussions
312 103
Messages
2 085 308
Membres
102 859
dernier inscrit
Diallokass