[macro excel] suppression de ligne sous condi

Résolu
JOLARITALE Messages postés 149 Statut Membre -  
JOLARITALE Messages postés 149 Statut Membre -
Bonjour,
j'ai trois tableaux excel.
j'en avais 5 de 10 000 ligne chacun, je peut pas reduire le nombre de tableau d'avantage.

Ce que j'ai comme tableau :

Une liste de 28 colonnes, seules les colonnes A B E et V sont variables manuellement, toutes les autres sont modifié automoatiquement par rapport a ce qu'on ecri dans la colonne E
la colonne A correspond au numéro de la semaine
la colonne B correspond au nom de personnes
la colonne E correspond au matière utilisées (par la personne colonne B)
la colonne V correspond au temps d'utilisation de la matière (colonne E) par la personne (colonneB)

Les données des colonne A B E et V sont toute trois dans un autre tableau

pour reprendre les valeurs j'ai utilisé la fonction égale d'Excel

mais (eh oui il y a un mais), il y a des matière qui ne doivent pas entrer dans la liste de 28 colonnes...
pour celle ci, les colonne de F à U comporte les donnée "#N/A"

j'aimerais créer une macro me supprimant toutes les ligne qui un "#N/A" en colonne C

comment je fais?
c'est la première macro que je vais etre amener à faire...
je vous en prie soyez indulgent si je comprend pas tout tout de suite...

Merci ;)
Configuration: Windows Vista
Internet Explorer 7.0

12 réponses

  1. m@rina Messages postés 27515 Date d'inscription   Statut Modérateur Dernière intervention   11 562
     
    Bonjour

    Voici une petite macro qui supprime la ligne entière si la cellule testé renvoie une erreur #N/A (remplace "ma feuille" par le nom de ta feuille ;))

    Sub supprime()
    For Each c In Worksheets("ma feuille").Range("C:C")
    If IsError(c.Value) Then
    If c.Value = CVErr(xlErrNA) Then
    c.EntireRow.Delete
    End If
    End If
    Next c

    End Sub
    1
    1. JOLARITALE Messages postés 149 Statut Membre 4
       
      merci de répondre si vite
      pour le moment je suis pas chez moi mais des que je rentre j'essai

      merci beaucoup
      0
      1. JOLARITALE Messages postés 149 Statut Membre 4 > JOLARITALE Messages postés 149 Statut Membre
         
        ca me dit erreur d'exécution '1004'

        la méthode Delete de la classe Range a échoué.

        et la ligne c.EntireRow.Delete apparait en jaune surligné...

        que dois je faire?
        Qu'est ce que ca veux dire?

        Merci
        0
      2. m@rina Messages postés 27515 Date d'inscription   Statut Modérateur Dernière intervention   11 562 > JOLARITALE Messages postés 149 Statut Membre
         
        Bonsoir,

        Est ce que par hasard tes ta feuille serait protégée ? Je ne vois que ça...
        Quelle est ta version d'Excel ?

        m@rina
        0
      3. JOLARITALE Messages postés 149 Statut Membre 4 > m@rina Messages postés 27515 Date d'inscription   Statut Modérateur Dernière intervention  
         
        ma feuille pourrait etre protégée??? ho la coquine et elle me l'avait pas dit...
        je sais pas trop... comment je peut verifier ça?

        je suis sous 2003
        0
      4. JOLARITALE Messages postés 149 Statut Membre 4 > JOLARITALE Messages postés 149 Statut Membre
         
        est ce que c'est possible de rajouter une condition?

        il faudrait donc que la colonne C contienne #N/A et que la colonne E soit non vide
        0
  2. m@rina Messages postés 27515 Date d'inscription   Statut Modérateur Dernière intervention   11 562
     
    Je suppose que tu l'auras corrigé toi même... sinon, tu remplaces
    And Range("E" & i).Value = "" Then

    par :
    And Range("E" & i).Value <> "" Then

    m@rina
    1
  3. JOLARITALE Messages postés 149 Statut Membre 4
     
    je viens de rééssayé sur un autre classeur
    ca marche presque

    sur une colonne de 10 #N/A il m'en supprime 5 puis apres en refesant le raccourci il en supprime 3 puis ensuite les dernier un par un

    je ne comprend pas
    0
    1. m@rina Messages postés 27515 Date d'inscription   Statut Modérateur Dernière intervention   11 562
       
      Bonjour,

      Ouppss !! Effectivement, comme d'habitude, j'avais oublié le problème des suppression de lignes dans une boucle... Quand la ligne est supprimée, Excel descend d'une ligne parce qu'elle est supprimée, et descend à nouveau parce que c'est la boucle, et toutes les lignes souhaitées ne sont donc pas supprimées !

      Pour pallier ce problème il faut partir du bas :

      Sub supprime3()
      Dim i As Integer
      For i = Range("C65000").End(xlUp).Row To 1 Step -1
      If IsError(Range("C" & i).Value) And Range("E" & i).Value = "" Then
      If Range("C" & i).Value = CVErr(xlErrNA) Then
      Range("c" & i).EntireRow.Delete
      End If
      End If
      Next

      End Sub

      ps : j'ai intégré la deuxième condition : E doit être vide
      0
      1. JOLARITALE Messages postés 149 Statut Membre 4 > m@rina Messages postés 27515 Date d'inscription   Statut Modérateur Dernière intervention  
         
        trop bien ca marche
        tu es super forte!!!

        par contre euh.. enfait E doit etre non vide

        si E est vide faut la laisser et si E contient quelque chose il faut la supprimer...
        0
  4. JOLARITALE Messages postés 149 Statut Membre 4
     
    euh...
    c'est la premiere macro que je suis amener à utiliser... donc la modifier... non j'aurais pas su ;)

    Merci beaucoup!!!

    tu es vraiment trop géniale!!!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. JOLARITALE Messages postés 149 Statut Membre 4
     
    ca bugg

    j'ai rééssayer ce matin

    la macro me dit qu'il y a un problème avec le 2eme End If...
    0
    1. m@rina Messages postés 27515 Date d'inscription   Statut Modérateur Dernière intervention   11 562
       
      Bonjour,

      Franchement, je vois vraiment pas ce qui peut gêner... J'ai retesté => Pas de problème !

      As tu essayé de modifier la macro ?

      m@rina
      0
  7. JOLARITALE Messages postés 149 Statut Membre 4
     
    Bonjour,

    J'ai bien essayer de prendre des bout de macro par ci par la pour voir mais... non...

    quand je le lance il me surligne le 2eme End If

    voila ma macro

    Sub supp()

    Application.ScreenUpdating = False

    Dim i As Integer
    For i = Range("C2500").End(xlUp).Row To 1 Step -1
    If IsError(Range("C" & i).Value) And Range("E" & i).Value <> "" Then
    If Range("C" & i).Value = CVErr(xlErrNA) Then
    Range("c" & i).EntireRow.Delete
    End If
    End If
    Next

    Application.ScreenUpdating = True

    End Sub
    0
  8. m@rina Messages postés 27515 Date d'inscription   Statut Modérateur Dernière intervention   11 562
     
    Re-essayé chez moi, pas de problème !!!

    En plus une erreur juste sur un End If, ça paraît curieux...
    Elle dit quoi l'erreur ?

    T'es sûre de ne pas avoir mis un point d'arrêt sur le End If ? (gros point rouge devant la ligne)
    m@rina
    0
  9. JOLARITALE Messages postés 149 Statut Membre 4
     
    euh... non

    j'aipas fait de chose qui ressemble a un gros point rouge ;)

    en meme temps c'est pas grave... je vais revenir a la bonne vielle méthode... vais les trier en fonction de C puis de E et supprimer toutes les dernière lignes...
    0
    1. m@rina Messages postés 27515 Date d'inscription   Statut Modérateur Dernière intervention   11 562
       
      Tu peux exporter la macro (en .bas) et la mettre sur cjoint.com ?

      Pour exporter : tu cliques dans la macro, puis Menu, Exporter un fichier

      C'est vraiment incompréhensible

      m@rina
      0
  10. JOLARITALE Messages postés 149 Statut Membre 4
     
    je peut pas le faire ici...
    mais je pourrais le faire ce soir

    mais c'est pas grave je vais le faire a la main tant pis
    ne t'embete pas...
    0
  11. JOLARITALE Messages postés 149 Statut Membre 4
     
    Voila le fichier
    http://www.cijoint.fr/cjlink.php?file=cj200807/cijh0qZDcO.xls.

    Ici, les ligne 793, 795 à 798 et 801 devrais se supprimer
    mais ça coince

    par contre j'ai essayé de mettre le .bas sur cijon mais le ça dit que le format est non supporté.
    0
  12. m@rina Messages postés 27515 Date d'inscription   Statut Modérateur Dernière intervention   11 562
     
    Bonsoir,

    Je suis désolée, mais ton fichier n'est vraiment pas fait dans les règles de l'art Excel !!!

    Règle importante : JAMAIS de cellules fusionnées dans un base de données !!! Donc à supprimer toutes ces cellules fusionnées...

    Deuxième règle : Jamais d'entêtes de colonnes sur 1 ou plusieurs lignes...

    Ensuite : tu as une pseudo liaison avec une macro qui sort de je ne sais où et qui fait planter : à supprimer (Menu Edition, Liaison, Rompre les liaisons).

    Et pour terminer : tu m'as dit que l'un des critères étaient que les cellules de la colonne E ne soit pas vides. Or, aucune cellule de la cellule E n'est vide... Il y a une formule dans chaque cellule ! Et une cellule avec une fomule, même si le résultat est "rien", n'est pas une cellule vide !

    m@rina
    0
  13. JOLARITALE Messages postés 149 Statut Membre 4
     
    Bonjour ;)

    Merci :)

    Maintenant ça marche beaucoup mieux en effet ;)
    0