Problème de macro VBA

Résolu
Bonjour,

J'ai besoin de votre aide pour une macro VBA, je souhaiterai mettre une condition dans un document TODO List.

J'ai actuellement mis une mise en forme conditionnelle dans un document : lorsque j'ai mis la valeur Done dans ma cellule, la case passe Vert Clair, lorsque j'ai mis Validé, elle passe vert kaki, la tâche est considérée comme effectuée donc je n'ai plus à m'en soucier, elle ne m'intéresse plus mais je souhaite quand même la conserver.

Ma macro aurait donc cette fonction : lorsque ma case Done devient Validé j'aimerai qu'automatiquement la ligne concernée soit mise en invisible (Hide dans ma version anglais d'excel).

Est-ce que vous avez des idées de comment je pourrais faire ?

J'ai essayé :

If Rows("20:20").Select.Value = "Validé" Then
Selection.EntireRow.Hidden = True

End If
End Sub

Mais évidemment ça ne fonctionnne pas :)

Merci beaucoup d'avance!

dorian

11 réponses

  • Votes
  • Date
  • Date décroissante
  1. Salut,

    Tu dois faire le test sur la cellule qui reçoit le résultat.

    Par exemple, tu as la colonne A qui contient l'état de ta TODO (en cours, validé, etc.)

    Tu fais un test sur cette cellule :

    If Range("A3").Value = "validé" Then

    Rows("3:3").Select
    Selection.EntireRow.Hidden = True

    End If
    1. For test = 1 To 65536

      If Sheets(1).Cells(test, 1).Value = "" Then Exit For

      If Sheets(1).Cells(test, 1).Value = "validé" Then

      Rows(test).Select
      Selection.EntireRow.Hidden = True

      End If

      Next
      1. Il faut effectivement l'adapter à ton document :

        Remplacer
        65536 
        si des données peuvent être enregistrées au delà de la 65536ème ligne (> Office 2007 uniquement, mais ça m'étonnerais que ce soit le cas)

        Sheets(1) 
        est le numéro de l'onglet dans lequel tu as les données (dans un nouveau document, la page 1 est "feuill1", la page 2 "feuill2", etc.). Tu peux mettre un nom d'onglet de cette manière :
        Sheets("NomDeMonOnglet")

        Cells(test, 1)
        : remplacer le 1 par le numéro de colonne dans lequel doit se trouver la mention "validé" (A = 1, B = 2, C = 3, etc.)
        1. ActiveSheet.Rows(1).Select
          Selection.EntireRow.Hidden = True

          devrait faire l'affaire avec la numéro de ligen à cacher
          1. Merci à vous!

            A priori ces macros ne fonctionnent que ligne par ligne, non ?

            Est-ce qu'il serait possible (même sans passer VBA, c'est pas un pbm) d'appliquer cette condition directement à toute la colonne?

            merci!
            1. Merci! Je colle ça en l'état dans ma fenêtre VBA ?

              (j'y connais rien en progra..)
              1. Du coup, ça me donne :

                "
                For Test = 1 To 65536

                If Sheet1.Cells(Test, 4).Value = "" Then Exit For
                If Sheet1.Cells(Test, 4).Value = "validé" Then

                Rows(Test).Select
                Selection.EntireRow.Hidden = True

                End If
                "

                1. For Test = 1 To 65536

                  If Sheets(1).Cells(Test, 4).Value = "" Then Exit For
                  If Sheets(1).Cells(Test, 4).Value = "validé" Then

                  Rows(Test).Select
                  Selection.EntireRow.Hidden = True

                  End If

                  Next


                  Attention, la macro s'arrête dès que la cellule de la colonne D est vide ! Donc il faut qu'il y ait toujours quelque chose, genre "Ouvert", "en cours", "cloturé", "validé", etc.

                  N'oublie pas le Next à la fin de l'instruction (avant ton "End Sub" et les Sheets entre ()

                  Et il y a un "s" à Sheets ^^

                  Si votre problème est résolu, merci de clôturer le sujet en cliquant sur "Problème résolu".
                  Administrateur réseaux sous Windows Serveur 2003
                  1. Bon...^^

                    J'ai tappé çam le debuggeur me dit rien de spécial, mais rien ne se passe :

                    Sub CLEAN()

                    For Test = 1 To 65530

                    If Sheets(1).Cells(Test, 4).Value = "" Then Exit For
                    If Sheets(1).Cells(Test, 4).Value = "Validé" Then

                    Rows(Test).Select
                    Selection.EntireRow.Hidden = True

                    End If

                    Next

                    End Sub

                    Ma sheet excel s'appelle Sheet1 et la colonne est la colonne E, any idea?

                    merci encore :D
                    1. Ben si la colonne est E, alors tu dois mettre Cells(Test, 5) !
                      A = 1, B = 2, C = 3, D = 4, E = 5