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 VBA pour supprimer une ligne entière [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2016
    Messages : 6
    Par défaut Macro VBA pour supprimer une ligne entière
    Bonjour,

    Je suis nouveau sur ce forum, d'ailleurs je vous en félicite

    J'expose ici une problématique que je rencontre depuis quelques temps maintenant et que je n'arrive pas à résoudre, en effet, je dispose d'une fichier de prospection qui contient, 5 colonnes à savoir Nom, Adresse, Code Postal, Ville et Numéro de Tél avec plus de 63000 contacts dedans.

    Pour des raisons longues à expliquer, j'ai besoin de filtrer la colonne A (Nom) ceci dis que le filtre permettra de supprimer toutes les LIGNES contenant des mots signalé au préalable.

    Ci dessous la macro que j'ai créer et qui malheureusement ne fonctionne 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
    Option Explicit
    Option Compare Text
     
    Sub traiter()
        Dim i&, fin&, a
        With Feuil1 ' à adapter si ta feuille à traiter s'appelle autrement
       fin = .Range("A" & Rows.Count).End(xlUp).Row
            For i = fin To 2 Step -1
                For Each a In Array("(", ")", "&", "+", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "mairie", "départ", "municipa", "direct", "biblio", "gymnas", "famill", "fédération", "police", "gendarmerie", "association", "aide", "boucherie", "cinéma", "communaut", "commu", "cercle", "animation", "bureau", "club", "hô", "région", "centre", "comit", "complexe", "conseil", "menui", "HLM", "Union", "CFDT", "collectif", "Clinique", "cabinet", "docteur", "groupement", "atelier", "décheterie", "amicale", "franch", "football", "etabli", "pompier", "café", "restaurant", "agent", "ecole", "foyer", "publ", "autom", "studio", "entr", "ets", "meub", "cantine", "lycée", "univ", "publi", "entreprise", "Aumônerie", "etablissement", "assistance", "assur", "sport", "gare", "banque", "poste", "piscine", "salle", "service", "société", "soc", "agence", "immob", "santé", "travaux", "garderie", "crèche", "ferme", "centrale","caisse", "eurl", "gaec", "bijouterie", "gestion", "comptoi", "garage", "adhérant", "adhérent", "chômage", "france", "belg", "interna", "telecom", "cabine", "info", "auto", "moto", "concess", "agt", "securit", "jeux", "auchan", "casino", "carrefour", "geant", "magasin", "march", "fleuriste", "radio", "camping", "eglise", "route", "transport", "ambulance", "sud", "taxi", "pompe", "française", "concierg", "rouge", "earl", "sarl", "groupe", "academie", "accor", "diffusion", "distributeur", "aéro", "distr", "canton", "chambre", "syndic", "parti", "coif", "commerce", "comm", "Déchetterie", "intercomm", "local", "point", "pharm", "auberge", "scea", "social", "edf", "gdf", "espace", "agri", "labo", "coop", "cultur", "scol", "cave", "maison", "agro", "emploi", "indust", "cyber", "group", "pizza", "imprim", "profess", "mutuell", "format", "insti", "Allo", "refuge", "avenir", "national", "compagnie", "office", "tourism", "médic", "vacanc", "village", "sncf", "distrib", "station", "coop", "musé", "musiq", "parc", "zoo", "abat", "vété", "inspec", "ADMR", "action", "")
                    If .Cells(i, 1) = a Then Rows(i).Delete shift:=xlUp: Exit For
                Next a
            Next i
        End With
    End Sub
    Vous trouvez également en pièce jointe le fichier texte pour les mots que je veux supprimer, je n'ai pas pu uploader le fichier excel vu sa taille

    Dans l'attente de vous lire.
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Regardez l'utilisation de la méthode Find dans l'aide en ligne VBA Excel ou sur ce forum.

    Cordialement.

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Riahi's Voir le message
    Pour des raisons longues à expliquer, j'ai besoin de filtrer la colonne A (Nom) ceci dis que le filtre permettra de supprimer toutes les LIGNES contenant des mots signalé au préalable.

    Ci dessous la macro que j'ai créer et qui malheureusement ne fonctionne pas !
    "Ca ne fonctionne pas", c'est un peu court comme explication de ce qui dysfonctionne.

    Je pense que ton problème vient d'une confusion entre "contenant" (ce que tu souhaites d'après tes explications) et "égal à" (ce qui est écrit dans ton code).

    Essaye de remplacer ta ligne If par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(.Cells(i, 1), a) > 0 Then Rows(i).Delete shift:=xlUp: Exit For

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    cela pourrait s'avérer plus rapide via un filtre avancé avec un critère calculé
    ou encore juste une formule de calculs marquant les lignes à supprimer puis l'effacement après un tri …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour Eric !

    Assez proche de mon idée :

    Citation Envoyé par Marc-L Voir le message
    cela pourrait s'avérer plus rapide via […]
    ou encore juste une formule de calculs marquant les lignes à supprimer puis l'effacement après un tri …
    En utilisant en VBA une formule de calculs, tu éviterais la double boucle des lignes 26 à 30
    et tu pourrais après un tri effacer la globalité en une seule instruction …

    Et la liste d'exclusion pourrait être ouverte directement à partir du fichier texte …

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Salut Marc,

    Effectivement, je n'ai pas tenté le coup. C'est vrai aussi pour le fichier texte, mais cela me paraît plus simple avec un onglet, quitte à le cacher.

    Par ailleurs, j'ai rebondis également sur un de tes précédents messages de ce post. J'avais eu aussi l'idée d'utiliser le filtre avancé qui est d'une puissance et d'une rapidité "extraordinaire" sans code. Mais autant cela marche sur une liste des enregistrements à conserver, autant ma sélection sur une liste d'exclusion a foiré.

    Cordialement.

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Mais autant cela marche sur une liste des enregistrements à conserver, autant ma sélection sur une liste d'exclusion a foiré.
    Avec un critère calculé ayant pour résultat VRAI uniquement pour les enregistrements à conserver via EQUIV ou NB.SI ou …

    Le filtre avancé pour créer une nouvelle liste sinon formule + tri + effacement global pour modifier la source.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2016
    Messages : 6
    Par défaut
    Citation Envoyé par Menhir Voir le message
    "Ca ne fonctionne pas", c'est un peu court comme explication de ce qui dysfonctionne.

    Je pense que ton problème vient d'une confusion entre "contenant" (ce que tu souhaites d'après tes explications) et "égal à" (ce qui est écrit dans ton code).

    Essaye de remplacer ta ligne If par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(.Cells(i, 1), a) > 0 Then Rows(i).Delete shift:=xlUp: Exit For
    Bonjour, et désolé pour ma réponse assez tardive.

    Je vous joint un screenshot de mon code VBA, en effet, la problématique viens essentiellement des mots clés déclarés, comme vous pouvez le voir dans le screenshot, après en faisant un RUN de la macro j'ai une erreur (Erreur de compilation : erreur de syntaxe)
    Nom : problemexls.png
