Sub test_2()
Dim i&, Rw&, Col&
Dim D As Object, F As Worksheet
Set F = Sheets("Cartes")
Set D = CreateObject("scripting.dictionary")
With Sheets("BDD")
'on index les lignes de la feuille BDD suivant les Nom-Prénom
'D(Nom-Prénom) = Ligne
For i = 2 To .Cells(.Rows.Count, 1).End(3).Row
D(.Cells(i, 1).Value) = i
Next i
'On récupère la ligne correspondant à la cellule Sheets("Cartes").Range("$B$2")
Rw = D(F.Range("$B$2").Value)
'On récupère la dernière colonne remplie sur la ligne trouvée (rw)
'si la colonne est inférieur à 5, on prend 5
Col = WorksheetFunction.Max(.Cells(Rw, .Columns.Count).End(1)(1, 2).Column, 5)
'La cellule Sheets("BDD") Ligne Rw, colonne 3 (C)
'Est égale à la somme des cellules Sheets("Cartes").Range("$F$9").Value + Sheets("Cartes").Range("$I$3")
.Cells(Rw, 3) = F.Range("$F$9").Value + F.Range("$I$3").Value
'On vide la cellule Sheets("Cartes").Range("$F$9")
F.Range("$F$9").ClearContents
'On vide les colonnes de la ligne Rw colonne 5 jusqu'a la colonne Col
'(5 ou plus suivant ce qui est remplis sur la ligne Rw)
.Range(.Cells(Rw, 5), .Cells(Rw, Col)).ClearContents
End With
End Sub