Masquer/Afficher

Résolu
Bonjour, je ne sais pas si mon sujet sera au bon endroit mais voici ma demande et merci a celui qui pourra m'aider :) :

je souhaite réaliser un fichier excel de quantitatif de materiel comme le modele en PJ.

et je voudrais masquer chaque ligne ou la colonne quantité est a 0, a l'aide d’un bouton Masquer/Afficher

merci pour votre aide! salutations

6 réponses

  1. Bonjour cedrico,

    J'ai vu que ta colonne G est celle des quantités "Qté" ; tu veux donc
    masquer les lignes de ta colonne G pour lesquelles Qté = 0.

    Il semble que ton texte "Qté" est en G13 ; si oui, ta 1ère ligne de
    données est en G14 ; donc mon code VBA ci-dessous utilise 14
    en ligne #7 et en ligne #8 ; à toi d'adapter si besoin : tu pourrais
    vouloir commencer à partir de la ligne 16.

    Le code vérifie la colonne G, de la ligne 14 à la dernière ligne ;
    si la couleur de remplissage de ta cellule (= le fond) est en
    vert clair (index de couleur : n° 35), alors :
    ne rien faire si cette cellule est vide ; s'il y a 0, la masquer.

    NB : si jamais tu saisis du texte sur fond vert clair en colonne G,
    ces lignes resteront visibles ; si ta couleur de fond est une autre
    que la mienne, tu dois bien sûr adapter le n° d'index couleur.

    
    Option Explicit
    
    Sub Essai()
      Dim dlig As Long, lig As Long
      dlig = Range("G" & Rows.Count).End(xlUp).Row
      Application.ScreenUpdating = False: Rows("14:" & dlig).Hidden = 0
      For lig = 14 To dlig
        With Cells(lig, 7)
          If .Interior.ColorIndex = 35 Then
            If Not IsEmpty(.Value) And .Value = 0 Then Rows(lig).Hidden = -1
          End If
        End With
      Next lig
    End Sub
    
    

    Merci de me dire si ça te convient, et si ton problème est réglé,
    n'oublie pas de passer le sujet en résolu.  ;)
     
    0
    1. salut Lionel, merci bcp pour ton code!
      ça correspond très bien a ce que je veux faire!

      en revanche, j'aimerai pouvoir tout faire ré-apparaître au 2eme clic de mon bouton associé a la macro. tu as une idée? merci bcp!
      0
      1.  
        Bonjour cedrico,

        La proposition de ccm81 utilise un 2ème bouton ; j'ai préféré faire ta
        nouvelle demande avec ton même bouton « Afficher/Masquer » ;
        de plus, j'ai ajouté une petite correction pour ta 1ère ligne de départ.

        Dans mon 1er code VBA, avant de masquer des lignes, j'ai commencé
        par toutes les afficher avec la 2ème instruction de la ligne #7 :

        Rows("14:" & dlig).Hidden = 0
        

        Donc si on s'arrête aussitôt après, ça fait ce que tu demandes :
        afficher toutes les lignes ; reste à le rendre conditionnel.

        -------------------------------------------------------

        Pour faire cela, j'ai besoin d'une cellule de ta feuille qui conservera l'état
        masqué ou non des lignes adéquates : 0 = visible ; 1 = masqué ; c'est un
        choix purement arbitraire, et j'aurais pu inverser ces valeurs.

        ⚠  Au début, le nombre doit obligatoirement correspondre avec la réalité :
        1 si des lignes sont masquées ; 0 si toutes les lignes sont affichées ;
        ensuite, la macro inversera systématiquement cette valeur.

        -------------------------------------------------------

        Où mettre cette valeur ? J'ai vu que tu as 2 nombres en J94 et J95 ; j'ai donc choisi
        une cellule de la même colonne, en J2 ; si tu préfères utiliser une autre cellule,
        ce sera à toi d'adapter la ligne #8 du code VBA ci-dessous :

        
        Option Explicit
        
        Sub Essai()
          Dim dlig As Long, lig As Long
          dlig = Range("G" & Rows.Count).End(xlUp).Row
          Application.ScreenUpdating = False: Rows("15:" & dlig).Hidden = 0
          [J2] = 1 - [J2]: If [J2] = 0 Then Exit Sub
          For lig = 15 To dlig
            With Cells(lig, 7)
              If .Interior.ColorIndex = 35 Then
                If Not IsEmpty(.Value) And .Value = 0 Then Rows(lig).Hidden = -1
              End If
            End With
          Next lig
        End Sub
        
        

        Seule différence avec mon code VBA précédent : ajout de la ligne #8 ;
        fais un clic droit sur ton bouton « Afficher/Masquer » et choisis l'item :
        « Affecter une macro... » (pour lier ma macro Essai à ton bouton).

        -------------------------------------------------------

        Si tu veux que la valeur de J2 n'apparaisse pas, mets lui une couleur de
        texte identique à celle du fond ; autre solution : utilise H2 à la place de J2
        car ainsi, ta cellule sera cachée sous ton bouton « Masquer/Afficher » ;
        si tu fais comme ça, n'oublie pas de changer ainsi la ligne #8 :

          [H2] = 1 - [H2]: If [H2] = 0 Then Exit Sub
        

        ⚠  il faut faire 3 changements !

        -------------------------------------------------------

        Comme ta ligne d'en-têtes qui contient "Qté" est en ligne 14, la 1ère ligne
        peut être celle qui suit => la ligne n° 15 et plus la n° 14 ; 2 changements
        déjà faits, en lignes #7 et #9 du code VBA.

        Merci de me dire si ça te convient, et si ton problème est réglé,
        n'oublie pas de passer le sujet en résolu.  ;)

        PS :  Je préfère ne pas te retourner ton fichier joint, car à son ouverture, j'ai eu
        le message d'erreur "contenu illisible" ; je l'ai quand même ouvert (et j'en ai vu
        le contenu), mais un message a indiqué : "certaines parties sont perdues".
         
        0
    2. Voici mon fichier, merci d'avance!

      https://mon-partage.fr/f/FcIvCKdY/
      0
      1. Bonjour à tous les deux

        J'ai complété la proposition de lionel, avec un deuxième bouton pour afficher tout
        http://www.cjoint.com/c/GFBmpQ4UMXB

        Cdlmnt
        0
        1. Génial, merci bcp! c'est ok pour moi, bonne soirée a tous
          0
        2. @cedrico9797La solution de ccm81 avec 2 boutons marche très bien ; si tu préfères une solution
          avec un seul bouton, tu peux lire mon message du 27 juin à 15:54 ; il y a en plus
          une petite correction pour la ligne de départ : à partir de la ligne n° 15 ; c'est aussi
          ma réponse à tes 2 messages de 09:31 et 09:55.
          0