Masquer/Afficher

Résolu
cedrico9797 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
 lionel -
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. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    plutôt qu'une image, envoies un bout de fichier anonymisé avec
    https://mon-partage.fr/

    Cdlmnt
    0
  2. lionel
     
    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
  3. cedrico9797 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
     
    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. lionel
       
       
      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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. cedrico9797 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
     
    Voici mon fichier, merci d'avance!

    https://mon-partage.fr/f/FcIvCKdY/
    0
  6. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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. cedrico9797 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
       
      Génial, merci bcp! c'est ok pour moi, bonne soirée a tous
      0
      1. lionel > cedrico9797 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
         
        La 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