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 :

Rechercher plusieurs mots dans une colonne


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 44
    Par défaut Rechercher plusieurs mots dans une colonne
    bonjour,
    mon problème est le suivant, je récupère une liste de documents d'environ 800 lignes que je souhaite purger.
    j'ai identifier plusieurs mots qui me permettent de faire cette purge genre:
    courrier / étiquettes / des déchets / ahier des charges ....
    mais la liste est longue et s'allonge un peu plus tous les jours.
    comme méthode j'utilise :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    derlign = Range("D" & Rows.Count).End(xlUp).Row ' permet de trouver la derniere cellule non vide de la colonne D
     
     
    For i = 2 To derlign
     
        If Cells(i, 5) Like "*ourrier *" Or Cells(i, 5) Like "*étiquettes *" Or Cells(i, 5) Like "*des déchets *" Or Cells(i, 5) Like "*ahier des charges *" Then
     
        Rows(i).EntireRow.Delete
        i = i - 1
        End If
     
    Next i
    la méthode like c'est bien mais c'est pas light...

    comment puis je faire pour simplifier? car je suis déjà à 30 mots .... et je crois que je ne peux plus en ajouter

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Comme tu supprimes des lignes, commence ta boucle en bas et remonte pour ne pas en oublier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = derlign to 2 Step - 1
    Tu pourrais aussi essayer en mettant tous tes termes dans une seule chaîne et vérifier seulement cette chaîne avec ton Like
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If MaChaine Like "*" & Range("E" & I) & "*" Then

  3. #3
    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 !

    Différentes méthodes à disposition, par exemple entre autres :

    Entrer les mots dans une feuille de calculs dédiée au paramétrage.

    • Soit utiliser la fonction de feuille de calculs EQUIV (Application.Match en VBA)

    • Soit utiliser l'objet Dictionary pour charger la liste de mots (voir l'aide VBA ou sur MSDN).

    Voir aussi les exemples de ce forum quelle que soit la méthode choisie …

    Nb :   comme il est tellement plus évident de supprimer un bloc en une seule fois
    au lieu de tester chaque ligne et de la supprimer si besoin,
    je pencherais pour la fonction EQUIV en utilisant une colonne supplémentaire,
    ensuite il suffit de trier la plage sur cette colonne alors les lignes à supprimer sont en bas
    du tableau, ne reste plus qu'à sélectionner le bloc et à le supprimer (avec la colonne supplémentaire),
    et c'est tellement facile que c'est déjà réalisable manuellement en se passant d'un code !

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

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 44
    Par défaut
    @parmi
    J'avais zappé le step -1, c'est effectivement ce que je vais faire, merci

    Par contre je ne pense pas que ta solution de la chaine fonctionne car j'ai choisit des mots genre courrier que le vb doit trouver dans une cellule ou il y a une phrase, genre "courrier du blablabla".
    Ta méthode si j'ai bien compris ne vérifie pas si mon mot se trouve dans le texte de la cellule mais plutot si le texte de la cellule correspond à l'un de mes mots.
    est ce que j'ai bien pigé? j'avais essayé avec la méthode cible mais j'ai jamais réussi à le faire fonctionner.

    @Marc-L
    j'ai d'autres petites moulinettes qui se font en meme temps, c'est pourquoi j'ai opté pour le VB. Bon et pis je me rends compte qu'il y a un plein de fonction simple que je ne connais pas ou que je ne sais pas exploiter à fond... LOL
    Donc le Equiv je vais le mettre de coté et Application.Match ou dictionnary .... jamais utilisé donc je vais fouiner sur le fofo

    Merci

  5. #5
    Membre éprouvé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 91
    Par défaut
    tu peux essayer cela:
    Feuil1 contient la liste des mot clef en colonne A
    Feuil2 contient les documents à supprimer

    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
     
    dim nbLigne as long
    Dim i As Long
    dim nbLigneSupp as long
    Dim strMotClef as string
     
    dim derLigne as long
     
    ' Compte le nombre de mots clef
    nbLigne = Sheets("Feuil1").Range("1:1").End(xlDown).Row
     
    ' boucle sur ce nombre de mot clef
    for i = 2 to nbLigne 
    	strMotClef = Sheets("Feuil1").cells(i,1).value
    	Sheets("Feuil2").AutoFilterMode = False
    	derLigne = Sheets("Feuil2").Range("1:1").End(xlDown).Row
     
    	'Filtre le fichier avec le mot clef
    	Sheets("Feuil2").Range("$A:$A").AutoFilter Field:=1, Criteria1:=strMotClef
     
    	' regarde le nombre de ligne
    	nbLigneSupp = Sheets("Feuil1").Range("1:1").End(xlDown).Row 
    	if nbLigneSupp <= derligne then
    		's'il y a au moins une ligne => on les supprime
    		Sheets("Feuil2").Row("2:" +trim(str(nbLigneSupp))).delete
    	end if
    Next i
    Sheets("Feuil2").AutoFilterMode = False

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Une solution très simple à mettre en place avec le filtre avancé d'excel en utilisant le critère calculé soit manuellement soit à l'aide de la méthode AdvancedFilter en VBA
    A lire Les filtres avancés ou élaborés dans Excel
    La formule du critère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ESTNA(EQUIV(C2;$G$2:$G$4;0))
    En colonne C de la zone des données se trouve les cellules qui contiennent les mots
    La plage G2:G4 contient la liste des mots à proscrire

    Il suffit d'utiliser l'exportation des données

    Si les plages sont nommées, c'est une ligne de code en VBA

    Tu n'as pas précisé si les mots étaient seuls dans la cellule ou s'ils étaient contenus dans la cellule.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 44
    Par défaut
    Merci à vous deux !
    je n'ai pas eu le temps de regarder à mon problème hier et du coup j'ai regardé vos réponses ce matin... Ou presque

    @Bob78280:
    j'ai testé et modifié ton code, qui tres interessant je vais me le garder pour l'instant je crois. Bon je pense que l'on doit pouvoir passer par une autre méthode sans avoir à utiliser les filtres, mais je crois que la réponse a été donnée au dessus avec dictionary mais je connais pas trop et j'ai pas beaucoup de temps.

    du coup la modif
    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
    Dim nbLigne As Long
    Dim i As Long
    Dim nbLigneSupp As Long
    Dim strMotClef As String
     
    Dim derLigne As Long
     
    ' Compte le nombre de mots clef
    nbLigne = Sheets("Feuil1").Range("1:1").End(xlDown).Row
     
    ' boucle sur ce nombre de mot clef
    For i = 2 To nbLigne
        strMotClef = Sheets("Feuil1").Cells(i, 1).Value
        Sheets("Feuil2").AutoFilterMode = False
        derLigne = Sheets("Feuil2").Range("1:1").End(xlDown).Row
     
        'Filtre le fichier avec le mot clef
        Sheets("Feuil2").Range("$A:$A").AutoFilter Field:=1, Criteria1:=strMotClef
     
        ' regarde le nombre de ligne
        nbLigneSupp = Sheets("Feuil2").Range("1:1").End(xlDown).Row
        If nbLigneSupp > 1 Then
            's'il y a au moins une ligne => on les supprime
     
            Sheets("Feuil2").Rows("2:" & Trim(Str(nbLigneSupp))).Delete
        End If
    Next i
    Sheets("Feuil2").AutoFilterMode = False
    pas grand chose en fait, j'ai juste modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     If nbLigneSupp > 1 Then
            's'il y a au moins une ligne => on les supprime
     
            Sheets("Feuil2").Rows("2:" & Trim(Str(nbLigneSupp))).Delete
    >1 au lieu de <= derligne
    et rowS au lieu de row

    @Philippe Tulliez:
    Je pense que ta méthode revient un peu à ce que bob propose mais je vais y regarder car je me suis jamais servi des filtres élaborés.
    et effectivement mon texte peut etre au milieu d'une phrase, c'est pourquoi dans la méthode de bob j'ai mis montexte entre * voir ajouter un espace en plus pour filtrer vraiment un mot bien précis.

    Merci encore à vous deux

Discussions similaires

  1. [XL-2007] Recherche de plusieurs mots dans une colonne
    Par merlinus3000 dans le forum Excel
    Réponses: 2
    Dernier message: 30/09/2013, 12h38
  2. [MySQL] Chercher plusieurs mots dans une colonne
    Par persia dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/08/2011, 14h56
  3. rechercher plusieurs mot dans une phrase
    Par andromeda dans le forum C#
    Réponses: 5
    Dernier message: 14/10/2010, 01h34
  4. Recherche de mot dans une colonne
    Par ticad dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/04/2010, 08h40
  5. [PHP 5.0] Insertion avec plusieurs mots dans une colonne
    Par cyrilherve dans le forum Langage
    Réponses: 4
    Dernier message: 21/03/2009, 08h41

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