Masquer lignes automatiquement dans plusieurs feuilles

Résolu
Stephxx -  
Stephxx Messages postés 26 Statut Membre -
Bonjour à tous,

J'ai créé un classeur de deux pages. La premiere comporte en colonne A une liste d'articles avec leurs paramètres en col.B et C. Les utilisateurs du fichier appliquent leurs filtres sur les colonnes B et C pour ne conserver que certain articles. Un certain nombre d'articles, c'est à dire de lignes sont donc masquées.
je souhaiterais qu'apparaissent en colonne A de la page 2 les mêmes articles qui sont affichés en colonne A de la feuille1 donc toutes les lignes qui ne sont pas masquées. Une idée

Détail:

Feuille1

A B C
ligne1 Article

ligne2 toto

ligne4 tata

ligne9 tonton

les lignes 3, 5, 6, 7, 8 sont donc masqué par des filtres sur les colonnes B et C.

Je souhaite obtenir une feuille 2 avec:
Feuille2
A
ligne1 Article

ligne2 toto

ligne3 tata

ligne4 tonton

De préférence avec des formules, plus simple pour mes utilisateurs. Avec une macro, il faudrait qu'elle se déclenche dès qu'un filtre est appliqué mais aussi si un utilisateurs cache à la main une ligne dans la feuille 1.

Merci d'avance.

2 réponses

  1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonjour

    Par formule je ne pense pas possible de tester si une ligne est masquée

    Par macro on peut faire une macro placée dans le Worksheet de la 2eme feuille qui s'active dès qu'on sélectionne la feuille 2

    Private Sub Worksheet_Activate()
    Dim Ligne As Long
    'dernière ligne non vide feuille 1
    Ligne = Sheets(1).Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
    ' Boucle sur les lignes feuille 1
    For n = 1 To Ligne
    ' si la ligne n'est pas masquée
    If Sheets(1).Rows(n).Hidden = False Then
    'incrementation variable i pour la ligne
    i = i + 1
    'Boucle sur les colonnes 1 à 3 de feuille 1 (à adapter si besoin)
    For c = 1 To 3
    ' Copie les cellules en feuille 2
    Sheets(2).Cells(i, c) = Sheets(1).Cells(n, c)
    Next c
    End If
    Next n
    End Sub


    Pour placer la macro dans le Worksheet feuille 2 :
    ALT + F11 pour ouvrir l'éditeur VBA
    Selectionner par doubleclic la Feuille 2 dans l'arborescence
    Copier-coller la macro dans la page
    Fermer l'éditeur

    Cdlmnt
    Via
    1
    1. Stephxx Messages postés 26 Statut Membre
       
      Merci Via, ce code fonctionne parfaitement.

      Je cherche à le faire évoluer et j'ai abouti au code suivant qui permet de cacher de manière identique les lignes de la feuille 2 à partir de celle de la feuille 1.

      Sub Macro1()
      Dim Ligne As Long
      i = 5
      Ligne = Sheets(1).Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
      For n = 5 To Ligne
      If Sheets("Données").Rows(n).Hidden = True Then
      Sheets("Détail").Rows(i).Hidden = True
      i = i + 1
      Else: Sheets("Détail").Rows(i).Hidden = False
      i = i + 1
      End If
      Next n
      End Sub


      je cherche maintenant à obtenir le prix total de la commande dans une cellule, i.e: multiplier le nombre d'articles commandés (feuil2 colB) par le prix unitaire (feuil1 colC). initialement j'obtenais ce prix total avec la fonction sommeprod: "=SOMMEPROD(Feuil2!B5:B2000;Feuil1!$C5:$C2000)"

      connaissez vous une fonction équivalente à sommeprod mais qui ne prenne pas en compte les lignes cachées ? J'ai exploré SOUS.TOTAL mais sans succès.
      0
    2. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759 > Stephxx Messages postés 26 Statut Membre
       
      C'est bien SOUS.TOTAL qu'il faut utiliser pourtant, exemple pour avoir le total des lignes non masquées de la colonne C :
      =SOUS.TOTAL(9;C:C)
      0
    3. Stephxx Messages postés 26 Statut Membre
       
      la fonction SOUS.TOTAL(9, ...) donne la somme des valeurs, je souhaite l'équivalent de SOMMEPROD qui donne la somme du produit de deux colonnes (C1*B1+C2*B2+C3*B3+ ...).

      PS: je détaille au cas où mais je me doute que cette fonction est bien connue :)
      0
    4. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759 > Stephxx Messages postés 26 Statut Membre
       
      Il faut se baser sur la colonne qui filtre
      Si par exemple le filtre est un X en colonne D et les prix en colonne C
      =SOMMEPROD((C2:C2000)*(D2:D2000="X"))
      0
    5. Stephxx Messages postés 26 Statut Membre
       
      merci Via, j'avais vu cette solution mais les utilisateurs finaux filtrerons suivant des critères multiples non déterminés. On ne peut s'appuyer sur cette solution.
      0
  2. Stephxx Messages postés 26 Statut Membre
     
    Le sujet est résolu malheureusement je ne m'étais pas connecté quand je l'ai posté, impossible de le marqué comme tel. ARTICLE RESOLU, merci.
    0