web-dev-qa-db-fra.com

Comment obtenir des en-têtes de tri / filtrage multi-lignes dans Excel

J'ai une feuille de calcul qui utilise 2 lignes pour les informations d'en-tête. Filtrer en sélectionnant une colonne suppose implicitement une seule ligne d'informations d'en-tête. Le tri comporte une case à cocher de rangée d’en-tête, mais elle permet uniquement de traiter la première ligne comme un en-tête.

Existe-t-il un moyen de faire en sorte que Excel traite les deux premières lignes comme des en-têtes?

17
Dan Neely

Non. Omettez la première ligne de votre plage lorsque vous filtrez automatiquement. De cette manière, les boutons de filtrage automatique apparaissent uniquement sur la ligne d'en-tête inférieure et les données sont filtrées. Je m'attends à ce que votre deuxième ligne d'en-tête soit maintenant extraite dans vos "données".

Vous ne pouvez pas sélectionner une seule cellule et Excel doit le déterminer. Vous devez sélectionner la plage de cellules que vous souhaitez inclure dans Excel.

18
DaveParillo

Une méthode simple pour exécuter la fonction de tri à l'aide de plusieurs lignes d'en-tête consiste à insérer une ligne vide juste au-dessus de la ligne à trier (idéalement, elle se trouve tout en bas de votre en-tête. Sinon, , fais-le.) . Cliquez ensuite sur le numéro de "ligne" pour mettre en évidence la ligne vide. Cliquez avec le bouton droit de la souris sur cette ligne et sélectionnez "Masquer". La nouvelle ligne vide disparaîtra, laissant votre en-tête comme vous le souhaitez et Excel interprétera votre ligne de catégorie comme étant l'en-tête.

7
George Cahill

Si vous sélectionnez une ligne entière (en sélectionnant le numéro de ligne situé à gauche de la ligne), puis activez votre filtre (Données> Filtre), vous obtiendrez des filtres pour tout ce qui se trouve sous la ligne sélectionnée et ignorera tout ce qui se trouve dessus.

2
user291695

Pour filtrer une liste avec 2 lignes d'en-tête, où la deuxième ligne contient les en-têtes de colonne, voici ce que j'ai fait.

  • Couper la première rangée
  • Désactiver le filtrage
  • Réactivez le filtrage pour que la deuxième ligne soit filtrée. Cela indique à Excel quelle est la ligne avec les en-têtes de colonne.
  • Collez la première ligne à nouveau au-dessus de la ligne avec les filtres et les en-têtes de colonne.
  • Vérifiez si le filtre fonctionne maintenant, avec les en-têtes de colonne sur la deuxième ligne.
1
PeterJHill

Ok, ce qui suit fonctionne dans Excel 2010, même après avoir enregistré le fichier en tant que Excel 2007 et avoir été rouvert (fonctionne vraisemblablement aussi dans Excel 2007 ...)

En supposant un en-tête de 3 lignes. Définissez la plage du filtre de la feuille de calcul sur Commencer à la cellule $ A 4 et assurez-vous qu’elle couvre l’ensemble des données à trier. SAUVEZ LE FICHIER.

Désormais, toute sorte traitera les lignes 1 à 3 comme des en-têtes et ne triera donc qu'à partir de la ligne 4. - SAUF si vous modifiez ou annulez la plage de filtres ....

1
deedgess

Je sais que je suis sur SuperUser et non sur StackOverflow, mais la solution à ce problème peut être trouvée en utilisant du code VBA sur Excel 2016.

J'ai un problème similaire (plus complexe).

Je veux ajouter des filtres sur les colonnes explicites, mais pas sur la ligne 1, mais uniquement sur la ligne 2, comme vous pouvez le voir dans la capture d'écran suivante.

enter image description here

J'ai essayé d'utiliser Excel GUI mais cela semble impossible, j'ai donc écrit le code suivant:

'********************************************************
'* SetFilter()
'********************************************************
'* PUBLIC method to call to define CUSTOM AutoFilter
'* on complex header.
'********************************************************

Sub SetFilter()
  'Compute last row number
  Dim nLast As Long
  nLast = Range("A" & Rows.Count).End(xlUp).Row

  'Lock screen update 
  Application.ScreenUpdating = False

  'Unmerge merged cells to allow adding filter
  Range("A1:A2").MergeCells = False
  Range("B1:B2").MergeCells = False
  Range("C1:C2").MergeCells = False
  Range("D1:D2").MergeCells = False
  Range("E1:E2").MergeCells = False
  Range("F1:F2").MergeCells = False

  'Add filter on row 2 and not 1  
  Range("A2:Z" & nLast).Select
  Selection.AutoFilter

  'Remove (or Hide) filter combobox for some columns
  Selection.AutoFilter Field:=GetColumnIndex("C"), VisibleDropDown:=False
  Selection.AutoFilter Field:=GetColumnIndex("G"), VisibleDropDown:=False
  Selection.AutoFilter Field:=GetColumnIndex("H"), VisibleDropDown:=False

  'Merge unmerged cells to restore previous state
  Range("A1:A2").MergeCells = True
  Range("B1:B2").MergeCells = True
  Range("C1:C2").MergeCells = True
  Range("D1:D2").MergeCells = True
  Range("E1:E2").MergeCells = True
  Range("F1:F2").MergeCells = True

  'Unlock screen update 
  Application.ScreenUpdating = True

End Sub

'********************************************************
'* GetColumnIndex()
'********************************************************
'* return column's index from column letters
'********************************************************

Function GetColumnIndex(sColLetter As String) As Integer
    Dim n As Integer: n = 0
    Dim iMax As Integer: iMax = Len(sColLetter)
    Dim i As Integer
    Dim sChar As String
    Dim c As Integer

    For i = 1 To iMax
        sChar = Mid(sColLetter, i, 1)
        c = 1 + Asc(sChar) - Asc("A")
        n = n * 26 + c
    Next

    If n = 1 Then
      n = 1
    End If

    GetColumnIndex = n
End Function

La logique de ce code est

A. Dissocier les cellules d'en-tête fusionnées verticalement pour permettre l'ajout d'un filtre sur la ligne 2

Range("A1:A2").MergeCells = False

Les cellules A1 et A2 ne sont pas fusionnées.

B. Ajouter un filtre automatique sur toutes les cellules de la ligne 2

Range("A2:Z" & nLast).AutoFilter

Le filtre automatique est généré pour les cellules de toutes les lignes à l'exception de la ligne 1.

C. Supprimer ou masquer la liste déroulante FILTER pour certaines colonnes

Selection.AutoFilter Field:=GetColumnIndex("C"), VisibleDropDown:=False

DropBox de la colonne "C" est masqué.

D. Fusionner les cellules non fusionnées pour rétablir l'état d'origine

Range("A1:A2").MergeCells = True

Les cellules A1 et A2 sont à nouveau fusionnées.

1
schlebe

J'avais le même problème, donc la contribution de tout le monde m'a amené à la façon dont ça fonctionne pour moi (jusqu'à présent).

  1. AJOUTEZ une ligne vide sous votre en-tête multi-lignes (si votre en-tête est composé de 5 lignes d'informations et/ou de tailles de cellules impaires, votre NOUVELLE ligne vide sera Row6).

  2. Cliquez sur Row6 (à l'extrême gauche, cliquez sur le "6" (Excel Row #) pour sélectionner la ligne entière/à l'infini). Assurez-vous de NE PAS cliquer sur une autre CELLULE tant que vous n’avez pas terminé les étapes 3 et 4 ci-dessous, sinon vous "désélectionnez" la ligne. Vous voulez le garder 'sélectionné'.

  3. Allez à l'onglet VUE> Figer les volets> Débloquer (faites-le d'abord pour le nettoyer)> Figer. Cela gèlera votre en-tête de 5 lignes et également la ligne vide (rangée6).

  4. Maintenez enfoncée la touche "ALT", puis appuyez sur les touches suivantes: D, F, F (il s'agit du raccourci pour activer/désactiver/désactiver/effacer tous les filtres de la feuille.

  5. À partir de ce moment-là, chaque fois que vous reviendrez utiliser cette feuille et que vous aurez besoin d'activer ces filtres (si vous les avez précédemment désactivés pour une raison quelconque), puis> Sélectionnez votre ligne vide (comme expliqué au point 2); > Activez tous vos filtres (comme expliqué au point 4).

Désolé d'être aussi verbeux, mais après l'avoir fait plusieurs fois, l'aimera probablement (si vous utilisez beaucoup les filtres).

0
JohnB

Excel 2007 peut détecter intelligemment si vous avez des en-têtes à plusieurs lignes. J'ai juste fait une expérience simple avant d'écrire ceci.

Avant de faire votre premier tri, positionnez le curseur juste en dessous de l'en-tête. C'est tout! Le tri va bien, le filtrage va bien. Excel a ignoré la 1ère ligne de mes en-têtes. Il traite simplement la 2ème ligne comme en-tête réel.

0
thenonhacker

Mettez en surbrillance les cellules à trier (sauf les en-têtes), puis sélectionnez le filtre.

0
Laurah

J'utilise Excel 2010. Pour conserver les lignes d'en-tête (par exemple, les 4 premières lignes), mettez en surbrillance la ligne 5, puis activez les filtres. Les lignes 1 à 4 sont exclues du filtre.

0
Tony Bray

Étape 1 Mettez en surbrillance la rangée d’en-tête inférieure. puis vous pouvez uniquement sélectionner les cellules d’une ligne ou sélectionner la ligne entière.

Étape 2, cliquez ensuite sur "Trier et filtrer" dans l'onglet Accueil, puis sélectionnez "Filtrer". Excel ajoute des flèches de filtre à tous les noms de colonnes.

Étape 3 puis cliquez sur une flèche et sélectionnez ensuite une option de tri pour trier le tableau entier par cette colonne.

Enfin, l’étape 4 clique sur "Trier et filtrer" et sélectionnez "Filtrer" à nouveau si vous souhaitez vous débarrasser des flèches tout en conservant la zone de tri définie par le filtre. maintenant, vous pouvez trier normalement, Excel ignore les lignes d'en-tête supplémentaires

0
pte coaching