Salut , qu’entends-tu « prends beaucoup de temps » ? ^^
une solution serait de passer par des tableaux je pense, une idée pour démarrer:
sub TOTO()
Dim MON_TABLEAU_R1 As Variant
Dim MON_TABLEAU_R2 As Variant
Dim BALAYAGE_TABLEAU_R1 As Integer
Dim BALAYAGE_TABLEAU_R2 As Integer
MON_TABLEAU_R1 = Worksheets("Mai").UsedRange
MON_TABLEAU_R2 = Worksheets("April").UsedRange
'si les deux feuilles Mai et April (d'ailleurs attention tu as du francais/anglais mélanger dans ton classeur :D) sont trop grosses
'on pourra toujours limiter sur la colonne G sur les cases non vides, à voir
'on balaye tout le tableau, correspond à ton for each C
For BALAYAGE_TABLEAU_R1 = LBound(MON_TABLEAU_R1) To UBound(MON_TABLEAU_R1)
'on va balayer tout le tableau R2 voir si on retrouve la même chaine de caractère
'si tu as classé (ou peux le faire) les valeurs des colonnes G par ordre croissant/décroissant avant de faire
'cette macro, on peut gagner pas mal de temps car de base on va devoir si taper toute la colonne G du R2 à chaque fois
For BALAYAGE_TABLEAU_R2 = LBound(MON_TABLEAU_R2) To UBound(MON_TABLEAU_R2)
If MON_TABLEAU_R1(BALAYAGE_TABLEAU_R1, 7) = MON_TABLEAU_R2(BALAYAGE_TABLEAU_R2, G) Then
'on modifies le tableau R1
'ton F1.Cells(R1.Row, "X").Value = (F1.Cells(R1.Row, "N").Value) - (F2.Cells(R2.Row, "N").Value) qu'il faut refaire dans via les tableau R1 et R2
'on sort car on a trouvé l'itération
Exit For
End If
Next
Next
'on recopie le tableau R1
Worksheets("Mai").UsedRange = MON_TABLEAU_R1
End Sub
ECG