Bonjour, Salut Dhany !
Ce qui me déroutait, c'était ces flottements entre différentes lignes... et des données dont on ne savait pas trop comment calculer le positionnement...
J'ai fini par me cadrer pour prendre en considération la ligne 3 (on peut calculer des bornes sur une ligne lorsqu'elle est définie), et on opère les fusions sur la ligne qui précède :
Sub Test()
Dim d%, f%, n%, aa
With ActiveSheet.Rows(3)
d = .Cells(1, 1).End(xlToRight).Column
f = .Cells(1, .Columns.Count).End(xlToLeft).Column
n = f - d + 1
aa = .Cells(1, d).Resize(, n).Value
For i = 1 To UBound(aa, 2) - 1
If aa(1, i) <> "" Then
For f = i + 1 To UBound(aa, 2)
If aa(1, f) = aa(1, i) Then aa(1, f) = "" Else Exit For
Next f
aa(1, i) = f - i: i = f - 1
End If
Next i
If aa(1, UBound(aa, 2)) <> "" Then aa(1, UBound(aa, 2)) = 1
With .Cells(1, d).Resize(, n)
.Offset(-1).Clear: .Offset(-1).HorizontalAlignment = xlCenter
For i = 1 To UBound(aa, 2)
Select Case aa(1, i)
Case ""
Case 1: .Cells(0, i) = .Cells(1, i)
Case Else
.Cells(0, i).Resize(, aa(1, i)).MergeCells = True
.Cells(0, i) = .Cells(1, i)
End Select
Next i
End With
End With
End Sub
Cette macro procède à chaque exécution à un recalcul complet de la ligne 3, et supprime l'existant ligne précédente pour la recomposer en fonction de ce recalcul.
Cordialement.