Non, la santé mentale de cjo78 n'est pas à mettre en doute, je reproduis bien son problème dans la version 2003 !
Si d'autres peuvent tester dans les versions ultérieures car il me semble que ce soit un dysfonctionnement ponctuel,
bref un bug quoi !
Car je le reproduis aussi avec une autre erreur ne fonctionnant déjà pas en filtre manuel !
Je confirme si un filtre est déjà activé dans la feuille de calcul,
Selection.AutoFilter quelque soit la plage de cellules sélectionnée fonctionne bien …
… mais déclenchera une erreur dans le cas contraire ou si la sélection n'est pas une cellule !
Ma piste n'a rien donné mais a été quand même utile par la suite.
Une cellule en erreur correspond à un numéro d'erreur mais hélas impossible à passer dans le filtre, en tout cas en version 2003 …
L'astuce consiste alors à récupérer ce numéro d'erreur en sélectionnant une cellule en erreur dans la feuille de calcul
puis dans la fenêtre
Exécution de l'environnement VBA taper
? activecell puis valider …
Mon code est peut-être bien de la bidouille mais a le mérite d'obtenir le résultat escompté !
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| Function SpecCells(SCV As XlSpecialCellsValue, Optional Rg As Range) As Range
Dim Rc As Range, Rf As Range
If Rg Is Nothing Then Set Rg = ActiveSheet.UsedRange
On Error Resume Next
Set Rc = Rg.SpecialCells(xlCellTypeConstants, SCV)
Set Rf = Rg.SpecialCells(xlCellTypeFormulas, SCV)
If Not Rc Is Nothing And Not Rf Is Nothing Then Set SpecCells = Union(Rc, Rf) _
Else Set SpecCells = IIf(Rf Is Nothing, Rc, Rf)
Set Rc = Nothing: Set Rf = Nothing: Set Rg = Nothing
End Function
Sub Demo()
Dim Cel As Range, Rg As Range
COL& = 1
[H1:H10].AutoFilter COL, "#VALEUR!"
With ActiveSheet.AutoFilter
Select Case .Filters(COL).Criteria1
Case "=#NOM?"
V = CVErr(2029)
Case "=#VALEUR!"
V = CVErr(2015)
End Select
If IsError(V) Then
Set Rg = SpecCells(xlErrors, .Range.Columns(COL))
If Not Rg Is Nothing Then
Application.ScreenUpdating = False
For Each Cel In Rg
If Cel.Value = V Then Rows(Cel.Row).Hidden = False
Next
Set Rg = Nothing
Application.ScreenUpdating = True
End If
End If
End With
End Sub |
Afin d'accélérer la procédure Demo, seules les cellules en erreur sont traitées.
Adapter les lignes n°19 & 20 pour la colonne du filtre et sa plage …

__________________________________________________________________________________________
Merci de cliquer sur

pour chaque message ayant aidé puis sur

pour clore cette discussion …
__________________________________________________________________________________________
Quand une femme offre son soutien, est-ce par sein-pathie ?!
Partager