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 ligne sur valeur cellule


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Suppression ligne sur valeur cellule
    Bonjour à tous,

    Je souhaite supprimer les lignes d'une feuilles dans lesquelles ne figure pas certaines valeurs d'une colonne (colonne avec des noms).

    Pour cela j'ai fait un tableau dans lequel j'indique les noms des membres que je souhaite visualiser.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TabMember(0) = "Jacques Mayol"
     TabMember(1) = "Sebastien Dupont"
    J'ai écrit dans cette macro, qui ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        For i = 30 To 1 Step -1 ' le fichier a 30 lignes dans cet exemple
        For j = 0 To 1 Step 1
        If Cells(i, 3).Value = <> TabMember(j) Then Cells(i, 3).EntireRow.Delete
        Next
        Next
    J'arrive à faire ce que je souhaite seulement pour un nom précis et sans espace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        For i = 30 To 1 Step -1
        If Cells(i, 4).Value <> "TOTO" Then Cells(i, 4).EntireRow.Delete
        Next
    Avez vous une idée de comment je pourrais m'en sortir ?
    P-e avec un OU dans le if, du genre "TOTO" or "TATA" or ... ? Embêtant car les noms que je veux visualiser ne sont pas 'fixe' (doivent être modifiable).
    Avec un vision plus simpliste, c'est un peu le principe du filtre. Mais je veux supprimer les lignes que je ne souhaite pas voir.

    Merci d'avance pour votre aide

  2. #2
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut


    Bonjour,

    juste filtrer sur ce qui doit être supprimé,
    la méthode Delete tenant compte uniquement des cellules visibles, c'est simple comme on dit chez Renault !
    Les boucles sont donc totalement inutiles …


    _________________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Ca : Je ne connais pas comme comparateur.
    Une erreur d'inattention ?

    Le problème, c'est que tu vas supprimer toutes les lignes ne répondant pas à au moins une de ces conditions.
    Et je n'ai pas l'impression que c'est ce que tu souhaites.

    Donc, il faudrait plutôt écrire ça dans ta boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Test = True
    For j = 0 To 1 Step 1
        If Cells(i, 3).Value = TabMember(j) Then Test = False
    Next j
    If Test Then Rows(i).Delete
    Précédé en début de code d'un :
    Juste un détail pour ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(i, 3).EntireRow.Delete
    Il est plus simple d'écrire :
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut




    Ah oui, j'ai oublié d'indiquer que je ne regardais que les codes balisés conformément aux règles de ce forum !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Test solution Menhir
    j'ai testé ta solution comme ceci Menhir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      Dim TabMember(2) As String
        TabMember(0) = "Jacques Mayol"
        TabMember(1) = "Sebastien Dupont"
     
        Test = True
        For j = 0 To 1 Step 1
            If Cells(i, 3).Value = TabMember(j) Then Test = False
        Next j
        If Test Then Rows(i).Delete
    Une erreur d’exécution intervient à la ligne 7. Problème au niveau de la valeur du tableau je pense.
    J'ai testé avec des chaines de caractères sans espaces et le problème reste le même...

  6. #6
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Points : 505
    Points
    505
    Par défaut
    Avant de parler d'erreur dans le tableau, revérifie tes variables...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cells(i),3.value = TabMember(j) Then Test = False
    Ta variable i n'est ni déclarée, ni initialisée. Je pense que tu l'as confondue avec j. De même pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Test Then Rows(i).Delete
    Politesse, respect et humilité sont les 3 éléments nécessaires dans une bonne relation d'entraide. Nous faisons cela par plaisir d'aider, ne nous le retirez pas

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Effectivement...

    Je ne comprends toujours pas pour cette solution ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
         Dim TabMember(2) As String
        TabMember(0) = "TOTO"
        TabMember(1) = "TATA"
     
        For j = 1 To 0 Step -1
        For i = 30 To 2 Step -1
            If Cells(i, 4).Value <> TabMember(j) Then Rows(i).Delete
        Next i
        Next j
    Marc-L, je n'ai pas bien saisi ta méthode Delete...(désolé pour les balises)

  8. #8
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Etant donnée qu'aucune cellule ne peut être égale à "TOTO" et "TATA" EN MEME TEMPS, ton code va supprimé toutes les lignes.
    Je t'ai donné une méthode pour que ça marche. Si tu veux persister avec un algorithme qui ne marche pas, libre à toi.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Menhir, ca fonctionne ! Merci beaucoup !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        Dim Test As Boolean
        Dim TabMember(2) As String
        TabMember(0) = "TOTO"
        TabMember(1) = "TATA"
     
        For i = 30 To 2 Step -1
        Test = True
        For j = 0 To 1 Step 1
            If Cells(i, 3).Value = TabMember(j) Then Test = False
        Next j
        If Test Then Rows(i).Delete
        Next
    Cependant ca fonctionne que pour une chaine de caractère sans espace...
    Fonctionnel pour "TOTO" mais pas pour "Jacques Mayol" par exemple

  10. #10
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par jomaly56 Voir le message
    Cependant ca fonctionne que pour une chaine de caractère sans espace...
    Fonctionnel pour "TOTO" mais pas pour "Jacques Mayol" par exemple
    Je viens de tester : même avec des espaces, ça marche.
    Il doit y avoir une différence entre ce que tu mets dans tes variables et ce qu'il y a dans les cellules (un espace à la fin ou autre carabistouille du même genre).
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    En effet, merci

    Maintenant je vais devoir trouver comment supprimer ces fichues espaces en fin de chaine

  12. #12
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Fonction SUPPRESPACE() puis copier/coller valeur.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  13. #13
    Membre actif
    Homme Profil pro
    développeur
    Inscrit en
    Février 2013
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : développeur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 123
    Points : 256
    Points
    256
    Par défaut
    Tu peux aussi utiliser les fonctions right et left
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if right(Cells(i, 3), 1) = " " then Cells(i, 3) = Left(Cells(i, 3), Len(Cells(i, 3)) - 1)
    'traduction : si le premier caractère en partant de la droite du contenu de la cellule est un espace, alors le contenu de la cellule sera la même valeur sans le dernier caractère en partant de la gauche
    #Hashtag

  14. #14
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Tu as raison, c'est tellement plus simple que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Cells(i, 3) = Trim(Cells(i, 3))
    ' Traduction : supprimer tous les espaces à droite et à gauche quel que soit leur nombre
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  15. #15
    Membre actif
    Homme Profil pro
    développeur
    Inscrit en
    Février 2013
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : développeur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 123
    Points : 256
    Points
    256
    Par défaut
    Chaque méthode a ses avantages, la tienne est plus rapide/simple, la mienne est plus personnalisable.
    (On se défend comme on peut )
    #Hashtag

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

Discussions similaires

  1. [XL-2010] Suppression colonne suivant valeur cellule 1ère ligne (en-tête)
    Par 2lester dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 18/08/2017, 21h11
  2. [AC-2007] filtre lignes sur valeur maximale
    Par gui-llaume dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 10/06/2009, 15h42
  3. [E-00] Supprimer lignes sur valeurs multiples
    Par stanev dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 04/11/2008, 11h56
  4. Suppression ligne sur condition
    Par cchampion2fr dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/09/2008, 15h39
  5. plusieurs lignes sur une cellule du stringgrid
    Par neuneu1 dans le forum Débuter
    Réponses: 4
    Dernier message: 06/08/2007, 22h35

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