Masquer des lignes suivant le contenu d'une cellule

Résolu
roukili Messages postés 17 Statut Membre -  
PlacageGranby Messages postés 402 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 mais il ne fonctionne pas car il prend en compte seulement une seule colonne:

Private Sub CommandButton1_Click()

Cells.EntireRow.Hidden = False

For L = 18 To Range("Feuil15" & Rows.Count).End(xlUp).Row

If Range("BM" & L).Value = "DQ Russie" Then

Rows(L).EntireRow.Hidden = False

Else

Rows(L).EntireRow.Hidden = True

End If

Next
End Sub

je vous remercie d'avance pour votre aide merci

2 réponses

  1. PlacageGranby Messages postés 402 Statut Membre 26
     
    Bonjour,

    En ce moment, votre code possède une seule boucle FOR.
    Donc vous faite une boucle pour vérifier les lignes 18 et suivante pour la colonne BM.

    Il vous faudrait imbriquer deux boucle FOR pour que une fois la colonne BM soit vérifié, on passe à la suivante.

    For colonne debut à la fin
    For ligne debut à la fin
    IF valeur = oui
    on affiche la ligne
    Prochaine ligne
    Prochaine colonne

    Aussi, il y a un problème logique avec la demande.
    Disons que dans la colonne BM , ligne 19 , il y a "DQ Russie",
    alors on ne cache pas la ligne 19.
    on continue scanner les lignes, et ensuite on passe à la colonne suivante BN,
    colonne BN , la ligne 19 , n'a pas "DQ Russie",
    alors on la cache la ligne 19.

    Donc, la colonne BN vient de contrecarrer ce qu'on avait fait pour la ligne 19.

    D'un point de vu programmation, il faudrait TOUT cacher, et ensuite faire apparaitre les cellules qui ont la valeur voulu (donc pas de Else dans le code que vous avez fourni).
    Donc si la valeur est trouver en BM ligne 19, la ligne apparait, et si en BN ligne 19 elle n'y est pas, on ne fait rien et la ligne reste visible quand même.
    0
    1. roukili Messages postés 17 Statut Membre
       
      je vois trop comment faire apparaitre des lignes qui sont déjà masquées suivant leurs contenus
      0
  2. roukili Messages postés 17 Statut Membre
     
    j'ai aussi essayé ce code mais il ne fonctionne pas non plus

    Private Sub CommandButton1_Click()

    Dim src As Range
    Dim dst As Range
    Dim cel As Range

    Cells.EntireRow.Hidden = False
    Set src = Cells.SpecialCells(xlCellTypeConstants, xlTextValues)
    Set src = Range("K17:DE88").SpecialCells(xlCellTypeConstants, xlTextValues)
    For Each cel In src.Cells
    If cel.Value Like "*DE*" Then
    If dst Is Nothing Then Set dst = cel Else Set dst = Union(dst, cel)
    End If

    Next cel

    If Not dst Is Nothing Then
    'Cells.EntireRow.Hidden = True
    dst.EntireRow.Hidden = True
    End If

    End Sub
    0
    1. PlacageGranby Messages postés 402 Statut Membre 26
       
      Re-bonjour,

      Si on recommence à partir du code fourni au départ.

      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
      0
      1. PlacageGranby Messages postés 402 Statut Membre 26 > PlacageGranby Messages postés 402 Statut Membre
         
        On pourra adapter ce code selon tes besoins s'il y a un problème.
        Je ne sais pas ou sont tes données, basé sur ton message précédent je devine K17 a DE88. mais dans ton premier message c'était a partir de la ligne 18 et non pas 17
        0
      2. roukili Messages postés 17 Statut Membre > PlacageGranby Messages postés 402 Statut Membre
         
        il fonctionne à merveille seulement j'ai une dernière question je veux faire la même chose sur les colonnes et les lignes à la fois et oui K17 et DE88 c'est la plage ou je fais l'étude
        0
      3. PlacageGranby Messages postés 402 Statut Membre 26 > roukili Messages postés 17 Statut Membre
         
        Private Sub CommandButton1_Click()
        Dim Tableau as range
        
        Cells.EntireRow.Hidden = False  'On commence par tout afficher
        
        Set tableau = Range("K17:DE88")   'Tableau c'est ou sont les données,  corrige au besoin
        tableau.EntireRow.Hidden = True   'On CACHE cette zone
        tableau.EntireColumn.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 affiche
                    Columns(C).EntireColumn.Hidden = false
                End If   
            Next  L 'Prochaine ligne
        Next C  'Prochaine colonne
        End Sub
        0