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) ?
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)
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.
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 SubBsAlv vous etes super merci beaucoup!
Merci aux participants et Excel-pratique, Meilleur forum sur excel a international !