Sub Importation_Demandes()

Dim F_DO  As String
Dim tbSource As ListObject, tbDest As ListObject

Application.ScreenUpdating = False 'on bloque l'ecran

' chemin des classeur pour test
F_DO = "C:\Users\apalo\Desktop\ODP\Demandes outillages.xlsm" ' Chemin du classeur "Demande outillage"

' Ouvrir le classeur "Demandes outillages"
Workbooks.Open Filename:=F_DO

'defini le tableau en feuille demande outillage du fichier Demandes outillages
Set tbSource = Workbooks("Demandes outillages.xlsm").Sheets("Demandes outillages").ListObjects(1)
'defini le tableau en feuille charge de ce fichier
Set tbDest = ThisWorkbook.Sheets("Charge").ListObjects(1)

tbSource.AutoFilter.ShowAllData 'Annule tous les filtres automatiques du tableau "Demandes outillages"
tbDest.AutoFilter.ShowAllData 'Annule tous les filtres automatiques du tableau "CHARGE"

Dim i As Integer, lig As Integer 'decalaration variables
Dim j As Byte 'declaration variable

    For i = 1 To tbSource.ListRows.Count 'boucle sur toutes les lignes du tableau tbsource

        On Error Resume Next 'eviter message erreur si la variable lig = 0
        'trouver ligne dans tbsource
        lig = WorksheetFunction.Match(tbSource.DataBodyRange(i, 1).Value, tbDest.ListColumns(1).DataBodyRange.Value, 0)
        If lig > 0 Then 'cas mise a jour de donnees si existantes en feuille Charge

            With tbDest.DataBodyRange
                For j = 2 To 18 'remise a jour des colonnes B a R
                    .Item(lig, j) = tbSource.DataBodyRange(i, j).Value 'ajoute des donnees colonnes A a R depuis tbsource
                Next j
            End With

        Else: 'cas ajout ligne de donnees si non existantes en feuille Charge
            With tbDest
                If .ListRows.Count = 0 Then 'verifie si tableau en tbdest contient des lignes
                    .ListRows.Add: lig = 1 'si pas de ligne dans tbdest, variable lig vaut 1
                Else: .ListRows.Add: lig = .ListRows.Count 'si ligne dans tbdest, on ajoute une ligne au nombre de lignes existantes dans tbdest
                End If
                With .DataBodyRange
                    For j = 1 To 18 'ajout nouvelles donnees des colonnes A a R
                        .Item(lig, j) = tbSource.DataBodyRange(i, j).Value 'ajoute des donnees colonnes A a R depuis tbsource
                    Next j
                End With
            End With
        End If
        On Error GoTo 0
        lig = 0
    Next i

'Fermer le fichier "Demandes outillages" sans l'enregistrer
Workbooks("Demandes outillages.xlsm").Close savechanges:=False
End Sub
