Option Explicit
Sub Test()
If ActiveSheet.Name <> "Feuil1" Then Exit Sub
Dim n&: n = Cells(Rows.Count, 1).End(3).Row
If n = 1 And IsEmpty([A1]) Then Exit Sub
Dim c1$, c2$, v1#, v2#, i&, j&, k As Byte
i = n: Application.ScreenUpdating = 0
Do While i > 0
With Cells(i, 1)
If UCase$(.Offset(, 10)) = "X" Then 'on ignore toutes les lignes qui n'ont
'pas de "X" en colonne K ; le UCase$() te permet de cocher aussi avec "x".
If Not IsEmpty(.Value) Then 'sécurité, au cas où tu mettrais par inadvertance une
'coche "X" en colonne K pour une des lignes vides intercalaires ; exemple : même
'si tu mets un "X" en K20, la ligne 20 sera ignorée car A20 est vide.
c1 = .Offset(, 6) 'n° de compte de la ligne haut d'un groupe de 2 lignes
c2 = .Offset(1, 6) 'n° de compte de la ligne bas d'un groupe de 2 lignes
v2 = .Offset(, 4): If v2 = 0 Then v2 = .Offset(, 5) 'TTC (en colonne E ou F)
v1 = Round(v2 / 1.2, 2) 'HT = TTC / 1,2 (avec un arrondi à 2 décimales)
With .Offset(, 4)
.Resize(2, 2).ClearContents 'on efface tous les montants du groupe de 2 lignes
If Left$(c1, 3) = "512" Then .Offset(, 2) = c2: .Offset(1, 2) = c1 'inversion
'des n° compte si le compte Banque 512000 (ou 512) est sur la 1ère ligne haut
k = 5 - (Left$(.Offset(, 2), 1) = "7") 'n° colonne : 5 ou 6 => en E ou en F
End With
j = i + 1: Cells(i, k) = v1: Cells(j, 11 - k) = v2: Rows(j).Insert
.Resize(, 4).Copy Cells(j, 1): Cells(j, 7) = "445" & IIf(k = 5, "660", "710")
Cells(j, k) = v2 - v1: .Offset(, 10).ClearContents
End If
End If
End With
i = i - 1
Loop
End Sub