Affichages : 2534
Taille : 66,6 Ko
    J'ai pris en considération ton point de vue et j'ai changé la ligne IF...

  9. #9
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Le code présenté l'ayant été sous forme de capture d'écran et non de code mis entre balises code, il est difficile de voir son écriture réelle dans ton projet.
    Et celui présenté sous forme de citation dans ton tout premier message non plus ...

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2016
    Messages : 6
    Par défaut
    Excusez moi, effectivement c'est une bourde que j'ai comise.

    Ci dessous le code entier
    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
     
    Option Explicit
    Option Compare Text
     
    Sub traiter()
    Dim i&, fin&, a
    With Feuil1 ' à adapter si ta feuille à traiter s'appelle autrement
    fin = .Range("A" & Rows.Count).End(xlUp).Row
    For i = fin To 2 Step -1
    For Each a In Array("(", ")", "&", "+", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "mairie", "départ", "municipa", "direct", "biblio", "gymnas", "famill", "fédération", "police", "gendarmerie", "association", "aide", "boucherie", "cinéma", "communaut", "commu", "cercle", "animation", "bureau", "club", "hô", "région", "centre", "comit", "complexe", "conseil", "menui", "HLM", "Union", "CFDT", "collectif", "Clinique", "cabinet", "docteur", "groupement", "atelier", "décheterie", "amicale", "franch", "football", "etabli", "pompier", "café", "restaurant", "agent", "ecole", "foyer", "publ", "autom", "studio", "entr", "ets", "meub", "cantine", "lycée", "univ", "publi", "entreprise", "Aumônerie", "etablissement", "assistance", "assur", "sport", "gare", "banque", "poste", "piscine", "salle", "service", "société", "soc", "agence", "immob", "santé", "travaux", "garderie", "crèche", "ferme", "centrale","caisse", "eurl", "gaec", "bijouterie", "gestion", "comptoi", "garage", "adhérant", "adhérent", "chômage", "franc
    e", "belg", "interna", "telecom", "cabine", "info", "auto", "moto", "concess", "agt", "securit", "jeux", "auchan", "casino", "carrefour", "geant", "magasin", "march", "fleuriste", "radio", "camping", "eglise", "route", "transport", "ambulance", "sud", "taxi", "pompe", "française", "concierg", "rouge", "earl", "sarl", "groupe", "academie", "accor", "diffusion", "distributeur", "aéro", "distr", "canton", "chambre", "syndic", "parti", "coif", "commerce", "comm", "Déchetterie", "intercomm", "local", "point", "pharm", "auberge", "scea", "social", "edf", "gdf", "espace", "agri", "labo", "coop", "cultur", "scol", "cave", "maison", "agro", "emploi", "indust", "cyber", "group", "pizza", "imprim", "profess", "mutuell", "format", "insti", "Allo", "refuge", "avenir", "national", "compagnie", "office", "tourism", "médic", "vacanc", "village", "sncf", "distrib", "station", "coop", "musé", "musiq", "parc", "zoo", "abat", "vété", "inspec", "ADMR", "action", "")
    If InStr(.Cells(i, 1), a) > 0 Then Rows(i).Delete shift:=xlUp: Exit For
    Next a
    Next i
    End With
    End Sub

  11. #11
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Déjà (et bien que cela n'explique pas tout)
    Le dernier élément de ton array est "". Ce qui fait que quel que puisse être le contenu (si non vide) analysé, instr est toujours > 0 (= 1 si les autres éléments de l'array ne sont pas là).
    Preuve
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    toto = "abracadabra"
     
    MsgBox InStr(toto, "")
    et ne retournera 0 qui si le contenu est vide
    Tuy vois la faille de raisonnement, là, déjà ? J'espère que oui.

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

Discussions similaires

  1. [VBA] Comment supprimer une ligne entiere dans excel
    Par babouoles dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 06/07/2017, 08h34
  2. Réponses: 0
    Dernier message: 28/10/2014, 15h13
  3. [XL-2010] Macro VBA pour supprimer des caractère situés après une valeur
    Par Guillaume_PMO dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 17/03/2011, 17h06
  4. [VBA Excel] Userform pour supprimer une ligne précise
    Par Viper7 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/06/2006, 14h32
  5. Réponses: 1
    Dernier message: 17/05/2006, 09h19

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