Masquer lignes

mcp229

XLDnaute Junior
Bonsoir,

Je cherche une macro associé à un bouton afin de masquer des ligne en fonction du résultat d'une cellule.

exemple si cellule EI138=2 masquer ligne 138
Toutefois, j'ai environ 1500 lignes sur lesquelles la fonction doit s'appliquer.

Puis une autre fonction pour afficher toute les lignes (et non les colonnes qui sont masquées)
Merci pour votre aide
 

Pièces jointes

  • Devis 2014 V2_03 Test.xlsm
    806.8 KB · Affichages: 52

XLTOF

XLDnaute Nouveau
Re : Masquer lignes

Salut mcp

Perso j'utilise la fonction UNION(Range1, range2...) pour masquer/démasquer des séries de lignes.

D'abord tu définsi une plage quelconque (par exemple la ligne 65000)
il faut la nommer et la définir en utilisant la commande Set

Set maplage as range
maplage = rows(65000)

Ensuite tu fais une boucle qui va vérifier, pour chaque ligne la cellule dont dépend le fait que tu masques ou non:

En admettant que cette cellule soit en colonne D ça donne


for i = 1 to 1500 'pour chaque ligne à vérifier

select case activesheet.cells(i,4).value

case 2 'en admettant qu'on masque si la colonne D a pour valeur 2
' dans ce cas j'ajoute la ligne i à maplage
Set maplage= Union(maplage, rows(i))

end select

une fois la boucle terminée tu n'as plus qu'a dire que tu veux masquer maplage.

maplage.EntireRow.Hidden = True


Et le tour est joué.
Pour le démasquage c'est la même chose sauf qu'a la fin tu lui dis de démasquer tes lignes


A+

next
 

mcp229

XLDnaute Junior
Re : Masquer lignes

Merci pour ta réponse, mais j'ai oublié de préciser que je suis totalement débutant en macro.
Donc c'est très compliqué de comprendre ton explication.
Est il possible d'avoir les lignes de code à inclure dans la macro?


Merci pour ton aide.
 

Staple1600

XLDnaute Barbatruc
Re : Masquer lignes

Bonsoir à tous


Regardes si ce petit exemple
(qui utilise le filtre automatique et les affichages personnalisés)
peut t'inspirer (cliques sur l'image pour la voir en grand)
filtrecustomview.png
Code à adapter à ta problématique
Code:
Sub Macro1()
Selection.AutoFilter
    ActiveSheet.Range("$A$1:$A$50").AutoFilter Field:=1, Criteria1:="2"
    ActiveWorkbook.CustomViews.Add ViewName:="VALEUR2", PrintSettings:=True, _
        RowColSettings:=True
    ActiveSheet.Range("$A$1:$A$50").AutoFilter Field:=1, Criteria1:="1"
    ActiveWorkbook.CustomViews.Add ViewName:="VALEUR1", PrintSettings:=True, _
        RowColSettings:=True
End Sub


Code:
Sub Masquer2()
ActiveWorkbook.CustomViews("VALEUR1").Show
End Sub
Code:
Sub Masquer1()
ActiveWorkbook.CustomViews("VALEUR2").Show
End Sub
 

XLTOF

XLDnaute Nouveau
Re : Masquer lignes

Hello,
J'ai adapté ton fichier avec 2 boutons : un pour masquer l'autre pour démasquer.
Par contre je pense que tu bosses sur Mac car tes formules ne semblent pas fonctionner sur mon PC.
J'imagine que c'est différent sur ta machine.
Autre petit problème, le fichier est désormais trop lourd pour passer sur le forum (même compressé)...
Je te laisse le code ci dessous si tu veux le coller dans ton fichier, sinon je peux t'envoyer le fichier directement par mail (dans ce cas donne moi ton adresse)

Donc j'ai programmé comme tu avais dit dans ton post plus haut :
Si la colonne EI est égale à 2 => je masque
Sinon => je laisse démasqué.
Voilà ce que ça donne :

Sub mask()


Dim maplage As Range

Set maplage = Rows(65000)

For i = 63 To 905
Select Case ActiveSheet.Cells(i, 139).Value
Case 2
Set maplage = Union(maplage, Rows(i))


End Select

Next
maplage.EntireRow.Hidden = True


End Sub
Sub demask()

Rows("63:905").Select

Selection.EntireRow.Hidden = False
Range("I14").Select
End Sub


Si tu as besoin d'adapter tu peux bidouiller le code. C'est vraiment pas très compliqué. Même si tu débutes, vu les formules que tu manies dans le classeur, le VBA ne devrait pas te faire peur.

Bonne soirée

A+
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Masquer lignes

Bonsoir le fil, bonsoir le forum,

Arf ! Se faire griller par Staple (que je salue au passage en lui faisant des excuses tellement plates que que même les éléphants s'arrêtent pour s'y voir) c'est plus qu'énervant ...
J'avais moi aussi une proposition avec Filtre automatique mais pas aussi élaborée que la sienne. J'envoie quand même... Clique sur le bouton Masquer/Afficher.
le code :
Code:
Private Sub CommandButton1_Click()
Dim d As Object 'déclare la variable d (onglet Devis)
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
    
