Masquer des lignes suivant le contenu d'une cellule

Résolu/Fermé
roukili Messages postés 17 Date d'inscription vendredi 5 juin 2015 Statut Membre Dernière intervention 6 juillet 2015 - 2 juil. 2015 à 14:44
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 - 2 juil. 2015 à 16:39
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
A voir également:

2 réponses

PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
2 juil. 2015 à 15:13
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
roukili Messages postés 17 Date d'inscription vendredi 5 juin 2015 Statut Membre Dernière intervention 6 juillet 2015
2 juil. 2015 à 15:20
je vois trop comment faire apparaitre des lignes qui sont déjà masquées suivant leurs contenus
0
roukili Messages postés 17 Date d'inscription vendredi 5 juin 2015 Statut Membre Dernière intervention 6 juillet 2015
2 juil. 2015 à 15:24
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
2 juil. 2015 à 15:57
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26 > PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019
Modifié par PlacageGranby le 2/07/2015 à 16:04
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
roukili Messages postés 17 Date d'inscription vendredi 5 juin 2015 Statut Membre Dernière intervention 6 juillet 2015 > PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019
2 juil. 2015 à 16:22
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26 > roukili Messages postés 17 Date d'inscription vendredi 5 juin 2015 Statut Membre Dernière intervention 6 juillet 2015
Modifié par PlacageGranby le 2/07/2015 à 16:40
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