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 :

Supprimer certaines lignes ou les cellules contiennent un string variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2018
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Septembre 2018
    Messages : 36
    Par défaut Supprimer certaines lignes ou les cellules contiennent un string variable
    Bonjour tout le monde,


    J'aimerai pouvoir supprimer des lignes ou une cellule contient autre chose que ce que j'ai dans une liste, dans une autre feuille.
    Nom : dev.png
Affichages : 229
Taille : 9,7 Ko

    Dans l'exemple, la macro irait voir ma liste cellule par cellule pour voir si j'ai quelque chose que j'ai dans ma liste de référence, si je l'ai je garde si je ne l'ai pas je supprime. ( En réalité les deux collonnes sont dans deux feuilles différentes)

    J'ai essayé le vlookup mais ça ne marche pas : si je fais "Faux" je ne trouve rien car ça ne match pas exactement, il y a des petites différences des mots en plus ou en mois. Si je fais "Vrai" j'ai tout et n'importe quoi.

    Merci de votre aide!

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    Pour déterminer si une ligne doit être supprimée ou pas, tu peux peut-être utiliser un comptage à la place du RechercheV.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(NB.SI.ENS(C:C;A1 & "*")<>0;"À garder";"À Supprimer")
    Va compter tous les textes de ta liste de référence (C:C) qui commencent par le contenu de A1.
    Ceci fonctionne si :
    1. Le texte de la liste de référence sont égaux ou plus long que ceux cherchés.
    2. Tu n'as pas d'ambiguïté sur les critères.
      Ex : Pas dans ta liste de référence "Peugeot 205", "Peugeot 404" et dans tes données "Peugeot" tout court car Excel va en trouver 2 alors qu'il ne devrait pas trouver de correspondance.


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2018
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Septembre 2018
    Messages : 36
    Par défaut
    Merci de votre réponse!
    J'avais essayé cette solution mais ça ne marche pas .. Je vous mets un exemple concret de ce que ça me donne : Nom : dev.png
Affichages : 200
Taille : 15,0 Ko

    ça me donne toujours le même résultat alors que pour "British airways" par exemple, je devrai avoir supprimer et pour "LUFTHANSA TECHNIQUE AG" je devrais avoir à garder..

    J'ai aussi essayé de coder en VBA mais ça me semble infaisable.. la liste de référence fait en réalité 1000 lignes et je ne pourrais pas mettre tout ces critères dans un IF, si c'était faisable..

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    En effet cela ne peut pas marcher comme je l'avais indiqué :

    Le texte de la liste de référence sont égaux ou plus long que ceux cherchés.
    Pour le faire en VBA on va inverser le critère du comptage. Je te reviens dans un nouveau post.



    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Re-bonjour.

    À mettre dans un module.

    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
    public Function ASupprimer(prmCelluleDonnees as range, prmListeRef as range)
        'Retourne True si la prmCeluleDonnees contient un des textes de la liste de référence
       dim result as boolean:result=false
     
       dim cellule as range
     
       for each cellule in prmListeRef.cells
     
           if trim(cellule.value)="" then
               exit for 'Sort si on a trouvé une cellule vide
           end if
     
           if ucase(prmCelluleDonnees.value) like "*" & ucase(cellule.value) & "*" then
                result=true 'On a trouvé quelque chose qui ressemble à ce qu'on cherche.
                exit for
           end if
     
       next cellulle
     
       ASupprimer=result
    end function
    Pour valider que cela fonctionne comme prévu avant de s'en servir en vrai.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private sub Test_ASupprimer()
        Debug.print ASupprimer(activesheet.range("C1"), activesheet.columns("A"))
    end sub
    Si tu obtiens bien ce que tu veux après, cela s'utilise comme une formule Excel.

    Note si tu veux seulement que cela commence par ce qui est dans A1 (pas que cela contienne A1 quelle que soit la position), il faut mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ucase(prmCelluleDonnees.value) like ucase(cellule.value) & "*" then
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Bonjour,

    Une proposition via filtre avancé:
    Filtrer les lignes indésirables puis les supprimer puis défiltrer
    exemple:
    Nom : 2019_07_16_08_31_24_Microsoft_Excel_Classeur2.jpg
Affichages : 219
Taille : 51,9 Ko

    Note que pour être sûr que la suppression de ligne ne modifie pas la liste il vaut mieux la mettre sur une autre feuille

    Si besoin le tuto sur les filtres avancés: https://philippetulliez.developpez.c...dvancedfilter/

    Ce que je te propose peut se faire simplement avec ou sans vba

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

Discussions similaires

  1. Supprimer une ligne si une cellule d'une certaine colonne est vide
    Par eniotnaantoine dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2017, 10h58
  2. [XL-2010] Suppression d'une ligne dont les cellules sont vides à partir d'une certaine colonne
    Par juju05 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/04/2015, 13h54
  3. supprimer l'espace entre les cellules d'une colonne d'un tableau
    Par 123quatre dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 06/09/2007, 10h52
  4. Supprimer certaines lignes d'un fichier texte
    Par kek_net dans le forum Langage
    Réponses: 2
    Dernier message: 10/04/2006, 11h21
  5. Jtable et multi-lignes dans les cellules
    Par tuxor dans le forum Composants
    Réponses: 2
    Dernier message: 19/11/2005, 07h32

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