Sub MAJ_SYNTHESE()
Dim a(), b(), i&, j%, k As Variant
Application.ScreenUpdating = False
'---mémorisation des valeurs en colonnes M (N) O P---
With Sheets("SYNTHESE").[C10].CurrentRegion
ReDim a(1 To .Rows.Count): ReDim b(1 To .Rows.Count, 1 To 4)
For i = 1 To .Rows.Count
If Application.CountA(.Cells(i, 11).Resize(, 4)) Then _
a(i) = .Cells(i, 1): b(i, 1) = .Cells(i, 11): b(i, 3) = .Cells(i, 13): b(i, 4) = .Cells(i, 14)
Next
.Cells(1, 11).Resize(.Rows.Count, 4).ClearContents 'effacement des colonnes M N O P
End With
'---exécution de la macro Maj---
Call Maj
'---regroupement des doublons---
With Sheets("SYNTHESE").[C10].CurrentRegion.Resize(, 9) 'colonnes C à K (formules)
.Value = .Value 'supprime les formules
.Sort .Cells(1), xlAscending, Header:=xlNo 'tri sur la 1ère colonne
For i = .Rows.Count To 2 Step -1
If .Cells(i, 1) = .Cells(i - 1, 1) Then
For j = 3 To 9 'colonnes E à K
If IsNumeric(CStr(.Cells(i, j))) Then .Cells(i - 1, j) = .Cells(i, j) + Val(Replace(.Cells(i - 1, j), ",", "."))
Next
.Rows(i).EntireRow.Delete 'suppression de la ligne doublon
End If
Next
'---restitution des valeurs mémorisées en colonnes M O P---
For i = 1 To .Rows.Count
k = Application.Match(.Cells(i, 1), a, 0)
If IsNumeric(k) Then .Cells(i, 11) = b(k, 1): .Cells(i, 13) = b(k, 3): .Cells(i, 14) = b(k, 4)
Next
End With
End Sub