Bonjour BsAlv,
J'ai pu appliquer la macro. Elle a permis de remonter les informations regroupées par tronçon vers le haut. Mais cela n'a pas permis de supprimer les lignes vides (à ce stade-là, pour moi les lignes vides correspondent à des absences d'information à partir de la colonne E et jusqu'à la dernière colonne. Voici la macro (test)
:
Sub test()
Dim iLigneMax
Set dict = CreateObject("scripting.dictionary") 'dictionaire pour les valeurs unique de la colonne A
With Sheets("Passed").Range("A1").CurrentRegion 'la plage
For i = .Rows.Count To 2 Step -1 'boucle du fin vers le début
If Not dict.exists(.Cells(i, 1).Value) Then 'nouveau valeur unique
dict(.Cells(i, 1).Value) = 0 'ajouter au dictionaire
r = Application.Match(.Cells(i, 1).Value, .Columns(1), 0) 'première ligne de cette valeur
'Application.Goto .Cells(r, 1)
iLigneMax = 1
For j = 4 To 15 ' de la colonne E vers O
Set c = .Cells(r, j).Resize(i - r + 1) 'cette plage
c.Name = "conejo" 'nom de cette plage
arr = Filter(Evaluate("transpose(if(conejo="""",""~"",conejo))"), "~", 0) 'matrice ave élimination des cellules vides
iLigneMax = Application.Max(iLigneMax, UBound(arr) + 1)
c.ClearContents 'vider la plage
If UBound(arr) >= 0 Then c.Resize(UBound(arr) + 1).Value = Application.Transpose(arr) 'coller les valeurs non-vides
Next
'Debug.Print r, i, iLigneMax
If iLigneMax < i - r + 1 Then
With .Cells(r + iLigneMax, 1).Resize(i - r - iLigneMax + 1).EntireRow
On Error Resume Next
.Ungroup
On Error GoTo 0
.Delete
End With
End If
With .Cells(r, 1).EntireRow.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 3
End With
End If
Next
End With
End Sub