Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim NCS As String 'déclare la variable NCS (Nom du Classeur Source)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Worksheets("reception données") 'définit l'onglet destination OD
OD.Range("A2").CurrentRegion.Offset(1, 0).Clear 'supprime des éventuelles anciennes valeurs
CA = CD.Path & "\" 'définit le chemin d'accès CA (à adapter si le classeur ne se trouve pas dans le même dossier que le classeur CD)
NCS = "Classeur1.xlsx" 'définit le nom du classeur source (à adapter si le nom est différent)
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set CS = Workbooks(NCS) 'définit le classeur source (génère une erreur si ce classeur n'est pas ouvert)
If Err <> 0 Then 'condition : si une erreur a été générée
    Err.Clear 'supprime l'erreur
    Set CS = Workbooks.Open(CA & NCS) 'définit le classeur source en l'ouvrant
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreur
Set OS = CS.Worksheets("feuille de donnees") 'définit l'onglet source
TV = OS.Range("A4").CurrentRegion 'définit le tableau des valeurs TV
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    If UCase(TV(I, 1)) = "OK" Then 'condition 1 : si la donnée ligne I colonne 1 de TV convertie en majuscules est égale à "OK"
        For J = 7 To 9 'boucle 12 sur les colonne 7 à 9 du tableau des valeurs TV (=> colonnes G à I)
            If TV(I, J) <> "" Then 'condition 2 : si la donné ligne I colonne J de TV n'est pas vide
                Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
                DEST.Value = TV(I, J) 'renvoie le sous dossier dans DEST
                DEST.Offset(0, 1).Value = TV(I, 2) 'renvoie l'affaire dans DEST décelée d'une colonne à droite
                DEST.Offset(0, 2).Value = TV(I, 3) 'renvoie le nom dans DEST décelée de deux colonnes à droite
                DEST.Offset(0, 3).Value = TV(I, 4) 'renvoie l'adresse dans DEST décelée de trois colonnes à droite
                DEST.Offset(0, 4).Value = TV(I, 6) 'renvoie la ville dans DEST décelée de quatres colonnes à droite
            End If 'fin de la condition 2
        Next J 'prochaine colonne de la boucle 2
    End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle 1
CS.Close False 'ferme le classeur source sans enregistrer
'quadrillage
With OD.Range("A2").CurrentRegion
    With .Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
    End With
    With .Borders(xlEdgeTop)
        .LineStyle = xlContinuous
    End With
    With .Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
    End With
    With .Borders(xlEdgeRight)
        .LineStyle = xlContinuous
    End With
    With .Borders(xlInsideVertical)
        .LineStyle = xlContinuous
    End With
    With .Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
    End With
End With
End Sub