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!
Si vous avez une cellule fusionnée et que vous essayez de la filtrer, vous n'obtiendrez que la première ligne:
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:
Ensuite, vous pouvez copier les cellules fusionnées et coller Spécial> Formats sur les cellules que vous voulez à fusionner:
Vous pouvez maintenant supprimer vos cellules fusionnées temporaires, et lorsque vous filtrerez, vous obtiendrez toutes les lignes pour la cellule fusionnée:
{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