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 qui contiennent des mots d'une liste


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2011
    Messages : 21
    Points : 15
    Points
    15
    Par défaut Suppression de lignes qui contiennent des mots d'une liste
    Bonjour à toutes et à tous.

    J'ai besoin d'aide pour une nouvelle macro.

    Je cherche à supprimer des lignes dont les cellules contiennent certains mots.

    Par exemple supprimer les lignes en fonction d'une liste de nom.

    Merci beaucoup.

    Christophe

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Essaie la macro suivante :

    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
    Dim Liste As Range, c As Range, x As Range
    'la liste des valeurs à supprimer se trouve sur Feuil2 en colonne A
    With Sheets("Feuil2")
        Set Liste = .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp))
    End With
    'les lignes à supprimer sont sur Feuil1
    With Sheets("Feuil1")
        'boucle sur les valeurs de la liste
        For Each c In Liste
            'recherche des valeurs sur Feuil1
            Set x = .Cells.Find(c.Value, , , xlWhole)
            Do While Not x Is Nothing
                'suppression de la ligne
                x.EntireRow.Delete
                Set x = .Cells.Find(c.Value, , , xlWhole)
            Loop
        Next c
    End With
    Si les valeurs recherchées font partie de la valeur de la cellule, mais ne sont pas forcément égales à la valeur de la cellule, remplace "xlWhole" par "xlPart" (à deux endroits).
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2011
    Messages : 21
    Points : 15
    Points
    15
    Par défaut problème
    j'ai essayé mais cela ne marche pas


    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
    Dim Liste As Range, c As Range, x As Range
    'la liste des valeurs à supprimer se trouve sur Feuil2 en colonne A
    With Sheets("Feuil2")
        Set Liste = .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp))
    End With
    'les lignes à supprimer sont sur Feuil1
    With Sheets("Feuil1")
        'boucle sur les valeurs de la liste
        For Each c In Liste
            'recherche des valeurs sur Feuil1
            Set x = .Cells.Find(c.Value, PIERRE, PAUL, xlWhole)
            Do While Not x Is Nothing
                'suppression de la ligne
                x.EntireRow.Delete
                Set x = .Cells.Find(c.Value, PIERRE, PAUL, xlWhole)
            Loop
        Next c
    End With
    merci

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2011
    Messages : 21
    Points : 15
    Points
    15
    Par défaut Conseil
    Il faut le mettre dans un module ou comme d'habitude.

    Souvent mes codes commencent par Sub

    Merci

  5. #5
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Regarde si ça convient. Remplacer Mot1 et Mot2 par les mots que tu cherche :
    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
     
    Sub Supprimer()
     
        Dim I As Long
        Dim NbLig As Long
     
        'en Feuil2 et colonne A
        With Worksheets("Feuil2")
     
            NbLig = .Cells(.Rows.Count, 1).End(xlUp).Row
     
            'pour la suppression, toujours commecer par la fin
            For I = NbLig To 1 Step -1
     
                'si la cellule en cours de la colonne A contient Mot1 ou Mot2
                'la ligne entière est supprimée
                If .Cells(I, 1) = "Mot1" Or .Cells(I, 1) = "Mot2" Then
     
                    .Cells(I, 1).EntireRow.Delete
     
                End If
     
            Next I
     
        End With
     
    End Sub
    Hervé.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2011
    Messages : 21
    Points : 15
    Points
    15
    Par défaut problèmes
    Je suis désolé mais cela ne marche pas

    où alors je fais pas ce qui faut

  7. #7
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Re,

    Dans quelle colonne se trouvent les mots que tu recherche, combien y a t-il ? Et quels sont-ils ?

    Hervé.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Citation Envoyé par fortbelin Voir le message
    j'ai essayé mais cela ne marche pas


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            Set x = .Cells.Find(c.Value, PIERRE, PAUL, xlWhole)
    merci
    Qu'est-ce que tu cherches ? les cellules qui contiennent PIERRE et PAUL ou les cellules qui contiennent PIERRE ou PAUL ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Points : 350
    Points
    350
    Par défaut
    Bonjour,

    peut-être ainsi ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub EFFACE()
      Dim X As Range, C As Range
      With Sheets("Feuil2")
        For Each X In .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp))
          For Each C In Sheets("Feuil1").Cells.SpecialCells(xlCellTypeConstants)
            If C Like X Then Rows(C.Row).Delete
            Next
        Next
      End With
    End Sub

  10. #10
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 239
    Points : 307
    Points
    307
    Par défaut
    Pour quelqu'un qui débute, il y a des syntaxes qui peuvent surprendre.

    les définitions type SpecialCells(xlCellTypeConstants peuvent être difficult..
    Je vais essayer d'être clair avec ma solution .

    il y plusieurs éléments de difficultés :
    -Trouver une méthodes qui fonctionne avec N mot à rechercher
    - si possible la méthode doit permettre de rechercher sur les lignes entière o non et proposer le match case ou non ( maj ..).
    Ensuite la dernière difficulté est celle qui consiste à supprimer des lignes ; lorsqu'on travaille avec un with , on ne peut supprimer des lignes sur la plagecar sinon le find ne fonctionne pas .


    Voi ma méthode , la plus explicite possible:
    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
    37
     
     
    Sub Effacer_mot_dune_liste2()
    Dim Ligne_à_supprimer() As Integer
    Dim nb_ligne_sup As Integer: nb_ligne_sup = 0
    Dim Liste As Range, c As Range, x As Range
     
     Liste_mot = Array("PIERRE", "PAUL")
    'les lignes à supprimer sont sur Feuil12 , colonne A
        Set Plage = Worksheets("Feuil12").Range("A1", Worksheets("Feuil12").Range("A65536").End(xlUp))
     
    With Plage
        For Each mot In Liste_mot
     
            Set x = .Find(What:=mot, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
                If Not x Is Nothing Then
                     prem_occurence = x.Address
                          Do
                              nb_ligne_sup = nb_ligne_sup + 1
                              ReDim Preserve Ligne_à_supprimer(1 To nb_ligne_sup)
                                Ligne_à_supprimer(nb_ligne_sup) = x.Row
                               Set x = .FindNext(x)
                          Loop While Not x Is Nothing And x.Address <> prem_occurence
                        End If
        Next mot
    End With  ' Si les valeurs recherchées
     
    If nb_ligne_sup > 0 Then
    For n = nb_ligne_sup To 1 Step -1
     Worksheets("Feuil12").Rows(Ligne_à_supprimer(n)).EntireRow.Delete
    Next
     
    MsgBox " Nombre de ligne supprimée(s) : " & nb_ligne_sup
     
    End If
     
    End Sub
    nc : en fonction de la version d'excel , le chiffre 65536 doit être modifié; Je travailler sur Excel 2003.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/05/2015, 22h09
  2. [XL-2003] Supprimer les lignes qui contiennent un mot
    Par GOMMME dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 05/09/2010, 20h34
  3. Fichier qui contiennent des epaces
    Par Silverstone dans le forum C++
    Réponses: 3
    Dernier message: 16/07/2006, 23h06
  4. Chercher des mots dans une ligne
    Par chemouz dans le forum C++
    Réponses: 1
    Dernier message: 17/12/2005, 12h42
  5. Export CSV de champs qui contiennent des ";"
    Par boteha dans le forum Outils
    Réponses: 4
    Dernier message: 19/09/2005, 19h05

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