Private Sub CommandButton1_Click()
Dim WsC As Worksheet
Dim WsCo As Worksheet
Dim WsR As Worksheet
Dim plgC As Range, plgCo As Range, plgRes As Range
Dim Som As Double
Dim k As Long
Set WsC = Worksheets("Clients")
Set WsCo = Worksheets("Cdes")
Set WsR = Worksheets("Résultat")
Set plgC = WsC.Range("A1:K" & WsC.Cells(65536, 1).End(xlUp).Row) 'Plage clients
Set plgCo = WsCo.Range("A1:F" & WsCo.Cells(65536, 1).End(xlUp).Row) 'Plage commandes
Set plgC = plgC.Offset(1).Resize(plgC.Rows.Count - 1, plgC.Columns.Count) 'Plage clients sans l'entête
Set plgCo = plgCo.Offset(1).Resize(plgCo.Rows.Count - 1, plgCo.Columns.Count) 'plage commandes sans l'entête
'Vider la plage de résultat précédente
WsR.UsedRange.Clear
'Préparer la plage résultats ATTENTION la plage commence en B pour laisser la colonne A aux sommes
Set plgRes = WsR.Range("B1").Resize(plgC.Rows.Count, plgC.Columns.Count)
'Y mettre toutes les données clients d'un seul coup
plgRes.Value = plgC.Value
'Somme des totaux par formule pour n'en garder que les valeur
With plgRes.Columns(1).Offset(, -1)
.Cells.FormulaR1C1 = "=SUMIF('" & WsCo.Name & "'!" & plgCo.Columns(2).Address(True, True, xlR1C1) & ",'" & WsR.Name & "'!RC[1],'" & WsCo.Name & "'!" & plgCo.Columns(4).Address(True, True, xlR1C1) & ")"
.Value = .Value 'Ne garde que les valeurs résultat
End With
'Somme des totaux par formule en bouclant sur la colonne
' k = 1
'Pour toutes les cellules de la colonne 1 (id) de la plage clients
' For k = 1 To plgRes.Rows.Count
'Faire calculer par excel (fonction de feuille somme.si) le montant totatl des commande pour l'iD client
' Som = Application.SumIf(plgCo.Columns(2), plgRes.Cells(k, 1), plgCo.Columns(4))
' WsR.Cells(k, 1) = Som
' Next
End Sub