Signaler

Masquer/afficher lignes variables [Résolu]

Posez votre question Nai 467Messages postés vendredi 29 avril 2005Date d'inscription 1 août 2017 Dernière intervention - Dernière réponse le 15 avril 2017 à 14:57 par Nai
Bonjour la communauté ! :)

Je cherche à masquer/afficher des lignes dont le numéro varie. En effet, de nouvelles lignes sont ajoutées chaque jour et le numéro de ligne à masquer change.

J'ai bien trouvé ceci : https://www.excel-downloads.com/threads/vba-masquer-des-lignes-variables.210111/
Sub MacroNantes()
  Dim ldebut As Integer
  Dim lfin As Integer
  ldebut = Range("LDEB")
  lfin = Range("LFIN")
  
  'Affiche toutes les lignes
  Sheets("Véhicules").Select
  Rows("1:1000").Select
  Selection.EntireRow.Hidden = False
  'Masque les lignes
  Rows(ldebut & ":" & lfin).Select
  Selection.EntireRow.Hidden = True
  
  Range("A1").Select
End Sub


Mais je n'ai pas du comprendre comment la macro fonctionne. Lorsque je la met dans un module, son exécution déclenche le débogueur. J'ai évidemment modifié LDEB et LFIN en les termes qui m’intéressent (en l'occurrence "total_reel_ta1" et "total_reel_ta4").
Quelqu'un peut-il m'expliquer où est mon erreur ?

Voici le fichier : http://www.cjoint.com/c/GDopNsFqrQn
L'idée est de masquer les détails sous les totaux (Total, Garçons, Filles). J'adapterais pour la feuille Réel et Prévisionnel.

Merci d'avance pour votre aide !

Afficher la suite 
Utile
+0
plus moins
Bonjour

Je n'ai pas bien compris ce que tu veux faire, mais as tu pensé à l'outil "Grouper et créer un plan" pour masquer/afficher un groupe de lignes avec un simple clic

Cdlmnt
Nai 467Messages postés vendredi 29 avril 2005Date d'inscription 1 août 2017 Dernière intervention - 14 avril 2017 à 19:48
Ma foi non ! Merci pour cette réponse !
Visuellement, je n'aime pas trop, mais ça fait ce que je souhaite ^^
Je pensais à une macro qui ferait exactement cela, mais en ajoutant un bouton plus proche des données à afficher/masquer. Une petite loupe par exemple.
Je pensais à un bouton unique (qui affiche et masque). Je me souviens avoir utilisé cela mais pour des lignes fixes.
Répondre
Donnez votre avis
Utile
+0
plus moins
Une macro reste envisageable pour des lignes variables, il suffit de savoir comment les repérer.
Il faudrait que tu précises quelles sont les lignes à masquer, dans quelle(s) feuille(s) etc ....

Cdlmnt
Nai 467Messages postés vendredi 29 avril 2005Date d'inscription 1 août 2017 Dernière intervention - 14 avril 2017 à 20:45
Dans le fichier joint, les lignes à masquer/afficher sont dans la feuille Prévisionnel (et aussi Réel, mais j'adapterais la macro ;) )
Les lignes 24 à 27 (les détails de la ligne 23)
Les lignes 29 à 32 (détails de la ligne 28)
34 à 37 (détails de la ligne 33).
C'est une macro qui me servirait dans d'autres feuilles (tous les détails n'ont pas toujours besoin d'être affichés (comme la feuille Récap par exemple)) ^^
Merci pour l'aide ! :)
Répondre
Donnez votre avis
Utile
+0
plus moins
A mettre dans un module général (Module 2 par exemple)
Tu peux leur affecter un raccourci clavier ou les affecter à un bouton.
Public Sub Masquer()
Dim obj As Object, liobj As Long
With ActiveSheet
  Set obj = .Columns(cotot).Find("Total", , , xlWhole)
  If obj Is Nothing Then MsgBox "le mot Total n'est pas en colonne " & cotot: Exit Sub
  liobj = obj.Row
  Rows(liobj + 1 & ":" & liobj + 4).Hidden = True
  Rows(liobj + 6 & ":" & liobj + 9).Hidden = True
  Rows(liobj + 11 & ":" & liobj + 14).Hidden = True
End With
End Sub

Public Sub Demasquer()
Dim lifin As Long
With ActiveSheet
  lifin = 1000
  Rows(1 & ":" & lifin).Hidden = False
End With
End Sub

http://www.cjoint.com/c/GDouwk5PdFs

Cdlmnt
Nai 467Messages postés vendredi 29 avril 2005Date d'inscription 1 août 2017 Dernière intervention - 14 avril 2017 à 22:26
Re :)
J'ai un problème à :
  Set obj = .Columns(cotot).Find("Total", , , xlWhole)

Le débogueur n'est pas content...
Avec cette macro, où elle cherche le mot "Total" ?
Répondre
ccm81 7935Messages postés lundi 18 octobre 2010Date d'inscription 6 août 2017 Dernière intervention - 15 avril 2017 à 09:56
Effectivement, j'ai oublié de te mettre (post 5) la déclaration de la constante cotot (voir dans mon fichier, en tout début de code)
Public Const cotot As String = "F"

Cdlmnt
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour,

ccm81, ta macro est très bien, mais elle ne tient pas en compte l'ajout de ligne!

Je me suis permis de la corriger :

Option Explicit
Public Const cotot As String = "F"
Public Sub Masquer()
Dim obj As Object, liobjtotal, liobjgars, liobjfille As Long
Dim DernLigne As Long
DernLigne = Range("F65536").End(xlUp).Row
With ActiveSheet
  Set obj = .Columns(cotot).Find("Total", , , xlWhole)
  If obj Is Nothing Then MsgBox "le mot Total n'est pas en colonne " & cotot: Exit Sub
  liobjtotal = obj.Row
 Set obj = .Columns(cotot).Find("Garçons", , , xlWhole)
  If obj Is Nothing Then MsgBox "le mot Garçons n'est pas en colonne " & cotot: Exit Sub
  liobjgars = obj.Row
   Set obj = .Columns(cotot).Find("Filles", , , xlWhole)
  If obj Is Nothing Then MsgBox "le mot Filles n'est pas en colonne " & cotot: Exit Sub
  liobjfille = obj.Row
   Rows(liobjtotal + 1 & ":" & liobjgars - 1).Hidden = True
 Rows(liobjgars + 1 & ":" & liobjfille - 1).Hidden = True
  Rows(liobjfille + 1 & ":" & DernLigne).Hidden = True
End With
End Sub
Public Sub Demasquer()
Dim lifin As Long
With ActiveSheet
  lifin = 1000
  Rows(1 & ":" & lifin).Hidden = False
End With
End Sub


ccm81 7935Messages postés lundi 18 octobre 2010Date d'inscription 6 août 2017 Dernière intervention - 15 avril 2017 à 10:01
Salut cs_LePivert,

mais elle ne tient pas en compte l'ajout de ligne!
J'ai pensé que l'ajout de ligne ne concerne que la liste des noms et que, à partir de la ligne du Total, le tableau des résultats reste identique,

Cdlmnt
Répondre
Nai 467Messages postés vendredi 29 avril 2005Date d'inscription 1 août 2017 Dernière intervention - 15 avril 2017 à 14:57
Merci ccm ^^ Je n'avais pas vu le fichier joint :/ Ctrl D et M c'est top, mais ça ne marche pas quand j’intègre la macro au fichier.

Merci Le Pivert, c'est nickel, parfait !

Pouvez-vous m'expliquer, en gros, à quoi correspondent les lignes. Ex :
Set obj = .Columns(cotot).Find("Filles", , , xlWhole) 'Pourquoi tant de virgule ?

Ou
Rows(liobjtotal + 1 & ":" & liobjgars - 1).Hidden = True


Aussi, puis-je intégrer cette macro à une feuille, et non un module ? Je n'ai pas encore bien compris la différence entre l'intégration dans un module ou une feuille.

Merci à vous !
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !