filtrer des lignes en fonction d'une condition
#1
Débutant XLPages

Inscription: 26/07/2013

Messages: 8

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 08-08-2013 18h13

Bonjour à tous !!

 

Me revoilà avec un nouveau problème de filtrage de données.

J'aimerai supprimer automatiquement certaines lignes en fonction de plusieurs données.

 

Voila ma structure actuelle :

date              |  heure     |  numéro            | durée       | Statut

2013-07-26 | 17:23:24 | 04 72 70 97 04 | 00:07:09 | Reçu

2013-07-26 | 17:02:13 | 09 67 00 22 34 | 00:00:00 | Manqué

2013-07-26 | 17:01:44 | 09 67 00 22 34 | 00:00:00 | Manqué

2013-07-26 | 17:01:15 | 09 67 00 22 34 | 00:00:00 | Manqué

2013-07-26 | 16:23:24 | 04 72 70 97 04 | 00:07:09 | Reçu

 

Et la structure que j'aimerai :

date              |  heure     |  numéro            | durée       | Statut

2013-07-26 | 17:23:24 | 04 72 70 97 04 | 00:07:09 | Reçu

2013-07-26 | 17:02:13 | 09 67 00 22 34 | 00:00:00 | Manqué

2013-07-26 | 16:23:24 | 04 72 70 97 04 | 00:07:09 | Reçu

 

En gros c'est une condition à mettre en place :

Si (numéro de téléphone identique sur plusieurs lignes) et si (appel passé dans les 32sec suivantes) alors (suppression de toute les lignes sauf la dernière arrivée (en fonction de l'heure))

 

Je sais pas si c'est bien expliqué. Et je doute que cela soit possible, ou sinon je sous-estime la puissance d'Excel, ce que j'espère être le cas  !! :D

 

Merci pour vos avis d'experts

 

Mickaël

Hors Ligne
Rapport   Haut 

Re: filtrer des lignes en fonction d'une condition
#2
Accro XLPages

Inscription: 23/05/2008
De La Varenne Saint-Hilaire

Messages: 356

Système d'exploitation:
PC
Version Excel utilisée:
2010
Posté le : 08-08-2013 21h51

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

Pièce jointe:
xlsm MikeT.xlsm   [ Taille: 20.75 Ko - Téléchargements: 531 ]
Hors Ligne
Rapport   Haut 

Re: filtrer des lignes en fonction d'une condition
#3
Débutant XLPages

Inscription: 26/07/2013

Messages: 8

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 09-08-2013 18h57

Bonjour Mth,

 

C'est génial, c'est effectivement ce que je cherche à faire.

Ca marche à la perfection sur ton fichier, par contre sur le mien ça ne fonctionne pas.

 

Peut-être est-ce parce que mon tableau comporte plus de 1000 lignes, est-ce que tu as basé le code sur la longueur max du tableau ou sur une valeur arrêtée à 6 lignes ?

 

Maintenant que tu sais que j'ai plus de 1000 lignes sur ce tableau, tu comprends que la deuxième solution risque d'être un peu longue à traiter.

 

Merci en tous les cas, ça me donne une bonne base de travail, je vais tenter de m'instruire sur le visual basic et voir si j'arrive à modifier ton code !!

 

 

Hors Ligne
Rapport   Haut 

Re: filtrer des lignes en fonction d'une condition
#4
Accro XLPages

Inscription: 23/05/2008
De La Varenne Saint-Hilaire

Messages: 356

Système d'exploitation:
PC
Version Excel utilisée:
2010
Posté le : 09-08-2013 23h00

re bonjour Mickaël,

 

J'ai fait une bêtise dans le premier fichier, vraiment désolée, voici en PJ la correction (il s'agit de la formule colonne F qui n'allait pas du tout):

Option Explicit
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(RC[-3]<>R[-1]C[-3],""ok"",IF(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 tu n'es pas fan de VBA tu feras aussi bien avec l'interface Excel:

En cellule F2 tu écris cette formule puis tu la copie vers le bas  jusqu'à la dernière ligne remplie de ton fichier:

=SI(C2<>C1;"ok";SI(B2-B1>0.037;"ok";NA()))

Tu auras donc colonne F soit le libellé "ok", soit l'erreur #N/A

Sélectionne ta colonne F

Dans la menu "Accueil" clique sur "Rechercher et Sélectionner "au bout à droite et choisis "Sélectionner les cellules"

Là tu coches la case "Formules" et tu ne laisses que la case "Erreurs" cochée

Dans ta colonne F seules les cellules #N/A sont maintenant sélectionnées.

En faisant un clic droit sur une de ces cellules au hasard (attention de ne pas tout désélectionner) tu choisis "Supprimer" et tu coches "Ligne entière"

Une fois que tu as validé, toutes les lignes indésirables ont été supprimées.

 

C'est plus long à dire qu'à faire, c'est une petite manip qui te servira à bien des occasions.

 

En espérant que cela puisse t'aider,

 

Bonne soirée,

 

mth

 

 

Pièce jointe:
xlsm Copie de MikeT.xlsm   [ Taille: 20.71 Ko - Téléchargements: 459 ]
Hors Ligne
Rapport   Haut 

Re: filtrer des lignes en fonction d'une condition
#5
Débutant XLPages

Inscription: 26/07/2013

Messages: 8

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 13-08-2013 09h07

Génial, ça fonctionne bien, merci Mth !!

 

Une dernière chose, que je comprend pas, si je souhaite modifier la condition de temps (32sec) et la passer à 1min par exemple. C'est bien la valeur "0.00037037037037037" qui faut que je modifie non ?

Mais je ne comprends pas à quoi correspond exactement ce chiffre.

 

Merci pour ton aide

 

 

Mickaël

Hors Ligne
Rapport   Haut 

Re: filtrer des lignes en fonction d'une condition
#6
Débutant XLPages

Inscription: 26/07/2013

Messages: 8

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 13-08-2013 17h28

J'ai cherché un peu plus et trouver la signification. C'est dans le format de cellule que je peux trouver la correspondance.

 

1min : 0,00069444

 

Merci pour les commentaires sur le code et ton aide !

 

Mickaël

Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes