web-dev-qa-db-fra.com

Filtrage Excel pour les cellules fusionnées

J'essaie de faire un calcul des heures travaillées pour chaque employé sur chaque projet sur lequel il a travaillé. Mais je ne sais pas comment sélectionner car les cellules qui contiennent le nom de l'employé sont fusionnées comme dans l'image. Et si je veux voir sur le projet no. 3 qui sont les employés qui ont travaillé, le filtrage Excel ne peut pas prendre le nom "John" qui ne correspond qu'au projet n ° 1. Pour être plus clair, j'ai besoin de savoir comment le filtrage sera effectué pour les cellules A3 et A4. Si je veux immerger les cellules, John ne sera que sur la cellule A2, et en fait, il a également travaillé sur les projets 2 et 3.

Merci!

Excel screenshot

3

Si vous avez une cellule fusionnée et que vous essayez de la filtrer, vous n'obtiendrez que la première ligne:
Rows with Merged Cells
Filtered Merged Cells only shows first row

Pour résoudre ce problème, vous devez d'abord commencer par créer vos cellules fusionnées ailleurs, annuler la fusion de vos cellules de filtre et remplir les valeurs dans toutes les cellules:
Table cells unmerged, merged cells on right

Ensuite, vous pouvez copier les cellules fusionnées et coller Spécial> Formats sur les cellules que vous voulez à fusionner:
Copying the Merged Cells and using Paste Special to put format in data table
The Merged Cell formatting pasted in place

Vous pouvez maintenant supprimer vos cellules fusionnées temporaires, et lorsque vous filtrerez, vous obtiendrez toutes les lignes pour la cellule fusionnée:
enter image description here


{EDIT} Voici une macro qui appliquera automatiquement les modifications ci-dessus à une plage spécifiée: =

Public Sub FilterableMergedCells()
    Dim WorkingRange As Range
SelectRange:
    Set WorkingRange = Nothing
    On Error Resume Next
    Set WorkingRange = Application.InputBox("Select a range", "Get Range", Type:=8)
    On Error GoTo 0
    'If you click Cancel
    If WorkingRange Is Nothing Then Exit Sub
    'If you select multiple Ranges
    If WorkingRange.Areas.Count > 1 Then
        MsgBox "Please select 1 continuous range only", vbCritical
        GoTo SelectRange
    End If

    Dim ScreenUpdating As Boolean, DisplayAlerts As Boolean, Calculation As XlCalculation
    ScreenUpdating = Application.ScreenUpdating
    DisplayAlerts = Application.DisplayAlerts
    Calculation = Application.Calculation

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Application.Calculation = xlCalculationManual

    Dim WorkingCell As Range, MergeCell As Range, MergeRange As Range, OffsetX As Long, OffsetY As Long
    OffsetX = WorkingRange.Cells(1, 1).Column - 1
    OffsetY = WorkingRange.Cells(1, 1).Row - 1
    'Create temporary sheet to work with
    With Worksheets.Add
        WorkingRange.Copy .Cells(1, 1)
        'Loop through cells in Range
        For Each WorkingCell In WorkingRange.Cells
            'If is a merged cell
            If WorkingCell.MergeCells Then
                'If is the top/left merged cell in a range
                If Not Intersect(WorkingCell, WorkingCell.MergeArea.Cells(1, 1)) Is Nothing Then
                    Set MergeRange = WorkingCell.MergeArea
                    'Unmerge cells
                    MergeRange.MergeCells = False
                    'Replicate value to all cells in formerly merged area
                    For Each MergeCell In MergeRange.Cells
                        If WorkingCell.FormulaArray Is Null Then
                            MergeCell.Formula = WorkingCell.Formula
                        Else
                            MergeCell.FormulaArray = WorkingCell.FormulaArray
                        End If
                    Next MergeCell
                    'Copy merge-formatting over old Merged area
                    .Cells(WorkingCell.Row - OffsetY, WorkingCell.Column - OffsetX).MergeArea.Copy
                    WorkingCell.PasteSpecial xlPasteFormats
                End If
            End If
        Next WorkingCell
        .Delete
    End With

    Set MergeRange = Nothing
    Set WorkingRange = Nothing

    Application.ScreenUpdating = ScreenUpdating
    Application.DisplayAlerts = DisplayAlerts
    Application.Calculation = Calculation
End Sub
3
Chronocidal

Utilisez Filter. Il est suffisamment intelligent pour gérer les cellules fusionnées. Par exemple, si vous avez un filtre comme celui-ci:

enter image description here

et vous filtrez les projets 2, 3 et 4, vous obtenez ceci:

enter image description here

ce qui est tout à fait correct.

0
Vityata