IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Suppression de lignes par masques & doublons [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Suppression de lignes par masques & doublons
    Bonjour à tous ,

    j'aurais besoin de vos lumières, car je dois bien avouer que sur ce coup là je ne sais pas du tout comment m'y prendre ....


    Je dispose d'une feuille dans laquelle j'extrais tout un tas de données de facon automatique.

    Seulement il me faudrait une macro permettant de nettoyer cette feuille , une fois mon extraction terminée.

    J'aimerais supprimer les lignes qui ne comporte pas certains filtres dans la colonne C ( par exemple TS , EMN , TP , laisseraient passer TS/ATS/EMN/EMN+1/TP/ATP etc ... ).

    Il me faut donc définir des masques que je tolérerai , pour supprimer tout le reste.

    Et il me faudrait également supprimer les lignes qui sont en doublon ( en doublon sur tous les champs ).

    Voilà. C'est sans doute pas si compliqué que ca , mais pour ma part , ca me semble bien compliqué.

    Par avance , merci
    Fichiers attachés Fichiers attachés

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Début de piste , j'ai trouvé comment filtrer grâce à des masques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For Each Cellule In Range("I2:O" & h)
        If Cellule.Value Like "EMN" & "*" Or Cellule.Value Like "*" & "TS" & "*" Or Cellule.Value Like "EC" ...... Then
    Certes c'est ptet pas optimisé , car au bout de 15 masques ca fait une ligne de code sans fin , mais au moins ca fonctionne ^^

    Me reste encore à trouver comment virer les doublons , et ptet à optimiser ma ligne ci dessus ...

  3. #3
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 656
    Points
    1 656
    Par défaut
    salut,

    dans l'inputbox, tu mets les différents filtres séparé par une virgule.
    J'ai fais des tests apparemment sa marche pour tous les cas mais dis moi au cas l'algo est chier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Sub microb76()
     
    Dim rep As String
    Dim filtre() As String
    Dim trouve As Boolean
     
     
    rep = InputBox("Quels filtres voulez-vous utilsez ?", "Filtres", "Séparer les différents filtres par une virgule")
     
    filtre = Split(rep, ",")
     
    For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
     
        For j = 0 To UBound(filtre)
     
            trouve = False
            If InStr(Cells(i, "C").Value, filtre(j)) <> 0 Then
                trouve = True
                Exit For
            End If
     
        Next
     
        If trouve = False Then Cells(i, "C").EntireRow.Delete
     
    Next
     
    End Sub
    Si la réponse vous convient, un petit ça encourage.
    Avant tout nouveau post, pensez à : la FAQ, Google et la fonction Recherche
    Si vous devez poster, pensez à: Ecrire en français, la balise [CODE] (#) et surtout

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Salut Nchal ,

    et merci d'avoir pris le temps de me répondre.

    Le problème, c'est que je ne souhaite pas utiliser une inputbox , car j'aimerais tout automatiser. Je définis les filtres une bonne fois , et ensuite tout se fait tout seul.

    Le second problème , est la gestion des doublons ... Je ne sais pas trop comment m'y prendre

  5. #5
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Tu devrais regarder du coté des Filtres élaborés. Ils te permettront d'obtenir ta liste filtrée suivant tes critères et sans doublon.

    Cordialement.

  6. #6
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 656
    Points
    1 656
    Par défaut
    Salut,

    Voilà le même code avec les filtres en dur.
    MAis j'ai pas compris ton histoire de doublon. Il ne peut pas y avoir 2 lignes avec les valeurs ? pour ton xls, les lignes 6 et 7 sont à supprimer ou on en laisse une ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Sub microb76()
     
    Dim rep As String
     
    Dim trouve As Boolean
     
     
    'rep = InputBox("Quels filtres voulez-vous utilsez ?", "Filtres", "Séparer les différents filtres par une virgule")
     
    'filtre = Split(rep, ",")
     
    Dim filtre(2) As String
     
    filtre(0) = "TS"
    filtre(1) = "EMN"
    filtre(2) = "TP"
     
    For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
     
        For j = 0 To UBound(filtre)
     
            trouve = False
            If InStr(Cells(i, "C").Value, filtre(j)) <> 0 Then
                trouve = True
                Exit For
            End If
     
        Next
     
        If trouve = False Then Cells(i, "C").EntireRow.Delete
     
    Next
     
    End Sub
    Si la réponse vous convient, un petit ça encourage.
    Avant tout nouveau post, pensez à : la FAQ, Google et la fonction Recherche
    Si vous devez poster, pensez à: Ecrire en français, la balise [CODE] (#) et surtout

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par nchal Voir le message
    MAis j'ai pas compris ton histoire de doublon. Il ne peut pas y avoir 2 lignes avec les valeurs ? pour ton xls, les lignes 6 et 7 sont à supprimer ou on en laisse une ?

    [/code]
    Et bien en fait , je ne veux en laisser qu'une. Car en automatisant mon extraction , je me retrouve parfois avec plusieurs lignes identiques ( jusqu'à 6 ... ). Il me faudrait donc épurer mon extraction , pour ne laisser qu'une seule ligne à chaque fois que j'ai un doublon ( doublon sur toutes les colonnes tel que que les lignes 6 & 7 ). donc une macro que je pourrais lancer une fois mon extraction terminée afin d'épurer tout ca

  8. #8
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 656
    Points
    1 656
    Par défaut
    Salut,

    Avec l'enregistreur de macro, j'ai réussi à trouver le code pour utiliser un filtre avancé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Sub microb76()
     
    Dim rep As String
     
    Dim trouve As Boolean
     
     
    'rep = InputBox("Quels filtres voulez-vous utilsez ?", "Filtres", "Séparer les différents filtres par une virgule")
     
    'filtre = Split(rep, ",")
     
    Dim filtre(2) As String
     
    filtre(0) = "TS"
    filtre(1) = "EMN"
    filtre(2) = "TP"
     
    For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
     
        For j = 0 To UBound(filtre)
     
            trouve = False
            If InStr(Cells(i, "C").Value, filtre(j)) <> 0 Then
                trouve = True
                Exit For
            End If
     
        Next
     
        If trouve = False Then Cells(i, "C").EntireRow.Delete
     
    Next
    
    UsedRange.AdvancedFilter Action:=xlFilterInPlace, Unique:=True
    
    End Sub
    Mais comme le dit gFTZ82, tu n'as pas vraiment besoin d'une macro, il te suffit de faire un filtre avancé (Onglet Données)
    Quoique, tu pourrais avoir des problèmes car tu veux que si le filtre soit EMN, il garde %EMN%.
    Si la réponse vous convient, un petit ça encourage.
    Avant tout nouveau post, pensez à : la FAQ, Google et la fonction Recherche
    Si vous devez poster, pensez à: Ecrire en français, la balise [CODE] (#) et surtout

  9. #9
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Quoique, tu pourrais avoir des problèmes car tu veux que si le filtre soit EMN, il garde %EMN%.
    Pas de problème avec un critère ="=*EMN*" ou plusieurs critères ="=*TP*",="=*TS*",="=*EMN*", etc..

    Cordialement.

    EDIT : je joints un fichier exemple, ça peut aider ...
    Fichiers attachés Fichiers attachés

  10. #10
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 656
    Points
    1 656
    Par défaut
    Salut,

    Merci de la précision gFZT82.

    Donc pour conclure, soit tu utilises ma macro, soit tu utilises un filtre avancé.
    Si la réponse vous convient, un petit ça encourage.
    Avant tout nouveau post, pensez à : la FAQ, Google et la fonction Recherche
    Si vous devez poster, pensez à: Ecrire en français, la balise [CODE] (#) et surtout

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Hello ,

    J'ai testé vos solutions , et finalement je préfère le système de filtre élaboré , plus souple et plus facile à faire évoluer.

    Merci à vous deux

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Suppression de lignes par segment de contenu dans une case.
    Par Anto_NEX dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/06/2012, 10h42
  2. Suppression de ligne par une case à cocher
    Par adam974 dans le forum Langage
    Réponses: 15
    Dernier message: 09/01/2009, 15h55
  3. suppression de ligne par macro
    Par stefano dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/02/2008, 14h41
  4. [access/vb.net] Suppression ligne par rapport date
    Par t1marlartiste dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 13/07/2007, 20h01
  5. Remplacer doublons lignes par zone de liste
    Par toto10 dans le forum Access
    Réponses: 5
    Dernier message: 13/07/2006, 12h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo