VBA - Macro avec filtre automatique
Bonjour tout le monde,
Voilà je rencontre un problème VBA, j'aimerai pouvoir en fonction du nom choisi dans la liste déroulante de la cellule A3 de l'onglet Liste_déroulante, pouvoir filtrer la colonne A de l'onglet Tableau en fonction de ce nom, voir ci-dessous le bout de code :
Sub Test()
'
' Test Macro
'
Range("A3").Select
Selection.Copy
Sheets("Tableau").Select
ActiveSheet.Range("$A$2:$A$20").AutoFilter Field:=1, Criteria1:="Michel"
End Sub
Mon problème est que la macro garde le premier nom choisi, qu'elle serait le bout de code pour que le nom change en fonction du choix dans la liste déroulante ?
D'avance merci pour votre aide
Ps : Je joins mon fichier ce sera peut-être plus clair
Re,
J'ai trouvé le bout de code qu'il me manquait en testant un peu
Sheets("Formulaire").Range("I5")
Il fallait tout simplement mettre le nom de ma feuille et la cellule au niveau du critère en remplacement du nom de la personne
Merci tout de même
Bonjour Rémi, bonjour le forum,
En pièce jointe ton fichier modifié avec la macro événementielle Change ci-dessous.
Modifie un prénom dans A3 et...
Le code :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim OL As Worksheet 'déclare la variable OL (Onglet Liste_deroulante)
Dim OT As Worksheet 'déclare la variable OL (Tableau)
If Target.Address <> "$A$3" Then Exit Sub 'si le changement a lieu ailleurs qu'en A3, sort de la procédure
Set OL = Worksheets("Liste_deroulante") 'définit l'onglet OL
Set OT = Worksheets("Tableau") 'définit l'onglet OT
'si A3 est effacée annule le filtre. sort de la procédure
If Target.Value = "" Then OT.Range("A2").CurrentRegion.AutoFilter: Exit Sub
'filtre la plage avec la valeur de A3 commre critère
OT.Range("A2").CurrentRegion.AutoFilter Field:=1, Criteria1:=Target.Value
OT.Activate 'active l'onglet OT
End SubLe fichier :
Bonjour,
Une autre proposition à étudier.
Cdlt.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$3" Then
With Worksheets("Tableau")
If .FilterMode Then .ShowAllData
If Not IsEmpty(Target.Value) Then
.Cells(2, 1).CurrentRegion.AutoFilter Field:=1, Criteria1:=Target.Value
End If
.Activate
End With
End If
End SubBonjour Thau Thème,
Merci pour le code et le fichier
J'ai modifié un peu ton code mais cela ne fonctionne pas ....
Comment puis-je dire que je veux que mes 3 champs A3, B3, C3 doivent être renseigné pour éxecution de la macro ?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim OL As Worksheet 'déclare la variable OL (Onglet Liste_deroulante)
Dim OT As Worksheet 'déclare la variable OL (Tableau)
If Target.Address <> "$A$3" And "$B$3" And "$C$3" Then Exit Sub 'si le changement a lieu ailleurs qu'en A3, sort de la procédure
Set OL = Worksheets("Liste_deroulante") 'définit l'onglet OL
Set OT = Worksheets("Tableau") 'définit l'onglet OT
'si A3 est effacée annule le filtre. sort de la procédure
If Target.Value = "" Then OT.Range("A2", "B2", "C2").CurrentRegion.AutoFilter: Exit Sub
'filtre la plage avec la valeur de A3 commre critère
OT.Range("A2", "B2", "C2").CurrentRegion.AutoFilter Field:=1, Criteria1:=Target.Value
OT.Activate 'active l'onglet OT
End Sub
Je suis désolé je n'ai pas réussi à tout comprendre même si tu m'as mis des indications à côté
Je te joins aussi le fichier modifié
Merci pour ton aide en tous cas
Bonjour,
Une réponse ?
Cdlt.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet
If Not Intersect(Target, Me.Range("A3:C3")) Is Nothing And Target.CountLarge = 1 Then
Set ws = Worksheets("Tableau")
If ws.FilterMode Then ws.ShowAllData
If WorksheetFunction.CountA(Me.Range("A3:C3")) = 3 Then
With ws
.Cells(2, 1).CurrentRegion.AutoFilter Field:=1, Criteria1:=Target.Value
.Activate
End With
End If
End If
End SubBonjour Jean-Eric,
Il est top ton code
Je sais pas si c'est clair comme j'explique le sujet
En tous cas merci de m'aider un peu, je ne comprends pas grand choses sur le code vba pour le moment...