Salut djodjo
J'ai compris à cette heure quelle était ton souci, tu aurais été plus explicite il n'y aurait pas eu toute cette discussion
Donc effectivement la dernière ligne de ta formule de sous-total ne suivait pas, voici le code corrigé, qui insère une ligne juste avant la dernière, ce qui permet à la formule de ton sous-total de suivre.
Avec une amélioration, je saisi la cellule des quantités de la dernière ligne remplie au niveau désignation
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Tbl As ListObject
Dim Valeur As String
Dim dLigFac As Long
'
If Target.CountLarge > 1 Then Exit Sub
' Récupérer la dernière ligne du corps de facture
dLigFac = Range("LigneRemarques").Row - 1
'Ne surveille que la plage B19:B & dligfac
If Not Intersect(Target, Me.Range("B19:B" & dLigFac)) Is Nothing Then
Valeur = Trim(Target.Value)
If Valeur = "" Then Exit Sub
Set Tbl = Worksheets("DATABASE").ListObjects("TsType")
If Application.CountIf(Tbl.ListColumns(1).DataBodyRange, Valeur) = 0 Then
Tbl.ListRows.Add.Range.Cells(1, 1).Value = Valeur
End If
' Vérifier si dernière ligne atteinte
If Target.Row = dLigFac Then
If MsgBox("La dernière ligne du cops de la facture est atteinte," & vbCrLf _
& "Voulez-vous en ajouter une ?", vbQuestion + vbYesNo, "AJOUTER 1 LIGNE...") = vbYes Then
Application.EnableEvents = False
' Copier la ligne au dessus de la dernière remplie (évite les bordures)
Rows(dLigFac - 1).EntireRow.Copy
' L'insert à la dernière ligne
Rows(dLigFac - 1).Insert Shift:=xlDown
' Copier la nouvelle dernière ligne
Range("B" & dLigFac + 1 & ":D" & dLigFac + 1).Copy
' Colle uniquement les valeurs/formules sur la ligne du dessus
Range("B" & dLigFac).PasteSpecial xlPasteFormulas
' Efface la nouvelle dernière ligne
Range("B" & dLigFac + 1 & ":D" & dLigFac + 1).ClearContents
' Sélectionen la cellule C pour saisir la quantité
Range("C" & dLigFac).Select
Application.EnableEvents = True
End If
End If
End If
' Celluel E4
If Not Intersect(Target, Range("E4")) Is Nothing Then
If Range("E4").Value <> "" Then
Call GetClientData(Range("E4").Value)
End If
End If
End Sub
A+