masquer les lignes (oui dans colonne U)

DAVAWAY

XLDnaute Junior
Bonjour,

Je cherche à masquer toutes les lignes où "oui" a été saisie (colonne U), mais je parviens uniquement à faire disparaitre la ligne 1 car il y a oui en U1.. voici mon ébauche de code :

Sub macro1()
Sheets("DépensesPersonnel BS").Select
Range("U1").Select

While ActiveCell <> ""
If ActiveCell.Value = "OUI" Then
m = ActiveCell.Row
Rows(m).EntireRow.Hidden = True
End If
ActiveCell.Offset(1, 0).Select
Wend
End Sub

Par ailleurs comment faire pour faire réapparaître toutes les lignes masquées sans avoir à faire un clique droit sur l'interstice puis afficher ?

Merci beaucoup pour votre aide,

Bonne journée,

David
 

thebenoit59

XLDnaute Accro
Re : masquer les lignes (oui dans colonne U)

Bonjour Davaway.
Sans essayer tu peux tenter :

Code:
With Sheets("DépensesPersonnel BS")
For i = .[u65000].end(xlup).row to 1 step -1
If .Cells(i, "u").Value = "Oui" Then .Rows(i).Hidden = True
Next i
End With

Pour tout faire ré-apparaître :

Code:
Sheets("DépensesPersonnel BS").Rows("1:65000").Hidden = False
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : masquer les lignes (oui dans colonne U)

Hello

avec ce code à adapter à ta feuille
Code:
Sub masquer()

Set zone = ActiveSheet.UsedRange
'reaffiche toutes les lignes
zone.Rows.Hidden = False

For i = zone.Rows.Count To 19 Step -1
    If zone.Item(i, 21) = "oui" Then
        zone.Item(i, 21).EntireRow.Hidden = True
    End If
Next i
End Sub
 

DAVAWAY

XLDnaute Junior
Re : masquer les lignes (oui dans colonne U)

Merci Benoit pour ta proposition. Je ne parviens pas à utiliser ta fonction personnalisée. Quand je fais alt f8, je n'ai pas de fonction identifiée (j'ai même perdues en accès et usage les autres modules existants). Comment faire ? Merci pour ta lecture
 

DAVAWAY

XLDnaute Junior
Re : masquer les lignes (oui dans colonne U)

Benoit, j'ai complété le module mais il ne se passe rien (alt f8 etc.). J'ai pourtant dans la cellule U16 un oui de saisi..

(j'ai renommé le code de vgendron demasquer)

Sub masquer()

With Sheets("DépensesPersonnel BS")
For i = .[u65000].End(xlUp).Row To 1 Step -1
If .Cells(i, "U").Value = "Oui" Then .Rows(i).Hidden = True
Next i
End With

End Sub


Merci pour votre aide, bon après midi
 

vgendron

XLDnaute Barbatruc
Re : masquer les lignes (oui dans colonne U)

Corrige ma proposition comme suit
Code:
Sub demasquer()

Set zone = Sheets("DépensesPersonnel BS").UsedRange

'reaffiche toutes les lignes
zone.Rows.Hidden = False
For i = zone.Rows.Count To 1 Step -1
    If UCase(zone.Item(i, 21)) = UCase("oui") Then
        zone.Item(i, 21).EntireRow.Hidden = True
    End If
Next i
End Sub

oui différent de Oui différent de OUI...

à noter.. tu peux limiter le usedrange en supprimant toutes les lignes vides sous ton tableau, mais qui contiennent une mise en forme rouge en colonne U

le usedrange regarde si les cellules contiennent du texte, des valeurs, des formules ou juste une mise en forme quelconque (coloration ou encadrement)

dans la boucle for:
on part de la fin (nombre de lignes dans le usedrange) et on remonte jusqu'à la ligne 1..
 
Dernière édition:

thebenoit59

XLDnaute Accro
Re : masquer les lignes (oui dans colonne U)

Comme l'a souligné vgendron, le problème vient de la transcription du "oui"

Code:
Sub masquer()
With Sheets("DépensesPersonnel BS")
For i = .[u65000].End(xlUp).Row To 1 Step -1
If UCase(.Cells(i, "U").Value) = "OUI" Then .Rows(i).Hidden = True
Next i
End With
End Sub

Le UCase passe le texte en majuscule, pour comparer ce qui est comparable.
 

DAVAWAY

XLDnaute Junior
Re : masquer les lignes (oui dans colonne U)

Merci pour votre retour, désolé d'avoir pas vu ce détail, j'avais regardé ça en testant oui ou OUI et pas Oui..:p

Par contre, il y a une lutte entre les deux codes :

1/ code masquer exécuté
2/ je tente le code démasquer
Et là, la cellule réapparait un fraction de seconde avant de re-disparaître..
Les magiciens ont ils un tour de passe passe :confused: !?
 

vgendron

XLDnaute Barbatruc
Re : masquer les lignes (oui dans colonne U)

euh...
pour MASQUER les lignes, c'est la boucle for i...
pour DEMASQUER: c'est juste

zone.Rows.Hidden = False


donc forcément. si tu laisses les deux dans la meme macro.. tu remasques ce que tu viens de démasquer.. ou l'inverse.. selon l'endroit où tu place la ligne de démasquage..

pour t'en convaincre. et en profiter pour comprendre le fonctionnement..
lance la macro en mode pas à pas. touche F8
 

vgendron

XLDnaute Barbatruc
Re : masquer les lignes (oui dans colonne U)

Bon. du coup. je ne comprend plus trop ce que tu veux faire..

donc voici..
avec une seule macro version Thebenoit
Code:
Sub MaskNoMask()
With Sheets("DépensesPersonnel BS")
For i = .[u65000].End(xlUp).Row To 1 Step -1
  .Rows(i).Hidden = UCase(.Cells(i, "U").Value) = "OUI"
Next i
End With
End Sub


Version moi
Code:
Sub MaskNoMask2()

Set zone = Sheets("DépensesPersonnel BS").UsedRange

For i = zone.Rows.Count To 1 Step -1
        zone.Item(i, 21).EntireRow.Hidden = (UCase(zone.Item(i, 21)) = UCase("oui"))
Next i
End Sub
si la cellule contient oui, la ligne est masquée. sinon la ligne est visible.
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin