Masquer/afficher lignes variables

Résolu
Nai Messages postés 709 Date d'inscription   Statut Membre Dernière intervention   -  
Nai Messages postés 709 Date d'inscription   Statut Membre Dernière intervention   -
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 !


--
Bien à vous,
Naï
ps: je surveille tous mes sujets non résolus, si solution vous avez, je la lirais à coup sûr :)

4 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. Nai Messages postés 709 Date d'inscription   Statut Membre Dernière intervention   56
       
      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
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. Nai Messages postés 709 Date d'inscription   Statut Membre Dernière intervention   56
       
      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
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. Nai Messages postés 709 Date d'inscription   Statut Membre Dernière intervention   56
       
      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
      1. ccm81 Messages postés 11033 Statut Membre 2 434 > Nai Messages postés 709 Date d'inscription   Statut Membre Dernière intervention  
         
        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
  4. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. ccm81 Messages postés 11033 Statut Membre 2 434
       
      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
    2. Nai Messages postés 709 Date d'inscription   Statut Membre Dernière intervention   56
       
      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