Masquer/afficher lignes variables

Résolu/Fermé
Nai Messages postés 711 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 25 août 2023 - 14 avril 2017 à 17:40
Nai Messages postés 711 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 25 août 2023 - 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 : https://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 !

4 réponses

ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
14 avril 2017 à 19:26
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
0
Nai Messages postés 711 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 25 août 2023 54
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.
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
14 avril 2017 à 20:13
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
0
Nai Messages postés 711 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 25 août 2023 54
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 ! :)
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié le 14 avril 2017 à 22:22
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
0
Nai Messages postés 711 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 25 août 2023 54
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" ?
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404 > Nai Messages postés 711 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 25 août 2023
Modifié le 15 avril 2017 à 10:03
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
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
15 avril 2017 à 09:15
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


0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
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
0
Nai Messages postés 711 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 25 août 2023 54
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 !
0