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:
Masquer des lignes suivant le contenu d'une cellule
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.
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
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
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
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
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