Bonjour,
Tu as une méthode qui fonctionne ! Pas mal déjà !
Une proposition pour voir les choses un peu différemment (je n'utilise pas ta colonne C...)
Réaménagements :
- j'ai renommé les boutons (sous forme simple : _OFF, _A, _B, ... _F
Noms à revoir dans d'autres contextes pour appliquer le même type de procédure...
- j'ai renommé la plage à filtrer : PlaF en plage dynamique (aucun impact sur la proposition actuelle, mais cela peut être utile à l'avenir d'avoir un nom auquel on n'a plus à toucher si la plage s'étend). Je n'ai pas supprimé l'ancien nom...
La même macro (Filtrer, voir ci-dessous) est affectée à tous les boutons.
Sub Fitrer()
Dim crit, p$, i%
If Application.Caller = "_OFF" Then
If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData
Else
p = Right(Application.Caller, 1)
With [PlaF]
For i = 1 To .Rows.Count
If Right(.Cells(i, 2), 1) = p Then crit = crit & ";" & .Cells(i, 1)
Next i
crit = Replace(crit, ";", "", 1, 1)
crit = Split(crit, ";")
On Error GoTo errvide
.AutoFilter 1, crit, xlFilterValues, , False
End With
End If
Exit Sub
errvide:
[PlaF].AutoFilter 1, "=", , , False
End Sub
La macro identifie le bouton qui l'a lancée : si _OFF, elle affiche tout,
si autre, elle récupère le nom (personne) pour le rechercher en B,
lorsqu'elle le trouve, elle mémorise la valeur en A dans une chaîne,
transforme cette chaîne en tableau pour appliquer un filtre l'utilisant comme critère,
l'absence de critère entrainerait une erreur, récupérée pour renvoyer à une gestion d'erreur qui redéfinit le filtre pour ne rien afficher.
Cordialement.