Masquer/afficher lignes variables [Résolu]

Nai 474 Messages postés vendredi 29 avril 2005Date d'inscription 8 décembre 2017 Dernière intervention - 14 avril 2017 à 17:40 - Dernière réponse : Nai 474 Messages postés vendredi 29 avril 2005Date d'inscription 8 décembre 2017 Dernière intervention
- 15 avril 2017 à 14:57
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 
474Messages postés vendredi 29 avril 2005Date d'inscription 8 décembre 2017 Dernière intervention

10 réponses

Répondre au sujet
ccm81 8202 Messages postés lundi 18 octobre 2010Date d'inscription 11 décembre 2017 Dernière intervention - 14 avril 2017 à 19:26
0
Utile
1
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 474 Messages postés vendredi 29 avril 2005Date d'inscription 8 décembre 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.
Commenter la réponse de ccm81
ccm81 8202 Messages postés lundi 18 octobre 2010Date d'inscription 11 décembre 2017 Dernière intervention - 14 avril 2017 à 20:13
0
Utile
1
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 474 Messages postés vendredi 29 avril 2005Date d'inscription 8 décembre 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 ! :)
Commenter la réponse de ccm81
ccm81 8202 Messages postés lundi 18 octobre 2010Date d'inscription 11 décembre 2017 Dernière intervention - Modifié par ccm81 le 14/04/2017 à 22:22
0
Utile
2
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 474 Messages postés vendredi 29 avril 2005Date d'inscription 8 décembre 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" ?
ccm81 8202 Messages postés lundi 18 octobre 2010Date d'inscription 11 décembre 2017 Dernière intervention > Nai 474 Messages postés vendredi 29 avril 2005Date d'inscription 8 décembre 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
Commenter la réponse de ccm81
cs_Le Pivert 4759 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 15 avril 2017 à 09:15
0
Utile
2
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 8202 Messages postés lundi 18 octobre 2010Date d'inscription 11 décembre 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
Nai 474 Messages postés vendredi 29 avril 2005Date d'inscription 8 décembre 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 !
Commenter la réponse de cs_Le Pivert