Filtrer tout sauf plusieurs valeurs qui se trouvent dans une cellule

Bonjour,

J'aimerais filtrer Mon_tableau, par plusieurs critères qui se trouvent dans la cellule B1 de ma feuille CRIT (ne pas afficher quand ces valeurs existent).

Comme : Pomme,Poire,Orange,Banane

Le filtrage fonction très bien quand les valeurs existent dans Mon_tableau, mais lorsque la valeur Banane n'existe pas, mon code me donne une erreur.

Comment je peux ignorer quand une valeur n'existe pas et quand même réussir à faire mon filtrage ?

Voici mon code VBA:

Sub test()
    Dim d As Object, crit, i%
    Set d = CreateObject("Scripting.Dictionary")
    With Sheets("DATA").ListObjects("Mon_tableau").Range
        .AutoFilter
        For i = 2 To .Rows.Count
            d(.Cells(i, 7).Value) = ""
        Next i
        crit = Split(ThisWorkbook.Worksheets("CRIT").Range("B1").Value, ",")
        For i = 0 To UBound(crit)
            d.Remove (crit(i))
        Next i
        crit = d.keys
        .AutoFilter 7, crit, xlFilterValues

    End With
End Sub
7test.xlsm (15.57 Ko)

Bonjour,

Essayez ceci:

Sub test()
    Dim d As Object, crit, i%
    Set d = CreateObject("Scripting.Dictionary")
    With Sheets("DATA").ListObjects("Mon_tableau").Range
        .AutoFilter
        For i = 2 To .Rows.Count
            d(.Cells(i, 7).Value) = ""
        Next i
        crit = Split(ThisWorkbook.Worksheets("CRIT").Range("B1").Value, ",")
        For i = 0 To UBound(crit)
            On Error Resume Next
            d.Remove (crit(i))
            If Err.Number > 0 Then On Error GoTo 0
        Next i
        crit = d.keys
        .AutoFilter 7, crit, xlFilterValues

    End With
End Sub

Cdlt

Bonjour,

On peut ignorer l'erreur et passer à l'instruction suivante du code en ajoutant "On Error Resume Next" en début de procédure.

@Arturo83 : je ne saisis pas bien l'association de "On Error Resume Next" et de "On Error GoTo 0". Au plaisir de te lire.
@Arturo83 : je ne saisis pas bien l'association de "On Error Resume Next" et de "On Error GoTo 0". Au plaisir de te lire.
il suffit de faire le test pour comprendre,

"on error resume next" va passer si l'erreur se présente 1 fois, mais dans une boucle for, l'erreur peut se reproduire plusieurs fois, et là, ça le marchera plus. il faut réinitialiser la gestion d'erreur avec On error goto 0, ainsi le cycle de détection des erreurs est reparti pour un tour.

Cdlt

@Arturo83: Je vous remercie, c'est parfait ! Je n'avais pas penser à On Error :)

Merci pour ton retour Arturo83

il suffit de faire le test pour comprendre,

J'avais bien testé, mais pas de problème rencontré.

"on error resume next" va passer si l'erreur se présente 1 fois, mais dans une boucle for, l'erreur peut se reproduire plusieurs fois, et là, ça le marchera plus

Avec le test ci-dessous, cela fonctionne bien même si l'erreur se reproduit plusieurs fois :

Sub testOnErrorResumeNext()
    Dim i%
    On Error Resume Next

    For i = 1 To 5
        MsgBox (i / 0)
    Next
    MsgBox ("boucle terminée")

End Sub

Encore merci d'avance pour ton retour.

Rechercher des sujets similaires à "filtrer tout sauf valeurs qui trouvent"