Excel VBA - cacher des lignes

Résolu
bobie -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
Salut à tous,

dans une feuille j'ai nommé des plages (en fait des lignes). Par exemple:

NOM1 = ligne entière de 3 à 23

j'aimerais sous VBA que si la cellule F16 est égale à une erreur (#DIV!0) alors on cache NOM1

Comment je peux faire? merci
Configuration: Windows XP
Safari 532.0

5 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    à mettre dans la feuille :
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If IsError([F16]) Then
            Range("plage1").EntireRow.Hidden = True
        Else
            Range("plage1").EntireRow.Hidden = False
        End If
    End Sub


    Sélectionner une autre cellule rafraichira
    eric
    1
    1. bobie
       
      meric eric

      et si j'ai plusieur plage?

      je peux demultiplier ce code cidessous?

      If IsError([F16]) Then
      Range("plage1").EntireRow.Hidden = True
      Else
      Range("plage1").EntireRow.Hidden = False

      merci
      0
      1. bobie > bobie
         
        C'est ok j'ai compris le systeme pour mettre plusieurs if.

        un grand merci Eric.

        Bobie
        0
      2. bobie > bobie
         
        EN fait j'ai une derniere question:

        voila j'ai fais mon code sur la base du code d'Eriiiic. Mais dès que je selectionne une cellule dans ma feuille alors la macro se lance (c'est normal).

        Par contre cela bloque mon pc pendant une seconde. En fait je n'ai pas besoin d'une actualisation a chaque selection de cellule. Je n'en ai besoin q'une seule fois, à la fin de mon autre macro Sub Consolidation_OWILOU().

        Comment puis-je faire?
        merci





        Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Application.ScreenUpdating = False

        If IsError([F16]) Then
        Range("AA").EntireRow.Hidden = True
        Else
        Range("AA").EntireRow.Hidden = False
        End If
        If IsError([F33]) Then
        Range("AIUS").EntireRow.Hidden = True
        Else
        Range("AIUS").EntireRow.Hidden = False
        End If

        If IsError([F50]) Then
        Range("ALNIA").EntireRow.Hidden = True
        Else
        Range("ALNIA").EntireRow.Hidden = False
        End If

        If IsError([F67]) Then
        Range("DS").EntireRow.Hidden = True
        Else
        Range("DS").EntireRow.Hidden = False
        End If

        If IsError([F84]) Then
        Range("DNA").EntireRow.Hidden = True
        Else
        Range("DNA").EntireRow.Hidden = False
        End If
        If IsError([F101]) Then
        Range("CTL").EntireRow.Hidden = True
        Else
        Range("CTL").EntireRow.Hidden = False
        End If
        If IsError([F118]) Then
        Range("NAV").EntireRow.Hidden = True
        Else
        Range("NAV").EntireRow.Hidden = False
        End If
        If IsError([F135]) Then
        Range("REQUENTIS").EntireRow.Hidden = True
        Else
        Range("REQUENTIS").EntireRow.Hidden = False
        End If
        If IsError([F152]) Then
        Range("ONEYWELL").EntireRow.Hidden = True
        Else
        Range("ONEYWELL").EntireRow.Hidden = False
        End If
        If IsError([F169]) Then
        Range("NDRA").EntireRow.Hidden = True
        Else
        Range("NDRA").EntireRow.Hidden = False
        End If
        If IsError([F186]) Then
        Range("ATMIG").EntireRow.Hidden = True
        Else
        Range("ATMIG").EntireRow.Hidden = False
        End If
        If IsError([F203]) Then
        Range("ATS").EntireRow.Hidden = True
        Else
        Range("ATS").EntireRow.Hidden = False
        End If
        If IsError([F220]) Then
        Range("ORACON").EntireRow.Hidden = True
        Else
        Range("ORACON").EntireRow.Hidden = False
        End If
        If IsError([F237]) Then
        Range("EAC").EntireRow.Hidden = True
        Else
        Range("EAC").EntireRow.Hidden = False
        End If
        If IsError([F254]) Then
        Range("ELEx").EntireRow.Hidden = True
        Else
        Range("ELEX").EntireRow.Hidden = False
        End If
        If IsError([F271]) Then
        Range("TLES").EntireRow.Hidden = True
        Else
        Range("TLES").EntireRow.Hidden = False
        End If
        Application.ScreenUpdating = True
        End Sub
        0
  2. tony
     
    Bonjour, tu pourrais me faire un screen ( impr écran syst ) pour que je voie un peux ce que tu voudrais faire ? merci
    0
    1. bobie
       
      salut tony

      voila une copie d'ecran.

      j'aimerais que les lignes 8 a 23 soient cachées si la cellule E16 renvoie #DIV!0

      Le "tableau" que tu vois est répété 15 fois en dessous. Mais pour le moment j'aimerais juste une bout de code
      pour juste cette plage, ensuite j'adapterai.

      merci
      0
      1. bobie > bobie
         
        oups le lien:

        http://www.cijoint.fr/cjlink.php?file=cj200910/cijEbsMtzM.bmp
        0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    et bien tu l'enleves de Worksheet_SelectionChange et tu le mets dans un sub masquer() (par exemple) que tu appelles à la fin de ta macro.
    Et si tu veux l'accelérer tu mémorises l'état de tes plages et tu ne fais l'action que si c'est nécessaire. (à l'ouverture toutes les démasquer pour être sûr de leur état)
    eric
    0
    1. bobie
       
      Merci eriiic pour ton précieux aide.

      bonne soirée,
      bob
      0
  4. bobie
     
    Eriiic

    losque je veux appeler ma macro masquer() (se trouve dans sheet2) à la fin de ma macro Sub Consolidation_OWILOU() (se trouve dans module1), j'ai l'erreur suivante: Sub or Function not defined

    quel est le probleme?
    merci
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    met masquer() dans le module et précise sur quelle feuille tu veux travailler.

    dim sh1 as worksheet
    sh1=worksheets("Sheet2")
    If IsError(sh1.[F16]) Then
    sh1.Range("AA").EntireRow.Hidden = True
    Else
    sh1.Range("AA").EntireRow.Hidden = False
    End If
    ....

    (non testé...)

    eric
    0