Masquer lignes automatiquement dans plusieurs feuilles

Résolu/Fermé
Stephxx - 21 août 2015 à 11:51
Stephxx Messages postés 26 Date d'inscription mercredi 17 juin 2015 Statut Membre Dernière intervention 31 août 2015 - 31 août 2015 à 10:35
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.


A voir également:

2 réponses

via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
21 août 2015 à 13:52
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
Stephxx Messages postés 26 Date d'inscription mercredi 17 juin 2015 Statut Membre Dernière intervention 31 août 2015
21 août 2015 à 15:01
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
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702 > Stephxx Messages postés 26 Date d'inscription mercredi 17 juin 2015 Statut Membre Dernière intervention 31 août 2015
21 août 2015 à 16:31
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
Stephxx Messages postés 26 Date d'inscription mercredi 17 juin 2015 Statut Membre Dernière intervention 31 août 2015
21 août 2015 à 16:47
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
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702 > Stephxx Messages postés 26 Date d'inscription mercredi 17 juin 2015 Statut Membre Dernière intervention 31 août 2015
21 août 2015 à 17:01
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
Stephxx Messages postés 26 Date d'inscription mercredi 17 juin 2015 Statut Membre Dernière intervention 31 août 2015
21 août 2015 à 17:15
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
Stephxx Messages postés 26 Date d'inscription mercredi 17 juin 2015 Statut Membre Dernière intervention 31 août 2015
31 août 2015 à 10:35
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