ActiveCell.Select 'enlève le focus au bouton
Set d = Sheets("DEVIS") 'définit l'onglet d
dl = d.Cells(Application.Rows.Count, 139).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 138 (=EI) de l'onglet d
Set pl = d.Range("EI62:EI" & dl) 'définit la plage pl (une cellule au dessus du début des données)
If Me.CommandButton1.Caption = "Masquer" Then 'condition : si le texte du bouton est "Maquer"
    'filtre toutes les ligne de la plage dont la valeur est différente de 2 (= masque toutes les ligne =2)
    pl.AutoFilter Field:=1, Criteria1:="<>2"
    Me.CommandButton1.Caption = "Afficher" 'change le texte du bouton
Else 'sinon
    pl.AutoFilter 'supprime le filtre automatique (=affiche toutes les lignes)
    Me.CommandButton1.Caption = "Masquer" 'change le texte du bouton
End If 'fin de la condition
End Sub
Le fichier :
 

Pièces jointes

  • MCP_v01.xlsm
    796.8 KB · Affichages: 58

Staple1600

XLDnaute Barbatruc
Re : Masquer lignes

Bonsoir Robert

Robert
Je n'ai pas de mérite.
Là où j'ai trituré 50 lignes, toi tu en as tâté 1500, mis des commentaires dans ton code et joint un fichier exemple (qui d'ailleurs par sa taille nous rappelle aussi les pachydermes aux grandes oreilles qui s'ébrouent dans la savane africaine.)
Tu me diras c'est pas ta faute, c'est le demandeur qui a introduit le mastodonte dans le fil en premier;)


[avis personnel]
NB: Personnellement, avec les affichage personnalisés et le filtre automatique, je pense qu'on peut ne pas utiliser de macros.
Sauf si on éprouve une envie irrépressible de cliquer sur des boutons, ce que je peux comprendre, ayant moi-même quelques inclinaisons du même tonneau, mais plutôt vers certaines touches de mon clavier, surtout une en faite ;)
[/avis personnel]
 
Dernière édition:

mcp229

XLDnaute Junior
Re : Masquer lignes

Merci, bien recu ton fichier.

Ca marche tres bien.

j'aurais besoin de comprendre ce que veut dire
Set maplage = Rows(65000)

Select Case ActiveSheet.Cells(i, 139).Value
Case 2

et
Rows("63:905").Select


Désolé d'abusé.
 

XLTOF

XLDnaute Nouveau
Re : Masquer lignes

Ca marche tres bien.

j'aurais besoin de comprendre ce que veut dire
Set maplage = Rows(65000)


=> ça veut dire que je définis une plage de cellule que j'appelle "Maplage" et qui au début de la macro contient la ligne 65000. Pour que la macro marche il ne faut pas que la plage soit vide, j'inclue donc une ligne au pif qu'on pourra masquer /démasquer sans que cela ait de conséquenses sur ton fichier.



Select Case ActiveSheet.Cells(i, 139).Value

=> on peut traduire ça par "selon la valeur de la cellule ligne i, colonne 139 de la feuille active (feuille ou y'a le bouton qui a déclenché la macro). Pour rappel le i en question est celui de la boucle qui passe successivement de 63 à 905.
En gros il verifie la valeur de la colonne EI pour les lignes 63 à 905



Case 2

=> On peut traduire ça par "si tu rencontre le cas ou la cellule vaut 2" (c'est en fait une des réponses possibles au select case expliqué plus haut)

et
Rows("63:905").Select
=> ça veut dire "selectione les lignes 63 à 905"



A+
 

mcp229

XLDnaute Junior
Re : Masquer lignes

Génial,


J'ai encore un petit souci,
Les eventuel cellules à masquer sont les lignes 63 à 1820

j'ai donc un peu modifié le code, mais seules les lignes 63 à 905 sont affecté,
As tu une explication?


Sub mask()


Dim maplage As Range

Set maplage = Rows(65000)

For i = 63 To 1821
Select Case ActiveSheet.Cells(i, 139).Value
Case 2
Set maplage = Union(maplage, Rows(i))


End Select

Next
maplage.EntireRow.Hidden = True


End Sub
Sub demask()

Rows("63:1821").Select

Selection.EntireRow.Hidden = False
Range("I14").Select
End Subú
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Masquer lignes

Bonsoir le fil, bonsoir le forum,

mcp229
Tu n'as pas daigné tester la solution de Staple ?
(la mienne j'en parle même pas ;) )
Bon finalement, je regrette d'avoir tâté 1500 lignes... ;)

[Édition]Je te voisStaple !
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Masquer lignes

Re


mcp229
Tu lis mes messages ou tu les ignores ?
La moindre des politesse quand on demande de l'aide, c'est de tester toutes les solutions proposées, non ? :rolleyes:
(ou au minimum de répondre à tous les interlocuteurs du fil, non ?)

NB: Serait-ce parce que j'ose utiliser un PC et pas un MAC ?
Ou alors mon ton t'irrites, peut-être ?
(Ce n'est pourtant qu'un ton parmi d'autres, teinté d'un peu de malice ironique parfois mais tout en gardant un fond amical. ;) )
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 944
Membres
103 989
dernier inscrit
jralonso