Partage
  • Partager sur Facebook
  • Partager sur Twitter

[EXCEL]Supprimer lignes avec condition

Sujet résolu
    17 juillet 2015 à 9:08:53

    Bonjour les Zéros !

    J'ai un problème que je n'arrive pas à résoudre. J'ai un tableau avec des valeurs et surtout beaucoup de 0. Dans une colonne, (ici la "U") j'ai fait la somme de chaque ligne pour voir si dans la ligne il n'y avait que des 0 ou non. J'aimerais supprimer les lignes où la somme en U est égale à 0.

    J'ai donc trouvé une macro sur le net (que j'ai comprise et adaptée) mais qui ne fonctionne pas (je débute en VBA) :

    Sub Doublons()
        For Each cellule In Range("U2:U1000")
            If cellule.Value = 0 Then Row(cellule.Row).Delete
        Next
    End Sub

    Quelqu'un pourrait m'expliquer pourquoi ça ne marche pas ? Si je ne suis pas assez clair, merci de me le dire ! :)


     

    • Partager sur Facebook
    • Partager sur Twitter
      17 juillet 2015 à 10:07:19

      Salut,

      ça devrait fonctionner comme ça :

      Sub Doublons()
          For Each cellule In Range("U2:U1000")
              If cellule.Value = 0 Then cellule.Delete
          Next
      End Sub
      

      P.S : N'oublie pas de préciser sur quelle feuille tu vas devant le range sinon tu peux avoir des erreurs. Donc par exemple Worksheets(1).Range("U2:U1000")

      Edit : Ceci dit il va y avoir un problème quand même car si deux zéros se suivent seulement le premier sera supprimé. La boucle va de cellule en cellule or quand on en supprime une toutes les autres cellules remontent et donc la boucle ignore une cellule (celle qui a pris la position de la cellule que l'on a supprimé)

      -
      Edité par Yru4ma 17 juillet 2015 à 10:14:09

      • Partager sur Facebook
      • Partager sur Twitter
      "J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends."
        17 juillet 2015 à 10:18:56

        Merci de ta réponse :) Par contre elle ne répond pas vraiment à ma demande : je voudrais supprimer la LIGNE où il y a le 0 et non juste la cellule. C'est pour ça que j'avais Row sur mon exemple. Tu as une solution pour ça ?


        Merci d'avance :)

        EDIt : quand je dis dans le premier post que ça ne fonctionne pas, ce n'est pas tout à fait exact : cela fonctionne jusqu'à un moment où EXCEL m'affiche "Erreur d'exécution '13' : incompatibilité de type"

        -
        Edité par Roadie ! 17 juillet 2015 à 10:21:57

        • Partager sur Facebook
        • Partager sur Twitter
          17 juillet 2015 à 10:20:51

          Ok dans ce cas c'est cellule.entirerow.delete
          • Partager sur Facebook
          • Partager sur Twitter
          "J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends."
            17 juillet 2015 à 10:25:35

            Cela marche mieux mais j'ai encore un problème ... Certaines lignes où le résultat en U est 0 ne sont toujours pas supprimées, et je ne sais pas pourquoi :( Au début je penser que c'était à cause de "#VALEUR!" mais même en les enlevant cela ne marche pas ...

            • Partager sur Facebook
            • Partager sur Twitter
              17 juillet 2015 à 10:31:10

              Surement par rapport à mon Edit du premier message. Si tu as deux zéros d'affilés le deuxième ne sera pas supprimé. Il faut mieux utiliser une boucle while dans ce cas là :

              Sub Doublons()
                  Dim compt as Integer
                  compt = 2
                  Do While compt <= 1000
                      If Cells(compt,21).Value = 0 Then
                          Cells(compt,21).EntireRow.Delete
                      Else
                          compt = compt + 1
                      End if
                  Loop
              End Sub
              • Partager sur Facebook
              • Partager sur Twitter
              "J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends."
                17 juillet 2015 à 10:36:34

                Quand tu disais deux zéros de suite, je croyais que tu parlais de deux zéros dans une même cellule, je n'avais pas compris :) Du coup ta macro marche très bien, merci beaucoup pour ton aide !!! :D

                Par ailleurs, puisque j'essaye de me former en VBA (un peu), j'aimerais juste que tu m'expliques pourquoi tu as mis Cells(compt,21). Pourquoi tu as écrit cela ?

                Merci encore !

                • Partager sur Facebook
                • Partager sur Twitter
                  17 juillet 2015 à 10:53:39

                  En fait Cells veut dire cellule. Le premier argument (ici compt) est la ligne et le deuxième (ici 21) est la colonne. C'est une alternative à Range que je préfère personnellement. Si tu veux te former en VBA je te conseille ce PDF il est assez complet.

                  -
                  Edité par Yru4ma 17 juillet 2015 à 10:53:47

                  • Partager sur Facebook
                  • Partager sur Twitter
                  "J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends."
                    17 juillet 2015 à 11:07:26

                    De rien :) ! N'oublie pas de passer ton topic en résolu ;)
                    • Partager sur Facebook
                    • Partager sur Twitter
                    "J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends."
                      17 juillet 2015 à 13:47:21

                      Question subsidiaire (pas nécessaire, mais ça ferait plus joli) : si je souhaite ignorer les #VALEUR!, que dois-je ajouter au code ? J'ai vu qu'il existait la fonction SIERROR, mais je ne trouve pas son équivalent VBA :)

                      Je sais que ça fait beaucoup de questions, mais je suis une bille en VBA et j'apprends avec les codes que je crée en enregistrement pour l'instant x) (je regarderai le PDF un peu plus tard)

                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 juillet 2015 à 13:58:55

                        L'équivalent de SIERROr en VBA est tout simplement IfError et tu trouveras l'aide de cette fonction ici. Je te laisse tenter de l'utiliser (il faut bien apprendre :p ), n'hésite pas si tu n'arrives pas à tes fins :)
                        • Partager sur Facebook
                        • Partager sur Twitter
                        "J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends."
                          17 juillet 2015 à 15:29:34

                          Ok, je reviendrai te dire si ça marche dès que j'aurai testé ;)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            17 juillet 2015 à 15:36:10

                            Totalement différent d'ailleurs, mais ça aiderait à clarifier mon code (qui fait quand même plus de 800 lignes) : les ActiveWindow.ScrollRow = 40, ActiveWindow.ScrollRow = 39, ActiveWindow.ScrollRow = 38 qui permettent d'étendre une formule, y'a pas moyen de les remplacer par une seule ligne ? :p
                            • Partager sur Facebook
                            • Partager sur Twitter
                              17 juillet 2015 à 15:43:32

                              Pour tout te dire je sais même pas ce que c'est que ScrollRow (ça vient de l'enregistreur de macro ?). Pour étendre une formule j'utilise FillDown (aide ici)
                              • Partager sur Facebook
                              • Partager sur Twitter
                              "J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends."
                                17 juillet 2015 à 15:45:56

                                C'est exactement ça, c'est quand tu prends le petit carré en bas à droite de ta cellule et que tu étends son contenu ! Merci encore (beaucoup de questions mais j'apprends vite, je suis en train de retoucher mon code pour l'étendre à plusieurs années :p )
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  17 juillet 2015 à 15:57:45

                                  Bon, en fait pour le Scrollrow ça venait bien de l'enregistreur, je viens de comprendre ! Ca s'enregistre automatiquement quand tu remontes avec la molette ;)

                                  Du coup ça nettoie bien mon code !

                                  -
                                  Edité par Roadie ! 17 juillet 2015 à 16:01:28

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    21 juillet 2015 à 15:06:55

                                    Du coup je dois mettre ? :)

                                    Iferror Cells(compt,21) Then
                                      Cells(compt,21) EntireRow.Delete
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      21 juillet 2015 à 15:58:15

                                      Pour faire quoi ? Quoiqu'il en soit en l'état c'est faux car ta condition ne teste rien :-°
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      "J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends."
                                        21 juillet 2015 à 16:54:24

                                        Pour supprimer les lignes avec #VALEUR!

                                        Ah mince, il faut que je mette quoi après Iferror ?

                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        [EXCEL]Supprimer lignes avec condition

                                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                        • Editeur
                                        • Markdown