Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 Limite de filtration via un dictionnaire

Robidic

XLDnaute Nouveau
Bonjour
Comme on ne peut pas exclure plusieurs valeurs par un autofiltre j utilise un dictionnaire pour en exclure certaines valeurs sauf que je me suis rendu compte que mon code fonctionne sur une quantité de ligne et je ne comprend pas pourquoi...
Au delà de 2000 lignes mon code n exclus lus les valeurs que je veux...
Merci de votre aide
Voici mon code:

VB:
    Dim d As Object, c As Range, x, i As Long, ws As Worksheet
    Dim tmp As String
  
    'pour supprimer le Dictionnaire de la mémoire
    Set d = Nothing
  
    Set ws = ActiveSheet
    Set d = CreateObject("scripting.dictionary")
    x = Application.Transpose(Range("J1", Cells(Rows.Count, "J").End(xlUp)))

    For i = 1 To UBound(x, 1)
        d(x(i)) = 1
    Next

    For Each c In ws.Range("J2", Cells(Rows.Count, "J").End(xlUp))
  
        tmp = c.Value
             
        If d.Exists(tmp) And (tmp) = "COK" Then d.Remove (tmp) 'élimine COK
        If d.Exists(tmp) And (tmp) = "RSA" Then d.Remove (tmp) 'élimine RSA
        If d.Exists(tmp) And (tmp) = "CIN" Then d.Remove (tmp) 'élimine CIN
        If d.Exists(tmp) And (tmp) = "AAN" Then d.Remove (tmp) 'élimine AAN
        If d.Exists(tmp) And (tmp) = "SSC" Then d.Remove (tmp) 'élimine SSC
        If d.Exists(tmp) And (tmp) = "CNA" Then d.Remove (tmp) 'élimine CNA

    Next
  
    With ws.Cells(1, 1).CurrentRegion
        .AutoFilter 10, Array(d.Keys), 7
    End With
 
Dernière édition:
Solution
en retour une macro
VB:
Sub exclure()

With ActiveSheet
    .AutoFilterMode = False
    fin = .UsedRange.Rows.Count
    Set dico = CreateObject("scripting.dictionary")
    For i = 2 To fin
        tmp = .Range("J" & i)
        If Not dico.exists(tmp) And Trim(UCase(tmp)) <> "COK" And Trim(UCase(tmp)) <> "RSA" And Trim(UCase(tmp)) <> "CIN" And Trim(UCase(tmp)) <> "AAN" And Trim(UCase(tmp)) <> "SSC" And Trim(UCase(tmp)) <> "CNA" Then
            dico.Add tmp, tmp
        End If
    Next i
    '.Range("L3").Resize(dico.Count) = Application.Transpose(dico.keys) 'pour voir le résultat des exclusions
    .UsedRange.AutoFilter 10, Array(dico.keys), 7
End With
Set dico = Nothing
End Sub

ton problème vient des espaces et/ou minuscules

Robidic

XLDnaute Nouveau
Une petite question complémentaire
je voudrai maintenant que j ai filtré remplacer ces codes qui ne ne sont bon par XXX et donc me servir du dico qui a récupérer ces codes erronés.
je ne sais pas comment faire

ce code ci-dessous ne remplace bien évidemment que le premier code...

Selection.Replace What:=Dico.Keys, Replacement:="XXX", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
 

Robidic

XLDnaute Nouveau
Code:
 For Each myKey In Dico
 
         Selection.Replace What:=myKey, Replacement:="XXX", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
   Next
Voilà c est fait , Merci
 

Discussions similaires

Réponses
49
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…