Sub exporter()
Application.ScreenUpdating = False

Dim ligFin, ligExport, nbLig
Dim tableauSource, tableauFin

'vérifie que le programme doit être lancé
If Range("a8") = "" Then
    MsgBox "La cellule A8 doit être renseignée pour procéder à l'export.", vbInformation
    Exit Sub
End If

'initialisation des variables
client = Range("b4")
contrat = Range("b5")
ligFin = Range("a" & Rows.Count).End(xlUp).Row
tableauSource = Range("a8", "ab" & ligFin)
nbLig = 0

With Feuil3
    ligFin = .Range("a" & Rows.Count).End(xlUp).Row
    tableauFin = .Range("a1", "b" & ligFin)
    'Si au moins on trouve le nom du client quelque part
    If Not .Range("a1", "a" & ligFin).Find(client, lookat:=xlWhole) Is Nothing Then
        For i = LBound(tableauFin, 1) To UBound(tableauFin, 1)
            'cherche le client et le contrat
            If tableauFin(i, 1) = client Then
                If tableauFin(i, 2) = contrat Then
                    If nbLig = 0 Then
                        ligExport = i
                    End If
                    
                    nbLig = nbLig + 1
                ElseIf nbLig > 0 Then
                    Exit For
                End If
            ElseIf nbLig > 0 Then
                Exit For
            End If
        Next i
    Else
        ligExport = ligFin + 1
    End If
    
    'insertion/suppresion de lignes
    If nbLig < UBound(tableauSource, 1) Then
        .Range("a" & ligExport).Resize(UBound(tableauSource, 1) - nbLig).EntireRow.Insert shift:=xlShiftDown, copyorigin:=xlFormatFromRightOrBelow
    ElseIf nbLig > UBound(tableauSource, 1) Then
        .Range("a" & ligExport).Resize(nbLig - UBound(tableauSource, 1)).EntireRow.Delete shift:=xlShiftUp
    End If
    
    .Range("c" & ligExport, "ad" & ligExport + UBound(tableauSource, 1) - 1) = tableauSource
    
    For i = LBound(tableauSource, 1) To UBound(tableauSource, 1)
        .Range("a" & ligExport + i - 1) = client
        .Range("b" & ligExport + i - 1) = contrat
    Next i
End With

Application.ScreenUpdating = True
End Sub

Sub import()
Application.ScreenUpdating = False

Dim ligFin, ligExport, nbLig, decLig
Dim tableauSource

'initialisation des variables
decLig = 0
client = Range("b4")
contrat = Range("b5")

'efface les données de la feuille
Range("a8", "ab" & Range("a" & Rows.Count).End(xlUp).Row + 1) = ""

With Feuil3
    ligFin = .Range("a" & Rows.Count).End(xlUp).Row
    tableauSource = .Range("a1", "ad" & ligFin)
    'Si au moins on trouve le nom du client quelque part
    If Not .Range("a1", "a" & ligFin).Find(client, lookat:=xlWhole) Is Nothing Then
        For i = LBound(tableauSource, 1) To UBound(tableauSource, 1)
            'cherche le client et le contrat
            If tableauSource(i, 1) = client Then
                If tableauSource(i, 2) = contrat Then
                    For j = LBound(tableauSource, 2) + 2 To UBound(tableauSource, 2)
                        Cells(8 + decLig, j - 2) = tableauSource(i, j)
                    Next j
                    
                    decLig = decLig + 1
                ElseIf decLig > 0 Then
                    Exit Sub
                End If
            ElseIf decLig > 0 Then
                Exit Sub
            End If
        Next i
    End If
End With

Application.ScreenUpdating = True
End Sub
