Re: filtrer des lignes en fonction d'une condition |
Titre du sujet : Re: filtrer des lignes en fonction d'une condition par Mth le 08/08/2013 21:51:01 Bonjour Mickaël, bonjour à tous,
Une suggestion par macro avec ce code, mais on peut aussi bien le faire à la main avec une formule et une suppression de lignes si cela te semble trop compliqué.
Le code dans un module standard, affecté au bouton "Go" dans la feuille 1 du fichier joint: Sub Macro1() Dim Dlig As Long With Sheets("Feuil1") 'test pour éviter de traiter plusieurs fois les données If .Cells(1, 6) = "Données traitées" Then Exit Sub 'calcul de la dernière ligne Dlig = .Cells(Rows.Count, 1).End(xlUp).Row 'tri des données With .Sort.SortFields .Clear .Add Key:=Range("A2:A" & Dlig), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .Add Key:=Range("B2:B" & Dlig), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Feuil1").Sort .SetRange Range("A1:E" & Dlig) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End With 'formule de test colonne F(même numéro, appel > 32 secondes) .Range("F2").FormulaR1C1 = _ "=IF(AND(SUMPRODUCT((R2C1:R6C1=RC[-5])*(R2C3:R6C3=RC[-3]))>1,RC[-4]-R[-1]C[-4]>0.00037037037037037),""ok"",NA())" .Range("F2").Copy .Range("F2:F" & Dlig) ' élimination des erreurs .Range("F3:F" & Dlig).SpecialCells(xlCellTypeFormulas, 16).EntireRow.Delete 'Efface la colonne F .Columns("F:F").ClearContents 'indicateur données traitées .Cells(1, 6) = "Données traitées" End With End Sub Si non avec une formule voir feuille 2 du fichier joint
Vois si cela peut t'aider,
Très bonne soirée,
mth |
Forums