Rapport de message :*
 

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