Masquer des colonnes en fonction du contenu d'une celluele

roukili Messages postés 17 Statut Membre -  
ccm81 Messages postés 11033 Statut Membre -
Bonjour,
j'ai un fichier Excel qui contient des données et je souhaite masquer les lignes et les colonnes qui ne contiennent pas une chaine de caractères; "DE" par exemple
j'ai essayé ce code pour les lignes mais j'arrive pas à l'adapter pour les colonnes

Private Sub CommandButton1_Click()

Dim Tableau as range

Cells.EntireRow.Hidden = False 'On commence par tout affichier

Set tableau = Range("K17:DE88") 'Tableau c'est ou sont les données, corrige au besoin
tableau.EntireRow.Hidden = True 'On CACHE cette zone

For C = 17 To Cells(17, Cells.Columns.Count).End(xlToLeft).Column 'Pour chaque colonne
For L = 11 To Range("K" & Rows.Count).End(xlUp).Row 'On regarde chaque ligne
If Cells(L, C).Value Like "*DE*" Then 'on vérifie si la valeur contient "DE"
Rows(L).EntireRow.Hidden = False 'Et si oui, on affichie
End If
Next L 'Prochaine ligne
Next C 'Prochaine colonne
End Sub

5 réponses

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 731
     
    0
    1. roukili Messages postés 17 Statut Membre
       
      Re bonjour;
      j'ai regardé le lien mais comme je suis un débutant en VB je comprends pas trop comment faire la fonction inverse de la fonction que j'ai décrie au dessus CàD: masquer les colonnes dont les cellule appartenant à la plage de donnée K17:DE88 si elles ne contiennes pas une valeur donnée "X"
      0
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    Un (autre) exemple
    http://www.cjoint.com/c/EGgnhtL82og
    Ctrl+k pour masquer
    Ctrl+r pour "démasquer"

    Cdlmnt
    0
    1. roukili Messages postés 17 Statut Membre
       
      merci pour cet exemple mais j'ai pas accès à ce site je vous remercie d'avance de me recopier le code
      0
  3. cs_Le Pivert Messages postés 8437 Statut Contributeur 731
     
    Suivant l'exemple donné sur le site:

    Sub For_Each_Next_Plage()
    Dim FL1 As Worksheet, Cell As Range, Plage As Range, NoCol As Integer, NoLig As Long
    Dim Var1
      Set FL1 = Worksheets("Feuil1")
        With FL1
           'ou en utilisant l'objet Plage (range) de la plage
            Set Plage = .Range("K17:DE88")
            For Each Cell In Plage
              'Valeur de la cellule lue
                Var1 = Cell.Value
                If Var1 = "DE" Then
                NoCol = Cell.Column
                NoLig = Cell.Row
                Rows(NoLig).EntireRow.Hidden = False 'Et si oui, on affichie
                Columns(NoCol).EntireColumn.Hidden = False 'Et si oui, on affichie
                End If
            Next
        End With
        Set FL1 = Nothing
        Set Plage = Nothing
    End Sub

    0
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Oups, j'ai mal lu !!
    http://www.cjoint.com/c/EGgnZdVdjsg
    Ctrl+m pour lancer la macro

    Cdlmnt
    0
    1. roukili Messages postés 17 Statut Membre
       
      mon réseau bloque le lien c'est pourquoi je vous demande de m'envoyer le code de la macro
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Const plage = "C2:M30"
    Const valeur = "DE"
    
    Public Sub RAZ()
    Range(plage).Rows.Hidden = False
    Range(plage).Columns.Hidden = False
    End Sub
    
    Public Sub Masquer()
    Dim obj As Object, tadr, li As Long, co As Long, plage2 As Range
    Dim nbli As Long, nbco As Long, coco As String, adr As String, lili As Long
    nbli = Range(plage).Rows.Count
    nbco = Range(plage).Columns.Count
    For li = 1 To nbli
      adr = Range(plage).Cells(li, 1).Address
      lili = Split(adr, "$")(2)
      Set plage2 = Range(plage).Rows(li)
      Set obj = plage2.Find(valeur, , , xlWhole)
      If obj Is Nothing Then Rows(lili).Hidden = True
    Next li
    For co = 1 To nbco
      adr = Range(plage).Cells(1, co).Address
      coco = Split(adr, "$")(1)
      Set plage2 = Range(plage).Columns(co)
      Set obj = plage2.Find(valeur, , , xlWhole)
      If obj Is Nothing Then Columns(coco).Hidden = True
    Next co
    End Sub

    Cdlmnt
    0
    1. ccm81 Messages postés 11033 Statut Membre 2 434
       
      Et en un peu plus court

      Const NF = "Feuil1"
      Const plage = "C2:M30"
      Const valeur = "DE"
      
      Public Sub RAZ()
      Range(plage).Rows.Hidden = False
      Range(plage).Columns.Hidden = False
      End Sub
      
      Public Sub Masquer()
      Dim obj As Object, li As Long, co As Long, plage2 As Range, nbli As Long, nbco As Long
      With Sheets(NF).Range(plage)
        nbli = .Rows.Count
        nbco = .Columns.Count
        For li = 1 To nbli
          Set plage2 = .Rows(li)
          Set obj = plage2.Find(valeur, , , xlWhole)
          If obj Is Nothing Then .Rows(li).Hidden = True
        Next li
        For co = 1 To nbco
          Set plage2 = .Columns(co)
          Set obj = plage2.Find(valeur, , , xlWhole)
          If obj Is Nothing Then .Columns(co).Hidden = True
        Next co
      End With
      End Sub
      0