Filtrage d'une liste assez massive

Pour les lignes vides, on peut remplacer les cellules vide par EMPTY peut etre pour eviter les beugs

j'ai deja essaye a vrai dire de remplacer toutes les cellules vide par empty et demarrer le macro mais j'ai toujours eu ce probleme etrange que j'ai du mal a decrire

le fichier en annexe n'a que 100 lignes, avec les formats conditionnels et zip, il était encore > 2MB.

Donc remplacer ma "sheet1" avec le vrai "sheet1", ajoute pour ces 70k lignes la formule en colonne G et le format conditionel & remplace la formule par la valeur pour verifier qu'il n'y pas de décalage dans les données (ou croyez moi !?!) avec cette version.

Cette solution claque tout ! Vous etes vraiment des PROS sur ce forum ! Merci beaucoup BsAlv !

Juste une petite question, si je souhaites ajouter ou enlever des colonnes avant mon filtrage me suffit-il de modifier cette ligne de code ou devrais rentrer dans le programme et le modifier (ce que je ne pourrais faire) ?

image

Bonjour à tous,

j'ai jeté un oeil au code et, si je peux me permettre, il y a un manque.
'Contient' n'est pas suffisant et génère des anomalies.
Par exemple si on demande "CTO" il faudrait filtrer "CTO ", " CTO" et "CTO" seul, sinon director part dedans.
eric

Oui eriic, c'est juste c'est pour cela que j'ai procede de cette facon (en utilisant des espaces)

image

Mais je pense qu'il n'y pas de meilleures approches dans ce cas la et que BsAlv a fait au mieux compte tenu des circonstances. Si il connaissait les mots cles que je souhaites utiliser il aurait probablement fournit une solution plus sophistique mais il n'a aucune connaissance des mots cles que je souhaites filtrer, et moi non plus d'ailleurs je fais ca au fur et a mesure en consultant ma liste.. En tout les cas, sa solution me suffit et elle est tres perfomante :) Encore merci a lui !

Quand je touches a une colonne avant de faire un nouveau filtrage cela fonctionne plus je viens de tester en ajoutant une nouvelle colonne

Comment faudrait-il s'y prendre pour ajouter ou supprimer des colonnes (autour de la colonne job titles) tout en gardant le programme operationel ?

j'ai pas mal de colonne que je dois ajouter avant d'executer cette operation de filtrage.

up

nouvelle version de la macro : elle cherche la colonne "Position" et tout fonctionne. Si cette colonne n'existe pas, alors, elle s'arrête .... Vous pouvez effacer tout le contenu du module et remplacer par ceci ...

Si vous ajoutez ou effacez des colonnes et plus tard, vous ajoutez des données à une feuille existante, il y aura un décalage dans les colonnes anciennes et nouvelles ... ,

Sub Move_items()
     Dim sh    As Worksheet, SH1, sName, iPosition
     Application.ScreenUpdating = False
     aa = Range("TBL_Clefs").Value2
     Set SH1 = Sheets("sheet1")
     With SH1

     '*****************DETERMINER LA COLONNE POSITION ********************************************
          iPosition = Application.Match("Position", .Rows(1), 0)     '---> trouver la colonne clef nommé "Position" !!!!!!
          If Not IsNumeric(iPosition) Then MsgBox "il n'y a pas de colonne position", vbCritical: Exit Sub
     '******************************************************************************************

          If .AutoFilterMode Then .AutoFilterMode = False

          For i = 1 To UBound(aa)
     '********* existe cette feuille ??? ***********************************
               sName = Left(CStr(IIf(aa(i, 2) <> "", aa(i, 2), aa(i, 1))), 30)     'max 30 charactères
               On Error Resume Next
               Set sh = Nothing
               Set sh = Sheets(sName)
               On Error GoTo 0
               If sh Is Nothing Then
                    Sheets.Add(after:=Sheets(Sheets.Count)).Name = sName
                    SH1.Rows(1).Copy
                    ActiveSheet.Range("A1").PasteSpecial xlPasteAll
               End If

     '**************MOVE to cette feuille ************************************
               Set sh = Sheets(sName)
               Set c = .Range(.Range("A1"), .Range("A1").SpecialCells(xlLastCell))
               MsgBox c.Address
               c.AutoFilter iPosition, "*" & aa(i, 1) & "*"     'filtrer 5ième colonne "position"
               If c.Parent.Name <> ActiveSheet.Name Then Application.Goto c.Parent.Range("a1"), 1
               Application.StatusBar = aa(i, 1): DoEvents     'montrer prgrès sur le statusbar

               b = (c.Columns(1).SpecialCells(xlVisible).Count > 1)     'nombre de lignes visible après filtre > 1 (entête toujours visible !!!)
               If b Then
                    c.Offset(1).SpecialCells(xlVisible).Copy     'copier plage visible sauf entêtes
                    sh.Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteAll     'coller en dessous l'autre feuille
                    Application.DisplayAlerts = False     'ne pas poser des questions
                    c.Offset(1).SpecialCells(xlVisible).EntireRow.Delete     'delete ces lignes
                    Application.DisplayAlerts = False
               End If
               sh.Range("A1").CurrentRegion.EntireColumn.AutoFit     'ajuster les colonnes
               c.AutoFilter     'reset filtre
          Next
     End With
     Application.StatusBar = ""
End Sub

BsAlv vous etes super merci beaucoup!

Merci aux participants et Excel-pratique, Meilleur forum sur excel a international !

Rechercher des sujets similaires à "filtrage liste assez massive"