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 :

Macro supprimer une ligne si cellule contient


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 10
    Par défaut Macro supprimer une ligne si cellule contient
    Bonjour,
    Je souhaite créer une macro si cellule dans tel colonne contient "un mot" supprimer la ligne correspondante. Aider moi svp

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    un exemple avec les filtres automatiques :

    - la feuille s'appelle "LaFeuille"
    - la colonne où chercher le mot : colonne 3 (colonne C)
    - le mot à chercher : "toto"

    je te laisse remplacer dans le code ces trois choses pour adapter à ton cas


    J'ai supposé que :

    - les données commencent dès la colonne A, à partir de la ligne 2
    - il n'y a aucune ligne vide

    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
    Sub Test()
    Dim Plage As Range
    Dim LaColonne As Integer
    Dim LeMot As String
    Dim NomFeuille As String
        NomFeuille = "LaFeuille"
        LeMot = "toto"
        LaColonne = 3
     
        With ThisWorkbook.Worksheets(NomFeuille)
            ' plage des données
            Set Plage = .Cells(2, 1).Resize(.UsedRange.Rows.Count - 1, .UsedRange.Columns.Count)
     
            With .Range("A1")
                ' retrait des filtres s'il y en a
                .AutoFilter
                ' application du filtre
                .AutoFilter LaColonne, LeMot
                On Error Resume Next
                    ' tentative de suppression des résultats
                    Plage.SpecialCells(xlCellTypeVisible).EntireRow.Delete
                    ' s'il n'y avait pas de résultat : on l'indique
                    If Err <> 0 Then MsgBox "Pas de résultat"
                On Error GoTo 0
                ' suppression des filtres
                .AutoFilter
            End With
        End With
    End Sub

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 10
    Par défaut
    Ce n'est pas ça que je veux. Je veux juste supprimer la ligne dans laquelle le mot débit ok apparrer. Il n'y a pas de filtre

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    euh .... même si ça ne concerne qu'une seule cellule (fallait le deviner, t'as mangé des mots dans ta présentation), mon code fonctionnerait quand même à mon sens

    l'as-tu testé au moins ?


    et puisque tu cherches une seule cellule connue... là faut juste faire un test direct de la valeur

    ça ressemblerait à ça (à adapter au contexte)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ThisWorkbook.Worksheets("LaFeuille").Range("A1")
        If .Value = "Le Mot" Then .EntireRow.Delete
    End With

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 10
    Par défaut
    Désolé jme suis mal exprimé. C'est presque ça sauf que je veux que dans la feuille toute les lignes qui contiennent les mots "débit ok" soit supprimées.

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Alors essaye mon premier code !

    je l'ai même commenté, si tu l'avais lu, tu aurais vu :

    1) on met un filtre automatique pour afficher uniquement les lignes qui contiennent "toto" dans la colonne 3
    2) on supprime ces lignes
    3) on enlève le filtre


    ce qui est toujours pas clair, c'est l'histoire de la colonne ... à lire ton premier message, il faut faire la recherche dans une seule colonne

    et à lire ton dernier, la recherche doit se faire dans toutes les colonnes

    précise ce point

  7. #7
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2020
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 150
    Par défaut
    [QUOTE=joe.levrai;8501955]Bonjour,

    un exemple avec les filtres automatiques :

    - la feuille s'appelle "LaFeuille"
    - la colonne où chercher le mot : colonne 3 (colonne C)
    - le mot à chercher : "toto"

    je te laisse remplacer dans le code ces trois choses pour adapter à ton cas


    Bonjour, je m'incruste

    Juste pour connaitre les variantes pour 2 colonnes (ou n?), et pour 2 mots (ou n éventuellement) ?

    En tout cas merci, top !
    (et bravo pour ta patience avec ton interlocuteur d'origine...)

    Bonne soirée,
    Marc

  8. #8
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour à vous, Bonjour au FoRhum,

    Pour ma part.

    Sur une plage "classique"

    Je procède au remplacement des cellules dont la ligne est à supprimer par un blanc ("")
    J'utilise la propriété SpecialCells pour supprimer en un bloc les lignes entières de ces cellules

    A adapter.
    Ici, suppression des lignes dont la colonne 2 des voitures est égale à "ford"

    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
    Option Explicit
     
    Public Sub suppr_voiture()
     
    Dim dernl As Long
     
    With Worksheets(1)
            dernl = .Cells(.Rows.Count, 2).End(xlUp).Row
            With .Range("B2:B" & dernl)
                    .Replace what:="ford", replacement:=""
                    .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
            End With
    End With
     
    End Sub
    En ce qui concerne les tables de données (tableau structuré)

    Ici va ma préférence. ("Y a plus" de Derlign, End(xlUp)....)

    Il faut en effet filtrer le tableau (le filtre étant présent par défaut).
    La suppression porte sur le corps de cellules du tableau filtré.

    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
    Option Explicit
     
    Public Sub suppr_voiture_tablo()
     
    Application.DisplayAlerts = False
     
    Dim lechamp As String, lecritère As String
    'Nom du champ choisi (entête de colonne)
    lechamp = "voiture"
    'Critère pour suppression de ligne
    lecritère = "ford"
     
    Dim numchamp As String
     
    With ThisWorkbook.Worksheets(2).ListObjects("Tableau1")
            'Recherche du numéro de champ
            numchamp = .ListColumns(lechamp).Index
            'Effacement du filtre si déjà présent
            If Worksheets(2).FilterMode = True Then .AutoFilter.ShowAllData
            'Filtre du tableau structuré
            .Range.AutoFilter Field:=numchamp, Criteria1:=lecritère
            'Suppression du corps de cellules
            .DataBodyRange.Delete
            'Effacement du filtre pour visualisation des données restantes
            .AutoFilter.ShowAllData
    End With
     
    Application.DisplayAlerts = True
     
    End Sub
    2 remarques:
    1 - La propriété de l'objet Application est neutralisée afin d'éviter le pop-up de confirmation de suppression de ligne entière
    2 - La méthode Delete appliquée au corps de cellules du tableau structuré n'affecte que les cellules visibles.

    Cette 2ème remarque m'amène à préconiser l'effacement systématique du filtre éventuel d'un tableau structuré, au préalable, avant d'y affecter méthodes et propriétés

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

Discussions similaires

  1. Supprimer une ligne si cellule vide ou = 0 dans une plage variable
    Par nico157 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 06/01/2016, 16h09
  2. supprimer une ligne avec macros
    Par czied dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/03/2009, 10h25
  3. [E-00] Ma macro plante quand j'essaye de supprimer une ligne
    Par Escandil dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/01/2009, 15h17
  4. Réponses: 2
    Dernier message: 15/09/2008, 11h42

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