Bonjour DonMunnir, bonjour le forum,
Je revois ma position, suite à ton mail perso. Pour un étranger, je te félicite pour l'effort que tu fait en écriture. Beaucoup de français n'en font pas autant...
J'ai inversé le code qui doit maintenant être placé dans le classeur ven 2.xlsx, mais le problème reste identique, il faut que les deux fichiers soient enregistrés dans le même dossier. Autre chose, sans ouvrir le fichier source je ne sais pas faire (une histoire d'ADO et j'ai passé l'âge...). Le fichier est ouvert, les données sont récupérées et le classeur est refermé. C'est pratiquement transparent...
Le code à placer dans le classeur qui s'appellera désormais : ven 2.xlsm :
Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CH As String 'déclare la variable CH (Chemin d'accès)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable CS (Onglet Source)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Application.ScreenUpdating = False 'masque les raffraîchissements d'écran
Set CD = ThisWorkbook 'définit le classeur destination CD
CH = CS.Path & "\" 'définit le chemin d'accès CH
Set OD = CD.Worksheets("MO 2") 'définit l'onglet destination OD
Set CS = Workbooks.Open(CH & "ven 1.xlsx") 'ouvre le classeur "ven 1.xlsx"
Set OS = CS.Worksheets("MO 1") 'définit l'onglet source OS
DL = OS.Range("Q" & Application.Rows.Count).End(xlUp).Row 'définit la dernière ligne éditée Dl de la colonne Q de l'onglet source OS
For I = 13 To DL 'boucle sur les lignes 13 à DL
'si la cellule ligne I, colonne 17 (=Q) de l'onglet OS n'est pas vide et si il a la couleur vert ou jaune
If OS.Cells(I, 17).Value <> "" And OS.Cells(I, 17).Interior.Color = 65535 Or OS.Cells(I, 17).Interior.Color = 11073710 Then
'récupère dans la cellule ligne I, colonne 17 (=Q) de l'onglet OD, la valeur de la cellule ligne I, colonne 17 (=Q) de l'onglet OS
OD.Cells(I, 17).Value = OS.Cells(I, 17).Value
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
CS.Close False 'ferme le classeur source sans enregistrer
CD.Save 'enregistre le classeur destination
Application.ScreenUpdating = True 'affiche les raffraîchissements d'écran
End Sub